构建期间调用的 setState() 或 markNeedsBuild()
Posted
技术标签:
【中文标题】构建期间调用的 setState() 或 markNeedsBuild()【英文标题】:setState() or markNeedsBuild() called during build 【发布时间】: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);
,
),
请帮忙
【问题讨论】:
【参考方案1】:您无法在构建期间推送新路由。将逻辑移至您的 initState。
@override
void initState()
isFirstTime().then((data)
if(data)
Navigator.pushNamed(context, '/howtouse');
super.initState();
【讨论】:
成功了,非常感谢!以上是关于构建期间调用的 setState() 或 markNeedsBuild()的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - 在构建期间调用 setState() 或 markNeedsBuild()
在构建期间调用 setState() 或 markNeedsBuild() - Flutter
Flutter:在构建期间调用 setState() 或 markNeedsBuild()
在构建 CupertinoTabScaffold 期间调用 setState() 或 markNeedsBuild()