让我有一个StatefulWidget
ListView.builder(
itemBuilder: (ctx, i) => TextField(),
itemCount: _count,
)
在里面。当我这样做的时候
setState(() {
_count += 1;
});
ListView将重新生成,但会保留在文本字段中输入的所有数据。Complete example
它怎麽工作?如何在自定义小部件中实现此类行为?
发布于 2019-05-27 01:37:28
如果最初没有为TextField
指定控制器,则它会为自己创建默认的TextEditingController
。
此外,didUpdateWidget
方法用于维护和更新TextField
的State
。在重新构建时,TextField
重用了以前TextEditingController
中的值。
我假设这就是您正在寻找的方法,因为每当父小部件重新构建并请求其子树显示新状态时,都会调用它。
例如,TextField
就是这样使用didUpdateWidget
的
@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;
// ...
}
https://stackoverflow.com/questions/56315411
复制相似问题