【问题标题】:setState() or markNeedsBuild() called during build构建期间调用的 setState() 或 markNeedsBuild()
【发布时间】:2020-10-05 00:17:45
【问题描述】:

如果应用首次使用FutureBuilder() 启动,我正在尝试启动“如何使用”屏幕。

isFisrtTime() 如果应用程序首次启动,则返回 true。

这里是FutureBuilder 代码:

body: FutureBuilder(
    future: isFirstTime(),
    initialData: Container(),
    builder: (context, snapshot){

      if(snapshot.data == true){

        Navigator.pushNamed(context, '/howtouse');
        return (currentScreen == 'Home')
            ? HomeBody()
            : CBook(changeScreen: changeCurrentScreen);

      }
      else {

        return (currentScreen == 'Home')
            ? HomeBody()
            : CBook(changeScreen: changeCurrentScreen);
      }

    },
  ),

请帮忙

【问题讨论】:

    标签: android-studio flutter dart


    【解决方案1】:

    您无法在构建期间推送新路由。将逻辑移至您的 initState。

    @override
    void initState() {
      isFirstTime().then((data) {
        if(data) {
          Navigator.pushNamed(context, '/howtouse');
        }
      }
      super.initState();
    }
    

    【讨论】:

    • 成功了,非常感谢!
    猜你喜欢
    • 2018-05-15
    • 2020-12-12
    • 2020-12-28
    • 2021-01-06
    • 2021-06-06
    • 2021-05-31
    • 2021-08-24
    相关资源
    最近更新 更多