【问题标题】:Flutter - load data async inside initStateFlutter - 在initState中异步加载数据
【发布时间】:2021-08-17 08:03:13
【问题描述】:

新建页面后,我需要加载webservice数据(加载过程中,应该显示忙碌的inducator),然后加载完成后,显示数据。

我的方法是在initState覆盖中加载数据,这样:

void initState() {
    
      setState(() => _isLoading = true);
      fetchData().then((value) {

       // Do something with data
       widget.value = value;

        setState(() => _isLoading = false);
      });
    }

    super.initState();
  }

然后,build 方法将显示加载指示器,或者加载的数据取决于 _isLoading 值。

目前,它可以工作,但我觉得这不是一个好方法,尤其是 afaik,应该避免在 initState 内部调用 setState

您能否提供一些提示,如何在不使代码过于复杂的情况下更好地做到这一点?或者,在这种情况下我的方法是可以接受的?

【问题讨论】:

    标签: flutter dart async-await state


    【解决方案1】:

    为什么不使用FutureBuilder 来构建小部件?
    然后,您也可以处理“加载”状态。

    例子:

    return FutureBuilder(
        future: yourAsyncCall,
        builder: (context, snapshot) {
          if (!snapshot.hasData) return MaybeProgressBar();
          else return TheWidgetYouMade();
        }
    });
    

    【讨论】:

    • FutureBuilder 是正确的,但要确保 yourAsyncCall 是在 initState 方法中生成的,将结果存储在状态中并将其传递给 FutureBuilder。仔细阅读docs
    • 很好的解决方案,我忘了FutureBuilder
    猜你喜欢
    • 2021-09-01
    • 2020-07-28
    • 2019-01-24
    • 2022-01-25
    • 1970-01-01
    • 2020-07-15
    • 2021-07-07
    • 2020-01-02
    • 2019-08-29
    相关资源
    最近更新 更多