[英]Flutter How to always hide keyboard when click on TextField but keep focus(Keep show cursor)
我无法控制键盘显示或隐藏,在我的项目中,我需要始终隐藏键盘但保持专注以显示我的自定义键盘(小部件)。
这是我想要的
这是我的问题
要隐藏键盘并保持光标可见,请将readOnly
设置为true
并将showCursor
为true
。
TextFormField(
showCursor: true,
readOnly: true),
您可以使用自定义 focusNode
这可以防止键盘仅在第一次点击时出现:
TextField(focusNode: FirstDisabledFocusNode(),)
class FirstDisabledFocusNode extends FocusNode {
@override
bool consumeKeyboardToken() {
return false;
}
}
这总是防止:
TextField(focusNode: AlwaysDisabledFocusNode())
class AlwaysDisabledFocusNode extends FocusNode {
@override
bool get hasFocus => false;
}
插入NoKeyboardEditableText
而不是您的TextField
class NoKeyboardEditableText extends EditableText {
NoKeyboardEditableText({
@required TextEditingController controller,
TextStyle style = const TextStyle(),
Color cursorColor = Colors.black,
bool autofocus = false,
Color selectionColor
}):super(
controller: controller,
focusNode: NoKeyboardEditableTextFocusNode(),
style: style,
cursorColor: cursorColor,
autofocus: autofocus,
selectionColor: selectionColor,
backgroundCursorColor: Colors.black
);
@override
EditableTextState createState() {
return NoKeyboardEditableTextState();
}
}
class NoKeyboardEditableTextState extends EditableTextState {
@override
Widget build(BuildContext context) {
Widget widget = super.build(context);
return Container(
decoration: UnderlineTabIndicator(borderSide: BorderSide(color: Colors.blueGrey)),
child: widget,
);
}
@override
void requestKeyboard() {
super.requestKeyboard();
//hide keyboard
SystemChannels.textInput.invokeMethod('TextInput.hide');
}
}
class NoKeyboardEditableTextFocusNode extends FocusNode {
@override
bool consumeKeyboardToken() {
// prevents keyboard from showing on first focus
return false;
}
}
仅供参考, #83974中引入了 TextInputType.none :
文本字段(键盘类型:文本输入类型。无,...)
尝试使用input_with_keyboard_control
包
它帮助我解决了我的问题,即从条形码扫描仪接收文本而不显示键盘
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.