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

Flutter中Dialog与BottomSheet同时弹出问题排查与解决

问题原因与解决方案

问题原因

你调用content函数时,直接传入了dialog(context)和bottomSheet(context)的执行结果。这会导致两个弹窗的触发逻辑在参数传递阶段就已执行,完全跳过了content函数里的条件判断,所以无论屏幕是横屏还是竖屏,Dialog和BottomSheet都会同时弹出。

解决方法

核心是推迟弹窗函数的执行时机,只在条件满足时才调用对应的函数:

1. 修改content函数

让它接收函数类型的参数,根据屏幕方向执行对应函数:

content(BuildContext context, Function showDialog, Function showBottomSheet) {
  MediaQuery.of(context).orientation == Orientation.landscape
      ? showDialog()
      : showBottomSheet();
}

2. 调整按钮的onPressed回调

传递未执行的函数引用,而不是直接执行后的结果:

ElevatedButton(
  child: const Text('Button'),
  onPressed: () {
    content(
      context,
      () => dialog(context),
      () => bottomSheet(context),
    );
  },
)

这样只有当content函数里的条件判断成立时,对应的弹窗函数才会被调用,不会再出现两者同时弹出的问题。

内容的提问来源于stack exchange,提问作者Mohammed Helewa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:50:35