flutter 键盘挡住输入框问题

2023-11-15

 bool isShowKeyboard = false;
  double keyboardSize = 260; //软键盘高度
//类添加with WidgetsBindingObserver,生命周期监听器
class SendRedEveDialogState extends State<SendRedEveDialog> with WidgetsBindingObserver

//首先给编辑框做一个焦点
 final FocusNode _sumFocusNode = FocusNode();

//在init中作监听
    WidgetsBinding.instance!.addObserver(this);
    //输入框焦点监测
    _sumFocusNode.addListener(() {
      if (_sumFocusNode.hasFocus) {//如果输入框被点击
        if (MediaQuery.of(context).viewInsets.bottom > 0) {//如果键盘有弹起
        //键盘已弹起
          isShowKeyboard = true;
        }
      } else {
      //如果没有被点击,就是没弹起键盘
        isShowKeyboard = false;
      }
      mySetState(() {});
    });
    
    //didChangeMetrics可以监听界面高度的变化。其中键盘的弹出和收起这些其实都属于高度的变化自然也是可以监听到的
  @override
  void didChangeMetrics() {
    super.didChangeMetrics();
    WidgetsBinding.instance!.addPostFrameCallback((_) {
      // 以后是安卓零碎并且在焦点聚焦的状况下
      if (Platform.isAndroid && _sumFocusNode.hasFocus) {
        if (MediaQuery.of(context).viewInsets.bottom > 0) {
          isShowKeyboard = true;
        } else {
          isShowKeyboard = false;
        }
        mySetState(() {});
      }
    });
  }

TextField(
                            //只允许输入小数
                            inputFormatters: [
                              FilteringTextInputFormatter.allow(
                                  RegExp("[0-9.]")),
                            ],
                            focusNode: _sumFocusNode,//添加焦点
                            controller: _sumController,
                            keyboardType: TextInputType.number,
                            maxLines: 1,
                            textInputAction: TextInputAction.done,
                            textAlign: TextAlign.right,
                            decoration: InputDecoration(
                                // contentPadding: EdgeInsets.only(
                                //     left: 5.0.r, right: 5.0.r),
                                focusColor: Colors.white,
                                border: InputBorder.none,
                                hintText:
                                    S.current.lucky_bag_input_coin_tips,
                                hintStyle: TextStyle(
                                    fontSize: 14.0.sp,
                                    color: const Color(0xFFBCBCBC))),
                            style: TextStyle(
                                color: Colors.black, fontSize: 14.0.sp),
                          ),

//最后就设置高度了,Global.keyboardHeight==0,如果键盘弹起,就用260,否则就用30
       TopPadding(isShowKeyboard
                  ? (Global.keyboardHeight > keyboardSize.truncate()
                  ? Global.keyboardHeight
                  : keyboardSize) +
                  15
                  : 30),

  @override
  void dispose() {
    _sumController.dispose();
    _sumFocusNode.dispose();
    WidgetsBinding.instance!.removeObserver(this);
    super.dispose();
  }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flutter 键盘挡住输入框问题 的相关文章

