Flutter 抖动如何在单击文本字段时始终隐藏键盘,但保持焦点(保持显示光标)
我无法控制键盘的显示或隐藏,在我的项目中,我需要始终隐藏键盘,但保持焦点以显示我的自定义键盘(小部件) 这是我想要的 这就是我的问题Flutter 抖动如何在单击文本字段时始终隐藏键盘,但保持焦点(保持显示光标),flutter,flutter-layout,Flutter,Flutter Layout,我无法控制键盘的显示或隐藏,在我的项目中,我需要始终隐藏键盘,但保持焦点以显示我的自定义键盘(小部件) 这是我想要的 这就是我的问题 插入NoKeyboardEditableText而不是您的TextField class NoKeyboardEditableText extends EditableText { NoKeyboardEditableText({ @required TextEditingController controller, TextStyle s
插入
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;
}
}
您可以使用自定义焦点节点 这可防止键盘仅在第一次轻触时出现:
TextField(focusNode: FirstDisabledFocusNode(),)
class FirstDisabledFocusNode extends FocusNode {
@override
bool consumeKeyboardToken() {
return false;
}
}
这始终防止:
TextField(focusNode: AlwaysDisabledFocusNode())
class AlwaysDisabledFocusNode extends FocusNode {
@override
bool get hasFocus => false;
}
要隐藏键盘并保持光标可见,请将
readOnly
设置为true
并将showCursor
设置为true
TextFormField(
showCursor: true,
readOnly: true),
请参见尝试使用
键盘控制输入
软件包
它帮助我解决了从条形码扫描仪接收文本而不显示键盘的问题import'package:flatter/services.dart';SystemChannel.textInput.invokeMethod('textInput.hide')@Kenneth Li
void initState(){focusNode.addListener(_changeFocus);SystemChannels.textInput.invokeMethod('textInput.hide');super.initState();}
help@Günter Zöchbauer这种方法是使用解决方案自定义可编辑文本并添加SystemChannels.textInput.invokeMethod('textInput.hide')
它可以工作,但我们可以自定义文本字段并在请求键盘中添加此代码?@quyenphongtranvuong您能告诉我您是如何获得此功能的,因为我需要相同的功能。谢谢!我是这样得到的,但它在我需要的文本字段中没有一些属性,例如:在word之前移动光标进行编辑。。。有没有办法在聚焦时禁用TextField的键盘?我想,要移动光标,可以使用TextEditingController
。我不知道TextField
的合适解决方案,但我建议您查看EditableText
源代码。在我的示例中,只有很少的属性,但是EditableText
有很多属性。因此,也许您可以向类中添加所有需要的字段,这扩展了EditableText
,这就足够了。“+1”“谢谢”,我认为这是今天最好的解决方案,我将尝试自定义EditableText
,再次感谢您的回答@违抗UA-第一种方式第一次禁用焦点当您双击文本字段键盘时仍显示第二种方式我需要显示光标。有没有办法禁用键盘仍然使用TextField抱歉,我不知道其他解决方案。是的,正如我所写的,我的第一个解决方案只有在第一次点击TextField