[英]Flutter TextField is losing data when focus changes
我有這樣的文本表單:如果我沒有為第二個文本表單定義鍵盤類型,那么當我從第一個字段到第二個字段的 go 時沒有問題,我不會丟失第一個字段的輸入。 但是如果我在我的代碼中定義鍵盤類型,當我點擊第二個字段時它會丟失第一個字段的數據。
注意:我使用的是 Riverpod 作為 State 管理。
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 工作正常。(除了有狀態小部件的另一種解決方案。)
我認為問題不在於失去焦點,而在於重新構建小部件這一事實,它重新創建了 class,因此 - 控制器保持重新創建文本。
我建議將 NewTx 更改為有狀態小部件並將控制器移動到其 state。
final TextEditingController titleController = TextEditingController(text:'');
final TextEditingController priceController = TextEditingController(text: '');
你可以試試這樣嗎?
final TextEditingController titleController = TextEditingController();
final TextEditingController priceController = TextEditingController();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.