首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ListView如何保存项目数据?

ListView如何保存项目数据?
EN

Stack Overflow用户
提问于 2019-05-27 00:32:43
回答 1查看 87关注 0票数 1

让我有一个StatefulWidget

代码语言:javascript
复制
ListView.builder(
  itemBuilder: (ctx, i) => TextField(),
  itemCount: _count,
)

在里面。当我这样做的时候

代码语言:javascript
复制
setState(() {
  _count += 1;
});

ListView将重新生成,但会保留在文本字段中输入的所有数据。Complete example

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-27 01:37:28

如果最初没有为TextField指定控制器,则它会为自己创建默认的TextEditingController

此外,didUpdateWidget方法用于维护和更新TextFieldState。在重新构建时,TextField重用了以前TextEditingController中的值。

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

例如,TextField就是这样使用didUpdateWidget

代码语言:javascript
复制
@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;

  // ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56315411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档