Yud*_*ngh 5 class dart flutter
我需要创建一个具有动态字段的类,这取决于 API 返回的内容。
我正在使用定制的 Rest API,它返回的数据在所有情况下都没有相同数量的字段。到目前为止,我一直在使用带有工厂构造函数的类从响应中创建对象,如下所示:
class MyClass {
dynamic field1;
dynamic field2;
dynamic field3;
dynamic field4;
MyClass({
this.field1,
this.field2,
this.field3,
this.field4,
});
factory MyClass.fromJson(dynamic json) {
return MyClass(
field1: json['field1'],
field2: json['field2'],
field3: json['field3'],
field4: json['field4'],
);
}
}
Run Code Online (Sandbox Code Playgroud)
如果响应是:
{
"field1": 123,
"field2": 432,
"field3": 213,
"field4": 331
}
Run Code Online (Sandbox Code Playgroud)
但这并不适用于所有情况,因为某些响应包含少于或多于 4 个字段。
有可能:
{
"field1": 123,
"field2": 432,
"field3": 213
}
Run Code Online (Sandbox Code Playgroud)
或者
{
"field1": 123,
"field2": 432,
"field3": 213,
"field4": 331,
"field5": 251
}
Run Code Online (Sandbox Code Playgroud)
如何创建一个动态类来检查有多少字段并在运行时创建自己?
AFAIK,截至今天,没有办法实现您在 Dart 中的要求。你可以做的是:
class MyClass {
final Map<dynamic, dynamic> data;
MyClass(this.data);
factory MyClass.fromJson(dynamic json) {
assert(json is Map);
return MyClass(json['data']);
}
}
void main() {
// Let's say this is your json
final json = {
'data': {
'field1': 1,
'field2': 2.2,
},
};
// Create your MyClass instance
var myClass = MyClass.fromJson(json);
// Get the values
var field1 = myClass.data['field1']; // prints 1
var field2 = myClass.data['field2']; // prints 2.2
}
Run Code Online (Sandbox Code Playgroud)