![](/img/trans.png)
[英]The argument type 'Future<void> Function()' can't be assigned to the parameter type 'Future<bool> Function()?
[英]The argument Future can not be assigned to the parameter type 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,因為上下文在 state class 中可用
onPressed: () async { await _exportData(context) }
進行此更改並讓我們知道。
編輯:
onPressed: _exportData(ctx), // 這里的錯誤
您不能這樣做,因為您只能在 onPressed 中傳遞對 function 的引用。 如果您想將 arguments 傳遞給 function,您必須按照我上面顯示的方式進行操作(盡管它不一定是異步的)。 沒有左括號和右括號的 Function 名稱是參考,而帶括號的名稱是實際的 function 調用。
原因是 onPressed 獲取函數/指針的引用/地址,而不是實際的 function 調用。 因此,如果我們必須以您的方式傳遞參數(在您的情況下為上下文),我們將需要在參數周圍加上括號,使其成為 function 調用而不是引用,因此在構建方法運行時立即執行它而不是何時onPressed 觸發它。
我向您展示的方式將匿名 function 分配給 onPressed。 看,最后沒有括號,所以不要立即執行它並作為對 function 的引用。 我放了一個異步並在那里等待,因為您的 _exportData function 返回一個未來。
希望能解開你的疑惑!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.