【发布时间】:2019-09-21 13:08:37
【问题描述】:
我目前正在尝试通过使用泛型来抽象发出不同的 HTTP 请求。我使用json_serializale 来生成fromJson() 和toJson() 方法。
这是一个简单的模型文件:
import 'package:json_annotation/json_annotation.dart';
part 'article.g.dart';
@JsonSerializable()
class Article {
int id = 0;
String title = "";
Article({this.id, this.title});
factory Article.fromJson(Map<String, dynamic> json) =>
_$ArticleFromJson(json);
Map<String, dynamic> toJson() => _$ArticleToJson(this);
}
我有一个泛型类需要通过fromJson-方法,请参阅:
typedef CreateModelFromJson = dynamic Function(Map<String, dynamic> json);
class HttpGet<Model> {
CreateModelFromJson createModelFromJson;
HttpGet({
this.createModelFromJson,
});
Future<Model> do() async {
// [... make HTTP request and do stuff ...]
return createModelFromJson(jsonData);
}
}
最后,这是ArticleService:
class ArticleService {
Future<Model> read() => HttpGet<Article>({
createModelFromJson: Article.fromJson,
}).do();
}
这在createModelFromJson: Article.fromJson, 中用红色下划线fromJson,错误为:
getter 'fromJson' 没有为“Article”类定义。 尝试导入定义“fromJson”的库,将名称更正为现有 getter 的名称,或定义名为“fromJson”的 getter 或字段。dart(undefined_getter)
显然编译器认为.fromJson 是一个静态字段。但是,如上所示,它是一个静态工厂方法。
1.) 你能帮忙解决如何将构造函数传递给泛型类吗?
另外:
2.) 我不确定我是否真的会得到一个Article,或者我是否必须先输入它?我有点担心typedef 的dynamic 返回类型。
3.) 对于我正在尝试做的事情,我也愿意接受更好的想法。
【问题讨论】: