likes
comments
collection
share

Flutter 键盘弹出的高度异常两个解决方案

作者站长头像
站长
· 阅读数 5

刚开发Flutter 的时候,最容易遇到的就是键盘弹出时,产生高度异常。 Flutter 键盘弹出的高度异常两个解决方案

目前有两种解决方案,但是各有各的优缺点和弊端

方案一

使用SingleChildScrollView放在最外层进行解决(搜索解决方案时,大部分的回答)

SingleChildScrollView(
  child: Container(
    child: TextFormField(
      controller: _emailController,
      focusNode: _emailFocusNode,
      keyboardType: TextInputType.emailAddress,
      validator: validateEmail,
      style: const TextStyle(color: Colors.white, fontSize: 14),
      cursorColor: Colors.white,
      onSaved: (v) {
        _email = v!;
      },
    ),
  ),
),

此方法弊端:

  1. 如果使用Stack添加背景图片,弹出/隐藏会出现瞬间的底色闪屏
  2. 界面元素少于整个界面也能上下滑动
  3. 组件多一层嵌套,复杂界面会存在各种问题

Flutter 键盘弹出的高度异常两个解决方案

该方案适用范围: 1、不使用背景图片的界面

目前我还在寻找如何解决这个问题的方案,目前有初步构思:监听键盘升起高度,然后让整个界面同步上升。成功实践后会更新分享

方案二

使用Scaffold中的这个属性resizeToAvoidBottomInset: flase(早期版本为resizeToAvoidBottomPadding)完美解决键盘弹出的高度异常。 并且使用背景图片后不会出现底色闪屏

Scaffold(
  resizeToAvoidBottomInset: false,
  body: Container(
    child: TextFormField(
      controller: _emailController,
      focusNode: _emailFocusNode,
      keyboardType: TextInputType.emailAddress,
      validator: validateEmail,
      style: const TextStyle(color: Colors.white, fontSize: 14),
      cursorColor: Colors.white,
      onSaved: (v) {
        _email = v!;
      },
    ),
  ),
),

此方法弊端:

  1. 输入框位置低于键盘弹出的最大高度时,输入框会被遮住

该方案适用范围:

  1. 使用背景图片的界面
  2. 输入框位置高于键盘弹出的最大高度