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

Flutter点击按钮弹出3秒自动关闭弹窗无显示问题求助

问题分析与修正

你的代码存在两个核心错误,导致弹窗完全无法显示:

  1. 未触发弹窗的核心方法:Flutter中必须通过showDialog方法才能唤起AlertDialog,你直接在onPressed里写context: context这类参数是无效的,没有执行任何弹窗触发逻辑。
  2. 箭头函数语法错误:() => (...)的写法仅支持返回单个表达式,你在括号内放置了多段内容(参数键值对+延迟逻辑),语法本身不成立,且没有实际执行弹窗操作。

修正后的代码

class ExitGameRoute extends StatelessWidget {
  const ExitGameRoute({super.key});

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () {
        // 调用showDialog弹出AlertDialog
        showDialog(
          context: context,
          barrierDismissible: false, // 可选:禁止点击外部提前关闭弹窗
          builder: (context) => const AlertDialog(
            title: Text('Exiting Game Alert'),
            content: Text('Exiting Build Up Domino...'),
          ),
        );
        // 延迟3秒自动关闭弹窗
        Future.delayed(const Duration(seconds: 3), () {
          // 检查弹窗是否还存在,避免报错
          if (Navigator.canPop(context)) {
            Navigator.of(context).pop(true);
          }
        });
      },
      child: const Text(
        'Exit Game',
        style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold),
      ),
    );
  }
}

关键说明

  • showDialog是Flutter显示弹窗的标准API,必须传入context和builder参数来构建弹窗内容。
  • 加入barrierDismissible: false可以确保弹窗必须等待3秒后才关闭,不会被用户误触提前关闭(不需要的话可删除该参数)。
  • Navigator.canPop(context)的判断是为了避免弹窗被手动关闭后,延迟执行pop时出现报错,提升代码稳定性。

内容的提问来源于stack exchange,提问作者نظامی گنجوی

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:41:56