flutter TextField 键盘弹出和隐藏,限制仅英文输入, 禁止联想输入

本文介绍了如何在前端应用中实现只允许输入英文的文本框,通过正则表达式过滤非法字符,并使用TextInputType.visiblePassword隐藏显示键盘。关键代码展示了焦点处理、键盘弹出与关闭以及输入验证的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  var focusNode = FocusNode();
  RegExp englishRegExp = RegExp(r'(^[a-zA-Z]*$)');
  String inputText = '';
  
  showKeyboard() {
	focusNode.requestFocus();
  }
  dismissKeyboard() {
	focusNode.unfocus();
  }
  getTextField() {
    var currentModel = currentItem();
    return TextField(
      controller: controller,
      focusNode: focusNode,
      style: TextStyle(color: Colors.transparent),
      //字体透明
      showCursor: false,
      enableInteractiveSelection: false,
      keyboardType: TextInputType.visiblePassword,
      decoration: InputDecoration(
        ///边框不可见
        border: InputBorder.none,
      ),
      onChanged: (value) {
        ///禁止联想输入
        var length = value.length - inputText.length;
        if (length > 1) {
          controller.value = TextEditingValue(
              text: inputText,
              selection: TextSelection.collapsed(offset: inputText.length));
          return;
        }

        ///禁止非英文输入(不要用inputFormatters:[WhitelistingTextInputFormatter(xxx)],空格输入,最后一个字符删除等有问题);
        if (!englishRegExp.hasMatch(value)) {
          controller.value = TextEditingValue(
              text: inputText,
              selection: TextSelection.collapsed(offset: inputText.length));
          return;
        }
        setState(() {
          ///删除键差值是-1(没有删除键的回调,只能用-1来做校验,可能会有联想输入刚好差值为-1的情况)
          if (length == -1 || length == 1) {
            inputText = value;
          }
          controller.value = TextEditingValue(
              text: inputText,
              selection: TextSelection.collapsed(offset: inputText.length));
        });
        ///判断是否输入完成(达到输入上限)
        inputWordCompleted();
      },
    );
  }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值