随机推荐

  • 6.Docker容器底层实现了解与安全机制

    原文地址 点击直达 文章目录 0x00 底层实现 基本架构 简述I O设备 1 命名空间 2 控制组 子系统之Devices 子系统之cpuset 子系统之cpu 子系统之cpuacct 子系统之memory 子系统之blki
  • 一看就懂TCP/IP协议族全析

    TCP IP协议族 计算机与网络设备要相互通信 双方就必须基于相同的方法 如何探测到通信目标 由那一边现发起通信 使用哪种语言 使用那种操作系统 怎样结束通信等都需要事先确定 不同的硬件 操作系统之间的相互通信 所有的这一切都需要一种规则
  • QDialog、QWidget、QMainWindow的区别

    QDialog QWidget QMainWindow的区别 dialog有exec函数 如果是dialog窗口 后边的窗口是不可选的 widget和dialog都有show函数 如果通过这个函数显示这两种类型的窗口 则两个窗口都是可选的
  • 国际带宽市场的发展趋势和前景

    随着全球互联网的不断普及和云计算 人工智能等新技术的迅猛发展 国际带宽市场在不断扩大 成为了全球信息通信领域的重要组成部分 本文将就国际带宽市场的发展趋势和前景进行探讨 一 市场概况 国际带宽是指一个国家或地区连接国际互联网所拥有的带宽资源
  • VMware Workstation Pro 16.2.4安装教程

    VMware Workstation Pro 16 2 4 安装教程 文章目录 VMware Workstation Pro 16 2 4 安装教程 下载最新版VMware 双击打开 自定义安装位置 把 去掉 点击下一步 等待安装 点击许可
  • 主从服务器 共用文件,Docker+keepalived+nginx实现主从热备的方法示例

    前言 为解决单点故障 我们需要配置主从热备方案 服务器数量有限 故使用Docker模拟安装配置 本次配置默认已经安装了Docker 配置环境 centos7 64位 docker版本 Docker version 17 12 1 ce bu
  • Apache Storm之集群安装

    1 环境 storm 1 2 1 Java 7 storm 1 x对java 7 和 java 8均进行了测试 Pytho 2 6 6 Python 3 x理论上也可以 但是并不作为storm的测试 以上是storm的环境 如果不匹配的ja
  • python-异常处理汇总

    1 需求 当程序遇到问题时 不让程序结束 而越过错误继续向下执行 格式 try 语句t except 错误码 语句1 except 错误码 语句2 except 错误码 语句3 except 错误码 语句n else 语句e 注意 else
  • 数字IC秋招面试专题(二)verilog的signed和unsigned

    数字IC秋招面试专题 二 verilog的signed和unsigned 前言 一 右值按signed还是unsigned 二 signed的自动扩位 三 系统函数 signed 和 unsigned 总结 声明 未经作者允许 禁止转载 推
  • ​【UI界面】Foobar2000 FlatLite 整合版

    Foobar2000 是一款本地音乐播放器 这里我就不再做介绍了 不懂的请自行了解 此 Foobar2000 FlatLite 主题包为整合版本 下载既可用 主题界面是模块化的 JS 面板 每个面板都是独立的 面板里的图标也是由 JS 脚本
  • JAVA字符串的两种定义方式的区别

    关于JAVA中两种字符串定义方式的区别 第一次写 就当复习总结一下 希望能帮到需要的人吧 我们知道在JAVA中 对于字符串的实例化方式有两种 直接赋值 String str Hello World 构造方法实例化 String str ne
  • 编写dylib_如何使用第三方的dylib

    展开全部 所谓dylib 就是bsd风格的动态库 基本可以认为等价于e5a48de588b63231313335323631343130323136353331333339663331windows的dll和linux的so mac基于bs
  • car

    本篇介绍如何检验回归结果是否符合模型假设 以及样本中是否存在异常点 本篇使用的主要工具包是car 包名是Companion to Applied Regression的缩写 该包提供了许多用于模型检验的函数 初始模型如下 library c
  • HTML快速参考指南

    目录 HTML 基础文档 文本元素 逻辑样式 物理样式 链接 锚 图像元素 无序列表 有序列表 定义列表 表格 框架 表单 实体 其他元素 HTML 基础文档 Visible text goes here 文本元素 p This is a
  • windows下编写shell脚本完美解决换行问题$'\r': command not found

    前面已经写过另外一边关于解决编写shell脚本换行的问题 即在Linux下执行命令 sed i s r g 文件名称 比如 sed i s r g host1 sh 今天是另外一种方式解决 使用ultraEdit软件编写shell脚本 新建
  • 【mysql】出现 slow sql 问题及建议

    文章目录 1 SQL 执行什么情况下会变慢 2 影响 SQL 语句执行效率的主要因素有哪些 3 慢 SQL 是如何拖垮数据库的 4 最佳实践建议 1 SQL 执行什么情况下会变慢 数据量增加 数据库中的数据量可能会逐渐增加 导致查询变慢 查
  • Python 常用写法

    时间 1 now import datetime now datetime now nowStr now strftime now Y m d H M S list 1 分割最后一个 arr str rsplit 1 2 数组 加索引 en
  • 学习C++项目——select模型,poll模型和epoll模型

    学习计算机网络编程 一 思路和学习方法 本文学习于 C语言技术网 www freecplus net 在 b 站学习于 C 语言技术网 并加以自己的一些理解和复现 如有侵权会删除 接下来应该是网络编程部分最难也是最常用的部分 同时在这一章我
  • 系统分析与设计——UML图总结

    一 前言 期末考试之前 我复习系统分析与设计的时候对UML图做了一些知识汇总 现在放到博客上 如果有不对或不恰当的地方 欢迎各位指正 本文仅仅起记录作用 可随意转载 荣幸之至 截图来自网络或是老师的PPT 二 概述 系统模型的三个主要部分
  • flutter 键盘挡住输入框问题

    bool isShowKeyboard false double keyboardSize 260 软键盘高度 类添加with WidgetsBindingObserver 生命周期监听器 class SendRedEveDialogSta