我收集了一些有时会发生变化的简单对象。我正在使用 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,
);
}
最佳答案
你必须为你的集合 itens 定义唯一的键,看看这里: https://www.youtube.com/watch?v=kn0EOS-ZiIc
关于dart - 创建新的 StatefulWidget 时并不总是调用 createState 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53254525/