每当TextFields文本更改时,我希望在文本中显示某些内容:
class _MyPageState extends State<MyPage> {
String name;
@override
Widget build(BuildContext context) {
TextEditingController c = new TextEditingController(text: name);
c.addListener(() {
setState(() { name = c.text;});
});
return Scaffold(
body: Center(
child: Column(children: [
Text('Hello, ' + name + '!'),
TextField(controller: c)
])));
}
}
字符串
Text将按exspected更新,但问题是每次输入字符时,TextField的光标都会移动到位置0。
3条答案
按热度按时间lymnna711#
问题是每次重新构建小部件时都要创建一个新的
TextEditingController
。正在根据键入的每个字符重新构建小部件。您只需要将
TextEditingController
移出小部件构建函数。同时将c.addListener
移动到小部件的initState
函数中。这样,TextEditingController
只创建一次,监听器只添加一次。PS:处置小部件的时候处置你的控制器也不错
字符串
pdtvr36n2#
我已经修改了你的代码,你只需要改变你的TextEditingController,见下文。
字符串
c86crjj03#
在我例子中,我必须自定义
TextField
样式。字符串
如果得到
didUpdateWidget
,请小心使用_controller.value
而不是_controller.text
,或者直接删除它。