簡體   English   中英

如何初始化一個 Future,然后在 Flutter/Dart 中替換它?

[英]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.

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