【问题标题】:createState method not always called when creating new StatefulWidget创建新的 StatefulWidget 时并不总是调用 createState 方法
【发布时间】: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 - 就是这样 - 谢谢

标签: dart flutter


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-10-28
  • 2021-12-21
  • 2012-07-10
  • 2021-11-27
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
相关资源
最近更新 更多