我正在学习Flutter,现在尝试监视TextEditingController
上的变化。我可以使用侦听器函数监视它,但我不能在Text
小部件中使用变量:
class _TestPageState extends State<TestPage> {
var _textName = "";
final _textNameController = TextEditingController();
void _nameChanged() {
_textName = _textNameController.text;
print(
"text controller changed to '${_textNameController.text}' ($_textName)");
}
@override
void initState() {
super.initState();
_textNameController.addListener(_nameChanged);
}
@override
void dispose() {
_textNameController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Column(
children: [
IconButton(
icon: Icon(
Icons.ac_unit,
size: 50,
),
onPressed: () => Navigator.pop(context),
),
TextFormField(
controller: _textNameController,
// onChanged: (value) {
// _textName = _textNameController.text;
// },
decoration: InputDecoration(
hintText: 'description',
),
),
Text("text is ${_textName}"),
],
),
),
);
}
}
正如你所看到的,我尝试过使用一个侦听器并更改一个变量的值,然后在Text
字段中使用该变量。然后使用一个onChanged
函数。除了在源代码中进行更改和flutter热重新加载外,Text
小部件没有任何更改。看起来Text
是常量,但如何做到呢?
不过,侦听器的输出字符串显示的是正确的字符串。
如何使用TextEditingController
实时更改Text
字段?我看不到什么?
1条答案
按热度按时间rryofs0p1#
您需要调用
setState
来更新用户界面。