首页 > 解决方案 > Dart:解析 api 响应并从父级动态创建子 T

问题描述

寻找一种从 API 解析数据的干净方法。

API 返回用于创建包含在元数据中的“船”和“汽车”模型的数据。

{
    “timestamp” “0000”,
    “data”: {
        “count” “1”,
        “results” [
            {
                “name”: “boatyMcBoatFace”
            }
        ]
    }
}

我想使用自定义fromJson()方法为元数据和船/车数据创建 2 个类。当前的实现是这样的

Class Boat {
    String name;
    
    Boat.fromJson(json) {
        this.name = json[‘name’]
    }
    static List<Boat> listFromJson(List<dynamic> json) {
        return json.map((c) => Boat.fromJson(c)).toList();
    }
}

ResponseModel<T> {
    String timestamp
    DataModel data
    
    ResponseModel.fromJson(json) {
        this.timestamp = json[‘timestamp’]
        this.data = DataModel<T>.fromJson(json[‘data’])
    }
}

DataModel<T> {
    String count
    List<T> results 
    
    DataModel.fromJson(json) {
        this.count = json[‘count’]
        this.results = json[‘results’] // change this, see below
    }
}

目前我正在创建一个 ResponseModel,它反过来创建一个 DataModel。但后来我手动创建和设置船使用:

// yes
final res = methodThatMakesHttpRequest();
final apiResponse = ResponseModel<Boat>.fromJson(res);

// no
final boats = Boat.listFromJson(apiResponse.data.results);
apiResponse.data.results = boats;

理想情况下,我会删除最后两行,而是让 Boats 在内部动态创建DataModel.fromJson,例如

    DataModel.fromJson(json) {
        this.count = json[‘count’]
        T.listFromJson(json[‘results’])
    }

但这当然不起作用,因为 T.listFromJson 不存在。

标签: flutterdart

解决方案


推荐阅读