首页 > 解决方案 > 将类传递给函数

问题描述

我想将类User作为第二个参数传递给load-function。

也许有人知道怎么做?

class App {
  Map<String, List<Model>> models = {
    'users': List<User>()
  };

  App() {
    load('users');
  }

  void load(resource) {
    Directory directory = Directory.fromUri(Uri(path: './app/data/' + resource));
    for (FileSystemEntity file in directory.listSync(recursive: false)) {
      Map<String, dynamic> fileContent = jsonDecode(File(file.uri.path).readAsStringSync());
      models[resource].add(User.fromJson(fileContent));
    }
  }
}

标签: dart

解决方案


你不能。您可以将Type对象作为参数传递,也可以将类型作为类型参数( load<T>(resource) { ... }) 传递,但都不允许您调用User.fromJson该类型。

您可以做的是将User.fromJson函数作为参数传递(或者,如果那是构造函数,则(x) => User.fromJson(x)作为参数传递)。那是:

void load(String resource, Object? fromJson(Map<String, dynamic> json)) { 
  ... 
  map[resoruce].add(fromJson(fileContent));
}

接着

 load("someName", (map) => User.fromJson(map));

推荐阅读