You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 12:57:21