【发布时间】:2020-03-16 04:01:41
【问题描述】:
我的代码中有两个 ListView 小部件。一个显示以这种方式创建的列表 (childrenGenerated):
List<Widget> childrenGenerated = List.generate(count, (int i) => Widget1());
每次按下floatingActionButton时计数都会增加
第二个 ListView 显示了一个列表,该列表在有状态小部件中初始化为空,并在每次按下 floatingActionButton 时使用新添加的小部件进行更新:
onPressed: () {
setState(() {
count++; <-- incremented for childrenGenerated
childrenAdded.add( <-- Widget1 added.
Widget1(),
);
});
},
我已打印出两个列表的结果,childrenAdded 看起来与 childrenGenerated 完全相同(包括当我使用调试器时...完全相同)但是,在 listView 中,实际上只呈现了 childrenGenerated。
我注意到的不同之处在于,当为 childrenGenerated 生成列表时,会看到“输入的小部件”打印输出,表明它已被实例化......但是,对于 childrenAdded 版本不会发生这种情况。
简而言之,如何使这段代码与 childrenAdded 方法一起工作?缺少什么?
我创建了一个 dartpad 来显示我所看到的:https://dartpad.dev/d31da0c9b9d913de26ba3420074ddb07
【问题讨论】:
-
每次调用 setState 时都会运行构建方法
-
是的,但是两个列表视图在同一个构建方法中,
-
另外,它似乎是子小部件 (Widget1) 的构建方法在添加列表时没有触发,而不是生成
-
在使用可以添加或删除的列表时,我总是使用 ListView.builder。但有趣的是,在使用普通构造函数 ListView 时它无法按预期工作
-
我希望我早点听你的……这正是问题所在。我想我再也不会使用常规的 ListView 了。