首页 > 解决方案 > 参数 Future 不能分配给参数类型 void Function()

问题描述

我在按钮所在的位置有一个 statefull widged

onPressed: _exportData,

_exportData 以这种方式定义的位置

Future<void> _exportData() async { 
...
    setState(() {
      _message = 'A message'; // I want to use localization string here
    });
}

我需要将本地化字符串传递到上面的 setState() 中,我这样做

Lang.key(ctx, 'about')

即我需要在那里传递上下文,但是当我尝试使它像这样

onPressed: _exportData(ctx), // the error here

Future<void> _exportData(BuildContext ctx) async {...

onPressed有错误

参数 Future 不能分配给参数类型“void Function()”

cat 我如何在_exportData内部传递上下文,或者如何使用_exportData内部的本地化字符串?

更新:实际上没有必要将上下文传递给 _exportData,因为上下文在状态类中是可用的

标签: flutter

解决方案


onPressed: () async { await _exportData(context) }

进行此更改并让我们知道。

编辑:

onPressed: _exportData(ctx), // 这里的错误

您不能这样做,因为您只能在 onPressed 中传递对函数的引用。如果你想将参数传递给一个函数,你必须按照我上面展示的方式来做(尽管它不一定是异步的)。没有左括号和右括号的函数名是引用,而带括号的函数名是实际的函数调用。

原因是 onPressed 获取函数/指针的引用/地址,而不是实际的函数调用。因此,如果我们必须以您的方式传递参数(在您的情况下为上下文),我们将需要将括号放在参数周围,使其成为函数调用而不是引用,因此在构建方法运行时立即执行它而不是何时onPressed 触发它。

我向您展示的方式是为 onPressed 分配一个匿名函数。看,最后没有括号,所以不要立即执行它并充当对函数的引用。我放了一个 async 并在那里等待,因为您的 _exportData 函数返回一个未来。

希望能解开你的疑惑!


推荐阅读