让我有一个 StatefulWidget
ListView.builder(
itemBuilder: (ctx, i) => TextField(),
itemCount: _count,
)
里面。当我做的时候
setState(() {
_count += 1;
});
ListView 重建,但保留在文本字段中输入的所有数据。 Complete example
它是如何工作的?如何在自定义小部件中实现此类行为?
最佳答案
TextField
为自己创建默认的 TextEditingController
,如果最初没有分配 Controller 的话。
此外,didUpdateWidget
方法用于维护和更新 TextField
的 State
。重建时 TextField
重用其先前 TextEditingController
的值。
我假设这就是您正在寻找的方法,因为每当父小部件重建并请求其子树呈现新状态时都会调用它。
例如,这就是didUpdateWidget
由 TextField
使用:
@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/