Flutter:键盘弹出时如何保持Bottom Sheet高度不变
解决Bottom Sheet弹出键盘时高度降低的问题
你的问题核心是SafeArea在键盘弹出时自动添加底部内边距,加上resizeToAvoidBottomInset: false的设置冲突,导致固定高度的SizedBox显示区域被压缩。以下是两种可行的解决方案:
方案1:禁用SafeArea的底部适配
直接给SafeArea设置bottom: false,取消键盘弹出时的底部内边距调整,让固定高度的SizedBox保持完整显示:
showModalBottomSheet( context: context, builder: (_) { return SafeArea( bottom: false, // 关闭底部安全区域的键盘适配 child: const SizedBox( height: 500, child: TextField(), ), ); } );
方案2:结合isScrollControlled适配键盘高度
如果需要保留底部安全区域的适配(比如针对刘海屏底部),可以开启isScrollControlled: true,让BottomSheet可以扩展高度,同时通过MediaQuery获取键盘高度,补充到SizedBox的总高度中,确保内容区域始终保持500:
showModalBottomSheet( context: context, isScrollControlled: true, // 允许BottomSheet占据全屏高度 builder: (_) { final keyboardHeight = MediaQuery.of(context).viewInsets.bottom; return SizedBox( height: 500 + keyboardHeight, child: const SafeArea( child: TextField(), ), ); } );
另外建议移除Scaffold的resizeToAvoidBottomInset: false,这个全局设置会干扰BottomSheet自身的键盘适配逻辑,改用BottomSheet的参数来控制更精准。
内容的提问来源于stack exchange,提问作者Zhentao
相关产品推荐
相关产品推荐

