[英]How to initialize a Future and then replace it in Flutter/Dart?
如何在 Flutter 中為 FutureBuilder 正確初始化 Future? 如您所見,由於后期 Future 尚未初始化,因此引發了異常。 (請忽略該方法中未使用參數 v,為簡單起見刪除了方法細節,但 v 很重要)。
late Future<int> myIntvalue;
Future<int> getStackInit(int v) async {
await Future.delay(Duration(seconds: 5));
return 5;
}
@override
void initState()
{
SharedPreferences.getInstance().then((sp) {
int value = sp.getInt("StartValue") ?? 0;
myIntvalue = getStackInit(value);
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: FutureBuilder(
future: myIntvalue, <-- Exception, not initialized
builder: (context, AsyncSnapshot snapshot) {
....
問題在於,當到達 FutureBuilder 時 myIntvalue 尚未初始化。 在“真正”初始化之前初始化未來的最佳方法是什么? 或者是否可以在初始化期間定義未來並稍后“替換”結果? 有沒有更優雅的方式?
謝謝!
通常,如果您需要能夠檢查某些內容是否已初始化,則需要將其設為可空。
或者您可以將您的Future
設置為初始標記值(例如Future.value(0)
),稍后替換它,然后調用setState
來重建您的小部件樹,就像您必須更新任何其他成員變量一樣。
但是,在您的情況下,您應該盡快將myIntvalue
初始化為所需的Future
。 例如:
@override
void initState()
{
Future<int> initializeIntValue() async {
var sp = SharedPreferences.getInstance();
int value = sp.getInt("StartValue") ?? 0;
return await getStackInit(value);
}
myIntvalue = initializeIntValue();
super.initState();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.