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