flutter - 带有控制器的 Flutter TextField 根本不更新该字段
问题描述
我以为我有这个权利,但显然有些不对劲。简单的文本字段,其默认文本由控制器设置为newUser['firstName']
. newUser
是类型Map<String, Dynamic>
TextField(
decoration: InputDecoration(labelText: 'First Name'),
controller: TextEditingController(text: newUser['firstName']), // currently set to "Garrett"
onChanged: (text) {
print('TEXT: $text'); // only gives the current value plus the last letter hit, ex.
"Garrettr", "Garrettf", etc.
setState(() {
newUser['firstName'] = text;
});
print('FIRST NAME: ${newUser['firstName']}'); // same as text
},
),
没有错误,但是当我在字段中键入以更改文本时,没有任何反应,并且newUser['firstName']
将等于“Garrette”或“Garrettr”等。正如您在代码中看到的text
那样,通过的onChanged
似乎并不正确,不知道我做错了什么。
解决方案
由于您有很多字段,因此对您来说最简单的方法是为您的字段创建一个“描述符类”。像这样的东西。
class InputFieldDescriptor {
final String key;
final String placeholder;
final TextEditingController controller;
InputFieldDescriptor(this.key, this.placeholder, this.controller);
}
class WidgetThatDisplayFields extends StatefulWidget {
@override
_WidgetThatDisplayFields createState() => _WidgetThatDisplayFields();
}
class _WidgetThatDisplayFields extends State<WidgetThatDisplayFields> {
List<InputFieldDescriptor> _descriptors = [
InputFieldDescriptor("user_name", "User name", TextEditingController()),
InputFieldDescriptor("email", "Email", TextEditingController()),
InputFieldDescriptor("password", "password", TextEditingController()),
];
List<Widget> _inputFields() {
return _descriptors.map((descriptor) {
return TextField(
decoration: InputDecoration(labelText: descriptor.placeholder),
controller: descriptor.controller); // currently set to "Garrett"
}).toList();
}
@override
Widget build(BuildContext context) {
return Column(
children: _inputFields(),
);
}
Map<String, String> _collect() {
Map<String, String> data = {};
_descriptors.forEach((descriptor) {
data[descriptor.key] = descriptor.controller.text;
});
return data;
}
}
推荐阅读
- android - Jetpack Compose 相当于 InputFilter?
- node.js - 部署 Nextjs 和 Reactjs(单个 repo 中的多个项目)
- json - (Rust- JSON) 如何在 rust 中将 &str 转换为 JSON 响应?
- python - 在python中将变量转换为十六进制的任何方法
- javascript - React Native - Hook State 更新问题?是同步问题吗?
- c - 不知道为什么会出现这个问题,也无法弄清楚这个解决方案。任何人都可以解决这个问题吗?
- swift - 点击按钮太快导致“下一次触摸前无法接收系统手势状态通知”
- maven - 使用多个配置时,Checkstyle checkstyle-checker.xml 会被覆盖
- c++ - C ++代码 - 在同一类的构造函数中调用一个类的构造函数
- javascript - BlogCards 组件未显示在 vue 上