flutter - 作为参数的函数 (DART)
问题描述
我试图了解 dart 如何使用函数作为参数。我写了这段代码...
typedef Future<String> myFunction();
void main() {
A a = A();
a.f1(a._f1);
}
class A {
f1(myFunction func) async {
String x = await _f1;
print(x);
}
Future<String> _f1() {
Future.delayed(Duration(seconds: 3)).then((f) {
return "test";
});
}
}
我需要函数 f1 返回“test”,但我有这个错误:“Future Function()”类型的值不能分配给“String”类型的变量
如果我将 String x = await _f1 更改为 Future x = await _f1 我还有另一个错误。我尝试了很多组合,但都失败了。
有人可以修复我的代码吗?谢谢你。
解决方案
要执行一个函数,您需要( arguments )
在其名称后添加括号。函数是变量还是预定义的(常量)并不重要。
请查看以下示例:
示例 1。
Future<int> add(int a, int b) async {
return Future.delayed(Duration(seconds: 2)).then((f) {
return a + b;
});
}
Future<int> test(Future<int> Function(int a, int b) func) async {
return await func(3, 2);
}
void main() {
test(add)
.then(print); /// will return result of 3+2 after 2 seconds
}
示例 2。
String Function(String, String) mergeFunction = (String a, String b) {
return a + b;
};
void main() {
print(mergeFunction('Hello ', 'world'));
}
推荐阅读
- ruby-on-rails - 如何在 ActiveAdmin 中制作可排序的列?
- python - 如何合并不同数据框的两列,如果找到匹配项,使用 pandas 在新列中写入“True”
- python - 如何使打开的stl文件不漏水
- javascript - 警告:无法对未安装的组件执行 React 状态更新
- google-secret-manager - 如何从 Google Secret Manager 解码 base64 有效负载?
- ruby-on-rails - 如何使用 Rails 5.2 中的关系属性通过关系过滤 has_many 中的记录?
- python - Beautiful Soup 内联解析和
进字典
- python - 使用 Python 消除数据文件中的特定数字
- node.js - 节点声明表达多文件的区别?
- c++ - 如何声明任何继承类的实例?