Tra*_*Nam 9 factory abstract dart flutter
所以我有一个Question像下面这样的课程:
@JsonSerializable()
class Question {
String id;
String content;
Question({this.id, this.content});
factory Question.fromJson(Map<String, dynamic> json) =>
_$QuestionFromJson(json);
Map<String, dynamic> toJson() => _$QuestionToJson(this);
}
Run Code Online (Sandbox Code Playgroud)
请记住,那些_$QuestionFromJson和 _$QuestionToJson来自这个库https://pub.dev/packages/json_serializable
假设我有很多类似的类,它们有一个 fromJson 工厂和一个 toJson 方法。我想创建一个包含这两种方法的基类。基本模型对于 toJson 来说很容易,如下所示:
abstract class BaseModel {
Map<String, dynamic> toJson();
}
Run Code Online (Sandbox Code Playgroud)
但是工厂方法呢,我不知道如何声明它们然后简单地像这样覆盖它:
@override
factory Question.fromJson(Map<String, dynamic> json) =>
_$QuestionFromJson(json);
Run Code Online (Sandbox Code Playgroud)
编辑:
我使用它的想法是因为我想创建一个转换器实用程序,我只需要传递像Converter.listFromJson<MyClass>(jsonString). 现在,助手是:
static List<T> listFromJson<T>(jsonString, Function mappingFunction) {
return myJsonMap.map(mappingFunction).cast<T>().toList();
}
Run Code Online (Sandbox Code Playgroud)
所以我每次使用这个辅助方法时都必须通过传递 map 函数来映射每个项目:
Converter.listFromJson<Question>(
jsonMap, (item) => Question.fromJson(item));
Run Code Online (Sandbox Code Playgroud)
还有一些类需要像这样转换为列表。我想重用没有(item) => Question.fromJson(item)方法部分的方法。这就是为什么我想创建一个具有工厂 fromJson 方法的基类,以便我可以在转换器中使用它
return myJsonMap.map((item) => BaseModel.fromJson(item)).cast<T>().toList();
Run Code Online (Sandbox Code Playgroud)
然后我只是简单地打电话
Converter.listFromJson<Question>(jsonMap);
Run Code Online (Sandbox Code Playgroud)
感谢您的时间。
我不知道我是否正确理解了你的意思,这就是我从你的问题中了解到的
abstract class BaseModel{
BaseModel();
BaseModel.fromJson(Map<String,dynamic> json);
}
class Question extends BaseModel{
final String id;
final String name;
Question({this.id,this.name}): super();
@override
factory Question.fromJson(Map<String, dynamic> json) {
return Question(
id: json['id'],
name: json['name']
);
}
}
void main(){
Map<String,dynamic> json = {'id': "dsajdas",'name': 'test'};
Question question = Question.fromJson(json);
print('question: ${question.id}');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2628 次 |
| 最近记录: |