Flutter疑难杂症:安卓手机键盘焦点丢失问题解决办法

一、问题来源

Flutter开发过程中安卓系统遇到当普通键盘输入用户账号之后,在密码框输入密文时会出现普通键盘先消失,安全键盘再弹出的过程,两种键盘切换的过程会失去焦点,简称键盘失焦。

二、解决办法

就是用 Listener 监听动作,普通键盘和安全键盘切换之后再次请求焦点即可,代码如下:

dart 复制代码
/// 账号焦点
final focusNodeAccount = FocusNode();

/// 密码焦点
final focusNodePwd = FocusNode();
dart 复制代码
...
Listener(
  onPointerDown: (event) async {
    await Future.delayed(const Duration(milliseconds: 350));
    focusNodeAccount.requestFocus();
    SystemChannels.textInput.invokeMethod('TextInput.show');//兼容小米手机

  },
  child: TextField(
    focusNode: focusNodeAccount,
    decoration: InputDecoration(
      border: buildBorder(),
      focusedBorder: buildBorder(),
      hintText: "账号",
      hintStyle: TextStyle(fontSize: 15, color: Color(0xffB3B3B3)),
      fillColor: Colors.white,
      filled: true,
    ),
  ),
),
const SizedBox(height: 8),
Listener(
  onPointerDown: (event) async {
    await Future.delayed(const Duration(milliseconds: 350));
    focusNodePwd.requestFocus();
    SystemChannels.textInput.invokeMethod('TextInput.show');//兼容小米手机
  },
  child: TextField(
    focusNode: focusNodePwd,
    decoration: InputDecoration(
      border: buildBorder(),
      focusedBorder: buildBorder(),
      hintText: "密码",
      hintStyle: TextStyle(fontSize: 15, color: Color(0xffB3B3B3)),
      fillColor: Colors.white,
      filled: true,
    ),
    obscureText: true,
  ),
),

三、总结

1、思路是通过在键盘切换通过 FocusNode 请求再次获取焦点;

2、为什么要执行这行代码?

dart 复制代码
await Future.delayed(const Duration(milliseconds: 350));

是为了等安全键盘完全弹出(动画结束之后)再获取焦点。如果没有此行代码,部分华为机型会先获取到焦点然后二次丢失(测试同学在此阻击过本人,真机直面)。

github

相关推荐
zihan5182 分钟前
自己做软件日记9/21 得到了一个良好的文件结构框架
后端·flutter·前端框架·android studio
IT_陈寒38 分钟前
Redis大key删除引发的服务雪崩,这次我真记住了
前端·人工智能·后端
IMPYLH1 小时前
HTML 的 <style> 元素
前端·html
paopaokaka_luck1 小时前
考研政治刷题小程序(AI推荐题目、ECharts数据分析、章节练习与专项训练、模拟考试、错题本与收藏夹、学习打卡与目标管理、题库和组卷维护)
前端·javascript·spring boot·spring·数据分析·echarts
刃神太酷啦1 小时前
前端入门第一课:HTML 基础语法 + 常用标签 + 实战全解
服务器·c语言·前端·javascript·css·c++·html
mldong1 小时前
给流程设计器加国际化,我没引 vue-i18n
前端·javascript·vue.js
IMPYLH1 小时前
HTML 的 <strong> 元素
前端·html
开开心心就好7 小时前
批量提取PDF中的图片,直接导出原图
前端·javascript·支持向量机·智能手机·pdf·html·启发式算法
Setsuna_F_Seiei10 小时前
前端转型 Agent 开发 05 之 Agent Hooks 与 Checkpointer(让 Agent 从全自动转变人为可掌控)
前端·agent·ai编程
百万蹄蹄向前冲11 小时前
风扇转了一晚上MVP专家团翻车事故
前端·人工智能