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

标签 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,
   );
});
...

我的 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/

相关文章:

javascript - 我可以通过标准 Javascript 应用程序使用 Google Polymer 吗?

authentication - Dart 中的 token 认证

navigation-drawer - 更改 flutter 抽屉背景颜色

flutter - Flutter-将标签指示符宽度相对于标签文本

flutter - 抖动错误:未为 'combineLatest4'类型定义 'Observable'方法

arrays - 在 Flutter 中编码/解码复杂的 Json

flutter 集成_测试: How to simulate mouse operation like right/scroll/left clicks?

dart - Flutter Navigator.of(context).pop 与 Navigator.pop(context) 区别

firebase - Flutter firebase 处理异常

Flutter:如何减小 ModalBottomSheet 中 CupertinoPicker 的大小?