焦点更改时 Flutter TextField 丢失数据

问题描述

我有这样的 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();