【发布时间】:2018-11-12 00:12:12
【问题描述】:
我有一组有时会发生变化的简单对象。我正在使用 ListView 来呈现这些对象,基本上是文本。当我的集合更改时,列表将使用新对象重新构建,因此如果列表从 1 项更改为 3 项,我会看到 3 项,但第一项保持其先前的值。
我注意到,当我创建新的 CustomTextField 时,并非在所有情况下都调用方法“createState”(在上面的示例中,仅当将新元素添加到列表中时才会调用它)。
当我的收藏发生变化时,如何确保我的列表正确更新?
我的父小部件构建了一个文本字段列表:
...
@override
Widget build(BuildContext context) {
...
var list = <Widget>[];
collection.forEach((item) {
var widget = CustomTextField(
content: item,
);
list.add(widget);
...
return new ListView(
children: list,
);
});
...
我的 CustomTextField 定义:
class CustomTextField extends StatefulWidget {
final MediaContent content;
CustomTextField({
Key key,
this.content,
}) : super(key: key);
@override
CustomTextFieldState createState() {
return CustomTextFieldState();
}
}
...
MediaContent 是一个非常简单的对象,其中包含一些文本:
class MediaContent {
String textData;
ContentType type;
MediaContent(
this.type,
);
}
【问题讨论】:
-
我在连续创建同一个小部件时遇到了同样的问题(即使我在创建过程中使用了“new”关键字)。您找到解决方案了吗?
-
@dazza5000 看看我的回答是否适合你
-
将尽快试用 - 感谢您的帮助
-
@GuilhermeTorresCastro - 就是这样 - 谢谢