我试图了解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/

10-14 18:51
查看更多