Flutter 点击输入框后 键盘闪出后立刻消失

在Flutter应用中,Scaffold组件在键盘弹出时会改变布局,可通过设置`resizeToAvoidBottomPadding:false`阻止布局刷新。但键盘仍影响MediaQuery的尺寸,若父组件依赖MediaQuery调整大小,键盘弹出时组件仍可能刷新。解决方法是启动前保存屏幕大小,避免键盘影响。此外,更新提到在iOS上,`window.physicalSize`可能存在返回0的bug,通过延迟加载可解决。
摘要由CSDN通过智能技术生成

flutter 在布局最顶端使用的是Scaffold组件,在点击输入框键盘弹出后,布局的默认反应是改变屏幕大小重新布局。

这时通常会在Scaffold中添加选项:

resizeToAvoidBottomPadding:false

添加之后,应用整体布局不会随着键盘弹出而刷新改变。

但是键盘的弹出仍然会改变 MediaQuery.of(context).size获取到的数值,因此如果有输入框的父组件通过MediaQuery来决定自身大小的话,在键盘弹出的时候整个组件仍然会进行刷新导致键盘隐藏。

因为只考虑移动端,屏幕大小不会发生改变,所以考虑将屏幕大小提前保存成固定的数值。

import 'dart:ui';

//1.获取屏幕物理大小

double physicalWidth = window.physicalSize.width;

double physicalHeight = window.physicalSize.height;

// 2.获取dpr

double dpr = window.devicePixelRatio;

 // 3.宽度和高度

double screenWidth = physicalWidth / dpr;

double screenHeight = physicalHeight / dpr;

app启动之前提前获取好屏幕大小,在布局时直接引用,键盘弹出时就不会出现组件刷新导致键盘隐藏的问题。

-------------------------------------2022.5.27 更新------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值