Flutter:已关闭的可关闭小部件仍然是树的一部分

Posted

技术标签:

【中文标题】Flutter:已关闭的可关闭小部件仍然是树的一部分【英文标题】:Flutter: a dismissed dismissible widget is still part of the tree 【发布时间】:2021-11-30 13:00:46 【问题描述】:

我正在构建一个健身应用程序(图片在这里:Fitness App example ) 用户可以在其中记录他们的集合。在我的应用程序中使用可关闭的小部件时遇到问题。滑动删除功能会发送以下异常:已关闭的可关闭小部件仍然是树的一部分

滑动删除单个集合时,我仍然需要保留用户放入其他集合的信息。我认为这是密钥的问题,但是我已经尝试过 UniqueKey()(它会重置所有其他输入字段)和下面的示例。

如何使用dismissible 删除单个集合并仍保留其他集合的其余用户数据?谢谢。

late List count = [0];

ListView.builder(
                shrinkWrap: true,
                itemCount: _count.length,
                itemBuilder: (context, index) 
                  // Create a new variable to display the set
                  int setNumber = index + 1;
                  return Dismissible(
                    key: ValueKey(_count[index]),
                    background: _swipeStyle(),
                    onDismissed: (direction) 
                      // Remove the item from the data source.
                      setState(() 
                        _count.removeAt(index);
                      );
                    ,
                    child: Row(
                      children: [
                        Expanded(flex: 1, child: Text('Set $setNumber')),
                        Expanded(flex: 2, child: _buildWeight(index)),
                        const SizedBox(
                          width: 24.0,
                        ),
                        Expanded(flex: 2, child: _buildReps(index)),
                      ],
                    ),
                  );
                ,
              ),

【问题讨论】:

_count的类型是什么? @caiopo 我已经更新了代码。这是一个列表 ***.com/q/63666258/62576 【参考方案1】:

由于 Key 是基于 int 列表的,可能存在重复的键?在这种情况下,框架将不知道删除了哪个项目,并会触发您刚刚发现的错误。

一种可能的解决方案是为每个项目分配一个唯一的 ID,这样您就不会有重复的键。

【讨论】:

谢谢,这个解决方案可以停止错误。但是,它会从其他剩余集合中重置输入字段。有没有办法在解雇时保留来自其他集合的用户输入?【参考方案2】:

尝试将key: ValueKey(_count[index]) 替换为UniqueKey()

【讨论】:

请格式化您的anwser添加代码块等

以上是关于Flutter:已关闭的可关闭小部件仍然是树的一部分的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 中的可扩展文本小部件 [关闭]

被解雇的 Dismissible 小部件仍然是颤动树的一部分

Flutter - 在 AlertDialog 小部件之外点击后关闭系统键盘

Flutter - 关闭小部件时 BLoC 流实例会导致内存泄漏吗?

Flutter 和 Firebase。数据更改时重建小部件。错误的代码或错误的数据库? [关闭]

如何使用flutter和kotlin在应用程序之外拥有小部件?