每当 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)
])));
}
}
文本按预期更新,但问题是每次输入字符时,文本字段的光标都会移动到位置 0。
最佳答案
问题是您正在创建一个新的 TextEditingController
每次重建小部件时。正在根据输入的每个字符重建小部件。
您只需要移动 TextEditingController
在小部件构建功能之外。并且还移动了 c.addListener
到小部件的 initState
功能。这样TextEditingController
只创建一次,监听器只添加一次。
PS:处置小部件时处置您的 Controller 也很好
class MyPage extends StatefulWidget {
@override
_MyPageState createState() => _MyPageState();
}
class _MyPageState extends State<MyPage> {
String name = '';
TextEditingController c = new TextEditingController();
@override
void initState() {
c.addListener(() {
setState(() {
name = c.text;
});
});
super.initState();
}
@override
void dispose() {
c.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(children: [
Text('Hello, ' + name + '!'),
TextField(controller: c)
])));
}
}
关于在 setState 之后 TextField 的 Flutter Cursor 移动到位置 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65903355/