Ale*_*dar 4 constructor parameter-passing flutter
我的 Flutter 应用程序中有 API 通信服务,其中包含 10 多个不同的服务,以及 100 多个需要解析数据的 API 调用。为了重用代码,我决定创建一些通用的解析代码来解析来自 API 的数据:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这样我就能够以可重用的方式从 API 解析 JSON 对象,无论 Object 类是什么,只需将构造函数传递给此方法即可。
当我在我为获取数据而创建的任何服务中调用此方法时,如下所示:
handleObjectResponse(serverResponse: response, objectConstructor: ChartData.fromJson);
Run Code Online (Sandbox Code Playgroud)
我收到错误:The getter 'fromJson' isn't defined for the class 'ChartData'.
Try importing the library that defines 'fromJson', correcting the name to the name of an existing getter, or defining a getter or field named 'fromJson'.
我认为问题出在这个模型类和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])));
}
}
Run Code Online (Sandbox Code Playgroud)
您不能将构造函数作为函数传递。您需要创建一个函数来调用构造函数:
(int a) => Foo(a);
Run Code Online (Sandbox Code Playgroud)