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!;
},
),
),
),
此方法弊端:
- 如果使用Stack添加背景图片,弹出/隐藏会出现瞬间的底色闪屏
- 界面元素少于整个界面也能上下滑动
- 组件多一层嵌套,复杂界面会存在各种问题
该方案适用范围: 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!;
},
),
),
),
此方法弊端:
- 输入框位置低于键盘弹出的最大高度时,输入框会被遮住
该方案适用范围:
- 使用背景图片的界面
- 输入框位置高于键盘弹出的最大高度
转载自:https://juejin.cn/post/7024410697769418788