dart - 将类传递给函数
问题描述
我想将类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));
}
}
}
解决方案
你不能。您可以将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));
推荐阅读
- python - Issue using progress_recorder (celery-progress): extends time of task
- python - Pandas.to_numeric 问题
- css - 使用 span 的 CSS Grid 样式问题 - 使用 align-self 时发生变化
- linux - 在 Linux 上使用“Signal-Cli”时出现 Libsignal-Client 错误
- android - 回按时Android隐藏键盘并关闭bottomsheetfragment
- java - 指定列表视图项之间的距离
- javascript - HttpRequest 和嵌套函数中的范围规则
- reactjs - 使用 D3.js 从 SQLite3 数据库中挑选数据
- javascript - Vue路由器传递道具未定义
- javascript - 在同一元素js函数上更改bg-color