Flutter 在颤振中传递构造函数作为参数
在我的flatter应用程序中有10多个不同的API通信服务,以及100多个关注数据解析的API调用。为了重用代码,我决定创建一些常见的解析代码来解析API中的数据:Flutter 在颤振中传递构造函数作为参数,flutter,constructor,parameter-passing,Flutter,Constructor,Parameter Passing,在我的flatter应用程序中有10多个不同的API通信服务,以及100多个关注数据解析的API调用。为了重用代码,我决定创建一些常见的解析代码来解析API中的数据: ApiResponse handleObjectResponse({ @required http.Response serverResponse, @required Function objectConstructor, }) { if (serverResponse.statusCode == 200
ApiResponse handleObjectResponse({
@required http.Response serverResponse,
@required Function objectConstructor,
}) {
if (serverResponse.statusCode == 200) {
dynamic responseObject = objectConstructor(json.decode(serverResponse.body));
return ApiResponse(responseObject: responseObject);
} else {
ApiError error = responseHasError(serverResponse.body);
return ApiResponse(error: error);
}
}
通过这种方式,无论对象类是什么,我都能够以可重用的方式从API解析JSON对象,只需将构造函数传递给此方法
当我在为获取数据而创建的任何服务中调用此方法时,如下所示:
handleObjectResponse(serverResponse: response, objectConstructor: ChartData.fromJson);
我得到错误:没有为类“ChartData”定义getter“fromJson”。
尝试导入定义“fromJson”的库,将名称更正为现有getter的名称,或定义名为“fromJson”的getter或字段。
我认为问题出在这个模型类和factory
语句中,但我不知道如何解决它:
class ChartData {
List<ChartDataPoint> points;
ChartData({
this.points,
});
factory ChartData.fromJson(Map<String, dynamic> json) {
List jsonPoints = json["data"];
return ChartData(
points: List.generate(jsonPoints.length,
(i) => ChartDataPoint.fromJsonArray(jsonPoints[i])));
}
}
类图表数据{
列出要点;
图表数据({
这一点,,
});
factory ChartData.fromJson(映射json){
列出jsonPoints=json[“数据”];
返回图表数据(
points:List.generate(jsonPoints.length,
(i) =>ChartDataPoint.fromJsonArray(jsonPoints[i]);
}
}
不能将构造函数作为函数传递。您需要创建一个调用构造函数的函数:
(int a) => Foo(a);
完美地工作…但这是一种多么愚蠢的做事方式…这可能无法用其他任何方式实现,可能是不同类型的构造函数?没有关键字工厂?不,这不行。它曾经是一项功能,但后来被删除。