flutter中软键盘弹出遮挡输入框的处理
一般来说在flutter中我们遇到软键盘弹出遮挡键盘的时候有两种处理办法:
第一种情况:
这是键盘未弹出的状态,这种情况下我们想要达到的效果肯定是软键盘弹出并且把login按钮顶上去,而且界面不可滑动才能达到最好的交互效果:
那么如何实现这样一个代码呢?
/// 这里只贴上关键的部分代码
...
Scaffold(
resizeToAvoidBottomInset: false, /// 这里必须禁止重绘
body: SingleChildScrollView(
reverse: true,
child: SizedBox(
/// 这里根据页面的情况来得到一个高度
height: MediaQuery.of(context).size.height * 0.8,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
...
/// 主要是思路是设置一个固定高度的SingleChildScrollView然后用expended容器可自由撑起空间
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
GestureDetector(
child: Container(
margin: EdgeInsets.only(left: 20),
width: 335,
height: 48,
decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.all(Radius.circular(90))
),
child: Center(
child: Text('Login', style: TextStyle(color: Colors.white)),
),
),
onTap: () {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => CreatePassWord()));
},
),
/// 主要是这里有一个padding将从屏幕的下方撑起一个键盘的高度从而把按钮顶上去
Padding(padding: MediaQuery.of(context).viewInsets),
],
)
),
],
),
)
)
)
...
说完了第一种情况,那我们考虑一下第二种情况呢?
第二种情况
还有一种情况,我们页面的的留白部分不够多,不足以撑起一个键盘还不遮挡输入框,例子如下:
红色的区域就是弹性区域,但它的高度不够键盘的高度,所以为了交互得当,我们需要在这个页面做可滚动的操作。
实现的代码如下:
...
// resizeToAvoidBottomInset: false, /// 注释掉这一句开启重绘,整个页面就能上下滑动了
...
转载自:https://juejin.cn/post/7024122769382047775