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 &amp;&amp; ismounted

它检查小部件是否安装在树中,如果是,它会设置状态。

【讨论】:

以上是关于Flutter:在构造函数中调用 setState():_SharesListState#6c96a(生命周期状态:已创建,无小部件,未安装)的主要内容,如果未能解决你的问题,请参考以下文章

SetState() 在构造函数中调用

在构建期间调用 setState() 或 markNeedsBuild() - Flutter

编辑文本控制器更新小部件值而不调用 setState() - Flutter

Flutter - 在构建期间调用 setState() 或 markNeedsBuild()

在 Flutter 中从 main() 调用 setState()

Flutter:状态类:为啥不在 setState 方法调用之前改变状态变量,而不是在 setState 方法中