gpt4 book ai didi

在 setState 之后 TextField 的 Flutter Cursor 移动到位置 0

转载 作者:行者123 更新时间:2023-12-04 12:34:46 24 4
gpt4 key购买 nike

每当 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com