flutter - ListView如何保存项目数据?

标签 flutter

让我有一个 StatefulWidget

ListView.builder(
  itemBuilder: (ctx, i) => TextField(),
  itemCount: _count,
)

里面。当我做的时候

setState(() {
  _count += 1;
});

ListView 重建,但保留在文本字段中输入的所有数据。 Complete example

它是如何工作的?如何在自定义小部件中实现此类行为?

最佳答案

TextField 为自己创建默认的 TextEditingController,如果最初没有分配 Controller 的话。

此外,didUpdateWidget方法用于维护和更新 TextFieldState。重建时 TextField 重用其先前 TextEditingController 的值。

我假设这就是您正在寻找的方法,因为每当父小部件重建并请求其子树呈现新状态时都会调用它。

例如,这就是didUpdateWidgetTextField 使用:

@override
void didUpdateWidget(TextField oldWidget) {
  super.didUpdateWidget(oldWidget);

  if (widget.controller == null && oldWidget.controller != null)
    _controller = TextEditingController.fromValue(oldWidget.controller.value);
  else if (widget.controller != null && oldWidget.controller == null)
    _controller = null;

  // ...
}

关于flutter - ListView如何保存项目数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56315411/

相关文章:

firebase - 如何在一个流中合并多个流

flutter - 如何在 Flutter Web 中访问应用程序版本?

Flutter - 如何在本地保存数据?

flutter - 如何在 Flutter 中构建静态 datePicker 小部件,而无需在之前按下按钮

android - 编译应用程序时,R8 程序类型已存在错误

Dart将int变量转换为字符串

android - flutter 。任务 ':audioplayer:verifyReleaseResources'的执行失败

flutter - 如何从 Flutter Hive 中检索 HiveList

dart - 使子小部件对其父背景透明

同一文件中的 flutter 类型不匹配