Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 在颤振中传递构造函数作为参数_Flutter_Constructor_Parameter Passing - Fatal编程技术网

Flutter 在颤振中传递构造函数作为参数

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

在我的flatter应用程序中有10多个不同的API通信服务,以及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);
    }
}
通过这种方式,无论对象类是什么,我都能够以可重用的方式从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);

完美地工作…但这是一种多么愚蠢的做事方式…这可能无法用其他任何方式实现,可能是不同类型的构造函数?没有关键字工厂?不,这不行。它曾经是一项功能,但后来被删除。