我在一个按钮上有一个全状态的结婚通知
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中,因为上下文可以在状态类中使用
答案 0 :(得分:1)
onPressed: () async { await _exportData(context) }
进行此更改并告知我们。
编辑:
onPressed:_exportData(ctx),//错误出现在这里
您不能这样做,因为您只能在onPressed中传递对函数的引用。如果要将参数传递给函数,则必须按照上面显示的方式进行操作(尽管不一定必须异步)。没有开括号和右括号的函数名称是引用,而带有括号的函数名称是实际的函数调用。
这样做的原因是onPressed接受了函数/指针的引用/地址,而不是实际的函数调用。因此,如果必须通过您自己的方式传递参数(在您的情况下为上下文),我们将需要在参数周围加上括号,使其成为函数调用而不是引用,因此在build方法运行时而不是在执行时立即执行onPressed触发它。
我向您展示的方式将一个匿名函数分配给onPressed。看,最后没有括号,因此不要立即执行它并充当对函数的引用。我放置了一个异步并在那里等待,因为您的_exportData函数返回了Future。
希望可以消除您的疑问!