Flutter:在构造函数中调用 setState():_SharesListState#6c96a(生命周期状态:已创建,无小部件,未安装)
Posted
技术标签:
【中文标题】Flutter:在构造函数中调用 setState():_SharesListState#6c96a(生命周期状态:已创建,无小部件,未安装)【英文标题】:Flutter : setState() called in constructor: _SharesListState#6c96a(lifecycle state: created, no widget, not mounted) 【发布时间】:2021-06-26 16:28:03 【问题描述】:错误消息:当您对尚未插入到小部件树的小部件的状态对象调用 setState() 时,会发生这种情况。没有必要在构造函数中调用 setState(),因为在最初创建状态时已经假定状态是脏的。
真的不明白是什么意思=/。
class SharesHomePage extends StatelessWidget
@override
Widget build(BuildContext context)
return Scaffold(
body: Column(
children: [
Header(),
Expanded(
child: SharesList(),
),
],
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: ()
_SharesListState shareListState = _SharesListState();
final ShareModel shareModel = ShareModel('Embraer', 'EMBR3', 13.50, 15.20);
shareListState.addShare(shareModel);
),
);
class SharesList extends StatefulWidget
final List<ShareModel> sharesList = [];
@override
_SharesListState createState() => _SharesListState();
class _SharesListState extends State<SharesList>
@override
Widget build(BuildContext context)
return ListView.builder(
itemCount: widget.sharesList.length,
itemBuilder: (context, index) => ShareItem(widget.sharesList[index]),
);
void addShare(ShareModel shareModel)
if (shareModel != null)
setState(()
widget.sharesList.add(shareModel);
);
** 我尝试输入 "if(this.mounted) 以避免错误,但为什么没有安装小部件?
【问题讨论】:
嗨,Igor,请编辑您的帖子以包含您观察到的不良行为。 【参考方案1】:尝试使用这个:shareModel != null && ismounted
它检查小部件是否安装在树中,如果是,它会设置状态。
【讨论】:
以上是关于Flutter:在构造函数中调用 setState():_SharesListState#6c96a(生命周期状态:已创建,无小部件,未安装)的主要内容,如果未能解决你的问题,请参考以下文章
在构建期间调用 setState() 或 markNeedsBuild() - Flutter
编辑文本控制器更新小部件值而不调用 setState() - Flutter
Flutter - 在构建期间调用 setState() 或 markNeedsBuild()