我试图了解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返回“测试”,但是我有此错误:无法将类型'Future Function()'的值赋给'String'类型的变量
如果我将String x = await _f1更改为Future x = await _f1我有另一个错误..我尝试了很多
组合,全部失败。
有人可以修复我的代码吗?谢谢。
最佳答案
问题是这一行:
String x = await _f1;
该方法的参数是
func
,因此您在此处直接引用_f1
方法,而不是参数。此外,您不必直接调用方法,而只是直接引用该方法。本质上,您正在尝试将Function
分配给需要String
的变量,这就是错误消息试图告诉您的内容。您需要引用该参数,然后再调用它。
String x = await func();
顺便说一句,您的
_f1
方法当前返回null
。这是因为您正在从then
中的方法返回一个值,但没有向_f1
本身返回任何值,这使Dart默认为返回null
。您必须返回 future 本身:Future<String> _f1() {
return Future.delayed(Duration(seconds: 3)).then((f) {
return "test";
});
}
或您需要切换到
async/await
语法(我的个人建议):Future<String> _f1() async {
await Future.delayed(Duration(seconds: 3));
return 'test';
}
关于flutter - 用作参数(DART),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60307280/