创建新的 StatefulWidget 时并不总是调用 createState 方法

Mik*_*iki 6 dart flutter

我有一些有时会发生变化的简单对象的集合。我正在使用 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,
   );
});
...
Run Code Online (Sandbox Code Playgroud)

我的 CustomTextField 定义:

class CustomTextField extends StatefulWidget {
  final MediaContent content;
  CustomTextField({
    Key key,
    this.content,
  }) : super(key: key);

  @override
  CustomTextFieldState createState() {
    return CustomTextFieldState();
  }
}
...
Run Code Online (Sandbox Code Playgroud)

MediaContent 是一个非常简单的对象,包含一些文本:

class MediaContent {
  String textData;
  ContentType type;

  MediaContent(
    this.type,
  );
}
Run Code Online (Sandbox Code Playgroud)

Gui*_*tro 10

你必须为你的集合定义唯一的 Key,看看这里:https : //www.youtube.com/watch?v= kn0EOS-ZiIc

  • 对于我们这些因某种原因不太关心视频的人:https://medium.com/flutter/keys-what-are-they-good-for-13cb51742e7d (2认同)