jul*_*000 3 setstate dart flutter
每当 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)
])));
}
}
Run Code Online (Sandbox Code Playgroud)
文本按预期更新,但问题是每次输入字符时,文本字段的光标都会移动到位置 0。
问题是您TextEditingController
每次重建小部件时都会创建一个新的。正在根据输入的每个字符重建小部件。
您只需要移动TextEditingController
小部件构建功能的外部。并且还移动c.addListener
到小部件的initState
功能。这种方式TextEditingController
只创建了一次,并且只添加了一次监听器。
PS:处置小部件时处置您的控制器也很好
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)
])));
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
366 次 |
最近记录: |