簡體   English   中英

參數 Future 不能分配給參數類型 void 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM