繁体   English   中英

Flutter 如何在单击 TextField 时始终隐藏键盘但保持焦点(保持显示光标)

[英]Flutter How to always hide keyboard when click on TextField but keep focus(Keep show cursor)

我无法控制键盘显示或隐藏,在我的项目中,我需要始终隐藏键盘但保持专注以显示我的自定义键盘(小部件)。

这是我想要的

这是我的问题

要隐藏键盘并保持光标可见,请将readOnly设置为true并将showCursortrue

TextFormField(
  showCursor: true,
  readOnly: true),

颤振/问题/#16863

您可以使用自定义 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM