当我在 TextFormField A 中输入长文本并跳转到另一个小部件(如另一个 TextFormField)时,我的 TextFormField A 将光标位置维持在长文本的末尾。我希望当我取消小部件的焦点时,文本从起始位置出现。
情况
电子邮件字段未聚焦
我想要什么
我已经尝试过了
textEditingController.selection = TextSelection.collapsed(offset: 0);
但只有当我再次聚焦小部件时它才会生效,而不是在我取消聚焦它时生效(这就是我想要的)。
在
TextFormField
失去焦点时重置到起始位置时,您可以使用 FocusNode
和 TextEditingController
并使用 FocusNode
监听焦点变化。
final _textController = TextEditingController();
final _focusNode = FocusNode();
@override
void dispose() {
_textController.dispose();
_focusNode.dispose();
super.dispose();
}
您可以比较我从构建方法返回的代码:
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextFormField(
controller: _textController,
focusNode: _focusNode,
decoration: InputDecoration(
labelText: 'Enter text',
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
// Unfocus the TextFormField
_focusNode.unfocus();
// Clear the text and set cursor position to start
_textController.clear();
},
child: Text('Reset Text'),
),
],
),