首页 > 解决方案 > 作为参数的函数 (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 我还有另一个错误。我尝试了很多组合,但都失败了。

有人可以修复我的代码吗?谢谢你。

标签: flutterdart

解决方案


要执行一个函数,您需要( 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'));
}

运行此代码


推荐阅读