Flutter - 无法修改 List<Widget>

Posted

技术标签:

【中文标题】Flutter - 无法修改 List<Widget>【英文标题】:Flutter - Cannot modify List<Widget> 【发布时间】:2020-05-25 12:35:55 【问题描述】:

我有一个用于“构建”功能的固定长度列表。我想用另一个替换该列表中的一个元素。 List 中的两个元素都是容器。我替换列表中的元素并执行 setState()。 build 函数使用 Scaffold 主体中的 List。我没有收到任何错误,但是当重建完成时,什么都没有改变。

据我所知,这并没有违反任何规则,据我所知应该不会造成任何问题。

虽然我可以围绕这个问题编写代码,但我认为对于这样的基本问题,我需要找到它的原因。

关于为什么会发生这种情况的任何想法?

下面添加的代码:

下面是不起作用的代码

    if (_lwDisplay[iNdxDisplay] == null) /*INITIAL DISPLAY */ 
    _lwDisplay[iNdxDisplay] = wContainer;
     else 
      setState(() 
        _tfDataHasChanged = true;
        _lwDisplay[iNdxDisplay] = wContainer;
      );
    

下面是可以工作的代码

  if (_lwDisplay[iNdxDisplay] == null) /*INITIAL DISPLAY */ 
      _lwDisplay[iNdxDisplay] = wContainer;
     else 
       _tfDataHasChanged = _fnHasDataChanged() /* FOR FAB */;
      List<Widget> lwDisplay2 = List(_lwDisplay.length);
      for (int iNdx = 0; iNdx < lwDisplay2.length; iNdx++) 
        if (iNdx != iNdxDisplay) 
          lwDisplay2[iNdx] = _lwDisplay[iNdx];
        
      
      lwDisplay2[iNdxDisplay] = wContainer;
      _lwDisplay = lwDisplay2;
      setState(() );
    

【问题讨论】:

您能否与我们分享一些代码,以便我们了解您实际在做什么? 已将代码添加到我的问题中。 发布所有定义在一个 main.dart 中的源代码,任何人都可以轻松帮助您。还要添加预期和实际输出。 @BrianOh - 您在哪里创建了程序中的小部件列表? @tomerpacific - 我在第一次构建后在 onBuildComplete 调用的函数中创建了小部件,IE 在第一次构建后。有问题的程序相当大,因为我需要在作为应用程序一部分的另一个程序中复制我遇到的问题,为此,我需要尽可能地模拟该程序。 【参考方案1】:

没有看到完整的代码,根据这个SO question,

将小部件列表的实例化移动到主小部件的 build 方法中。

I.E.

class MainWidgetState extends State<MainWidget> 
      List<YOUR_WIDGET> _lwDisplay = new List();

     Widget build(BuildContext context) 
          //Create your list
     

另外,add a key 到您的小部件中的每个项目(如果您还没有这样做的话)。

【讨论】:

谢谢,我会尽快检查,所以我会在这里回复您。 我花了很多时间试图解决这个问题,感谢您的帮助。我确实创建了另一个较小的测试程序来复制问题,但它没有任何问题。我按照您的建议在构建中创建并使用密钥,但程序仍然出现故障。最后,我刚刚所做的是在构建中创建另一个 List 作为局部变量,并将全局 List 复制到它上面。这个本地 List 然后被构建使用,然后被丢弃。这行得通。 @BrianOh - 很高兴听到事情解决了。如果我的回答有任何帮助,请标记(或投票)。 好的,我投了赞成票,因为它表明我需要了解小部件键。

以上是关于Flutter - 无法修改 List<Widget>的主要内容,如果未能解决你的问题,请参考以下文章

无法在容器 Flutter Firebase 中获取 List<Text> 的值

Flutter Futurebuilder 被修改

颤振无法分配参数类型'List<dynamic>'

Flutter 将 Uint8List 传递给 iOS Objective-c

无法在 Flutter 的 listview.builder 中获取长度

无法在 Flutter 中使用 .map 函数