无法将参数Future分配给参数类型void Function()

时间:2020-05-06 19:11:04

标签: flutter

我在一个按钮上有一个全状态的结婚通知

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()'

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

更新 :实际上,不需要将上下文传递到_exportData中,因为上下文可以在状态类中使用

1 个答案:

答案 0 :(得分:1)

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

进行此更改并告知我们。

编辑:

onPressed:_exportData(ctx),//错误出现在这里

您不能这样做,因为您只能在onPressed中传递对函数的引用。如果要将参数传递给函数,则必须按照上面显示的方式进行操作(尽管不一定必须异步)。没有开括号和右括号的函数名称是引用,而带有括号的函数名称是实际的函数调用。

这样做的原因是onPressed接受了函数/指针的引用/地址,而不是实际的函数调用。因此,如果必须通过您自己的方式传递参数(在您的情况下为上下文),我们将需要在参数周围加上括号,使其成为函数调用而不是引用,因此在build方法运行时而不是在执行时立即执行onPressed触发它。

我向您展示的方式将一个匿名函数分配给onPressed。看,最后没有括号,因此不要立即执行它并充当对函数的引用。我放置了一个异步并在那里等待,因为您的_exportData函数返回了Future。

希望可以消除您的疑问!