如何在 Flutter (Web) 的文本字段中丢弃退格键按下事件?
How to discard Backspace key press event in Textfield in Flutter (Web)?
我正在创建一个 Flutter 网络应用程序。要求是在某些情况下,我必须阻止用户在文本字段中键入一些文本时按退格键(或删除键)。我试过 RawKeyboardListener
和 TextEditingController
。他们帮我监听键盘事件,但我无法修改或丢弃键盘事件。
RawKeyboardListener(
focusNode: focusNode,
onKey: handleOnKeyEvent,
child: TextField(
textAlignVertical: TextAlignVertical.top,
textInputAction: TextInputAction.newline,
controller: textEditingController,
decoration: InputDecoration(
border: InputBorder.none, hintText: 'Start typing here'),
keyboardType: TextInputType.multiline,
minLines: null,
maxLines: null,
expands: true,
onChanged: (value) {
//print('text = $value');
handleUserInput(value);
},
),
),
如何使用 TextController
检查文本是否已退格?
这样用户仍然可以输入新字符,但无法删除它们。
late String initialText;
late TextEditingController _textController;
void initState() {
initialText = "MyText";
_textController = TextEditingController(text: initialText);
super.initState();
}
并在 build()
内:
TextFormField(
controller: _textController,
onChanged: (input) {
if (_textController.text.length < initialText.length) {
_textController.text = initialText;
} else {
setState(() {
initialText = _textController.text;
});
}
},
)
我正在创建一个 Flutter 网络应用程序。要求是在某些情况下,我必须阻止用户在文本字段中键入一些文本时按退格键(或删除键)。我试过 RawKeyboardListener
和 TextEditingController
。他们帮我监听键盘事件,但我无法修改或丢弃键盘事件。
RawKeyboardListener(
focusNode: focusNode,
onKey: handleOnKeyEvent,
child: TextField(
textAlignVertical: TextAlignVertical.top,
textInputAction: TextInputAction.newline,
controller: textEditingController,
decoration: InputDecoration(
border: InputBorder.none, hintText: 'Start typing here'),
keyboardType: TextInputType.multiline,
minLines: null,
maxLines: null,
expands: true,
onChanged: (value) {
//print('text = $value');
handleUserInput(value);
},
),
),
如何使用 TextController
检查文本是否已退格?
这样用户仍然可以输入新字符,但无法删除它们。
late String initialText;
late TextEditingController _textController;
void initState() {
initialText = "MyText";
_textController = TextEditingController(text: initialText);
super.initState();
}
并在 build()
内:
TextFormField(
controller: _textController,
onChanged: (input) {
if (_textController.text.length < initialText.length) {
_textController.text = initialText;
} else {
setState(() {
initialText = _textController.text;
});
}
},
)