Flutter ListView 与 List 中的小部件不会在应该更新时更新

Posted

技术标签:

【中文标题】Flutter ListView 与 List 中的小部件不会在应该更新时更新【英文标题】:Flutter ListView with widgets in a List doesn't updates when it should 【发布时间】:2020-08-01 01:44:39 【问题描述】:

我正在尝试在全局列表中存储要由 ListView 构建的小部件,如下所示:

List<Widget> globalList= [];

我试图在有状态类的状态下构建一个 Listview,如下所示:

ListView(
  children: globalList
)

现在我每次都尝试渲染这个 Listview,当一个项目被添加到列表中时。我用于此的功能是:

void addList()
    setState(()
      Widget _widget = new Widget();
      list.add(_widget);
    );

小部件(在我的伪代码中称为_widget)也是一个有状态小部件。但是当我调用addList 时,我的有状态小部件不会更新。为什么?

短(伪)-代码:

List<Widget> globalList = [];

class STFUL extends StatefulWidget

  @override
  _STFULState createState() => _STFULState();


class _STFULState extends State<STFUL>
  void addList()
    setState(()
      Widget _widget = new Widget();
      globalList.add(_widget);
      );
@override
Widget build(BuildContext context) 
  return Scaffold(
    body:ListView(
      children: globalList
    )
    
 

下面有一个按钮可以调用addList。我的问题是,当我调用 setState 时,ListView 不会呈现更新的列表。

感谢您的帮助

【问题讨论】:

【参考方案1】:

使用ListView.Builder 代替您的ListView

【讨论】:

是的,你是对的。只需获取 itemCount 属性的列表长度,然后在构建器中返回 globalList[i]。非常感谢您的提示!

以上是关于Flutter ListView 与 List 中的小部件不会在应该更新时更新的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中自动滚动 Listview.separated 中的所有 List Tiles?

Flutter:在 ListView Builder 中使用 Hero 动画

Flutter - 如何更新用于构建 ListView 的 Future/List 的状态(或值?)(通过 FutureBuilder)

Flutter:在 ListView 中动画项目删除

Flutter - 另一个 Listview 中的 Listview.builder

Flutter - 另一个Listview内的Listview.builder