问题描述
我有这样的 textformfields:如果我没有为第二个 textformfield 定义键盘类型,那么当我从第一个字段到第二个字段时没有问题,我不会丢失第一个字段的输入。但是如果我在我的代码中定义了键盘类型,当我点击第二个字段时它会丢失第一个字段的数据。
注意:我使用riverpod作为状态管理。
class NewTx extends StatelessWidget {
final TextEditingController titleController = TextEditingController(text: '');
final TextEditingController priceController = TextEditingController(text: '');
@override
Widget build(BuildContext context) {
return Column(crossAxisAlignment: CrossAxisAlignment.stretch,children: [
TextFormField(
controller: titleController,decoration: Inputdecoration(hintText: 'Title')
),TextFormField(
keyboardType: TextInputType.number,controller: priceController,decoration: Inputdecoration(hintText: 'Title')),Container(
alignment: AlignmentDirectional.bottomEnd,child: IconButton(
icon: Icon(Icons.add),onpressed: () => context.read(transactionProvider).addTx(
Transaction(titleController.text,priceController.text))))
]);
}
}
编辑:riverpod_hooks 和 useTextEditingController 运行良好。(除了有状态小部件之外的另一种解决方案。)
解决方法
我认为问题不在于失去焦点,而在于重新构建小部件的事实,重新创建了类,因此 - 控制器保持重新创建文本。
我建议将 NewTx 更改为有状态小部件并将控制器移动到其状态。
,final TextEditingController titleController = TextEditingController(text:'');
final TextEditingController priceController = TextEditingController(text: '');
你可以试试这个吗?
final TextEditingController titleController = TextEditingController();
final TextEditingController priceController = TextEditingController();