如何修复 Flutter 构建问题期间调用的 setState
Posted
技术标签:
【中文标题】如何修复 Flutter 构建问题期间调用的 setState【英文标题】:How to fix setState called during build issue in Flutter 【发布时间】:2021-06-09 01:25:42 【问题描述】:当用户转到详细信息屏幕时,我试图自动打开我的警告对话框,但由于某种原因,我在屏幕中的构建错误期间调用了 setState() 或 markNeedsBuild()(图片)。 如果我能就如何解决此错误获得任何建议或帮助,我将不胜感激。
return Scaffold(
appBar: AppBarWidget(
appBar: AppBar(),
showReorder: false,
),
body: BaseView<CardViewModel>(
onDeactivate: (model) ,
onDispose: (model) ,
onModelReady: (model)
model.getCard();
,
builder: (context, model, child)
setState(()
isLargeScreen = false;
if (model.cards.current != true)
if (model.cards.alreadyShow == false)
Future.delayed(Duration.zero, ()
staticwarningDialog(context);
);
);
return _body(model, height, width, context, widget.cardName);
,
));
【问题讨论】:
【参考方案1】:您可以像这样将setState
方法移动到initState
。记住不要在构建时使用 setState 方法。
@override
void initState()
super.initState();
WidgetsBinding.instance.addPostFrameCallback(
(_)
setState(()
// Your code
);
,
);
【讨论】:
嗨,谢谢你,但如果我将我的 setState 方法移动到 initState 和 build 方法之外,那么我的 model.cards.current 和 model.cards.alreadyShow 会出现错误,因为它说“未定义的名称‘模型’。”知道我应该如何解决这个问题吗? 我不太了解你的model
。由于您使用了 builder
方法中的模型,因此您无法从 initState 访问它。请尝试通过执行某些操作从 initState 获取模型。当我不知道如何访问您的 model
代码时,我无能为力。请注意您对“如何从 initState 获取模型?”的问题。将是一个新问题,我认为你需要在你想问的时候开始它。
制作一个新的有状态小部件,将您的模型作为参数传递给它,然后将所有内容移动到它。接下来,您可以关注@ToraCode 写的内容。以上是关于如何修复 Flutter 构建问题期间调用的 setState的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:在构建期间调用 setState() 或 markNeedsBuild()
在构建期间调用 setState() 或 markNeedsBuild() - Flutter
Flutter - 在构建期间调用 setState() 或 markNeedsBuild()
Flutter :setState() 或 markNeedsBuild() 在构建期间调用