Flutter TextField 在焦点改变时丢失数据

Flutter TextField is losing data when focus changes

我有这样的文本表单域:如果我没有为第二个文本表单域定义键盘类型,那么当我从第一个字段到第二个字段时没有问题,我不会丢失第一个字段的输入。但是如果我在我的代码中定义键盘类型,当我点击第二个字段时它会丢失第一个字段的数据。

注意:我使用 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 运行良好。(有状态小部件之外的另一种解决方案。)

final TextEditingController titleController = TextEditingController(text:''); 
final TextEditingController priceController = TextEditingController(text: '');

你能这样试试吗?

final TextEditingController titleController = TextEditingController();
final TextEditingController priceController = TextEditingController();

我认为问题不在于失去焦点,而在于小部件被重建,class 被重新创建,因此 - 控制器保持文本被重新创建。

我建议将 NewTx 更改为有状态小部件并将控制器移动到它的状态。