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

使用rflutter_alert的Alert框点击按钮跳转后不消失如何解决

问题原因

你遇到的Alert框无法消失的核心原因是rflutter_alert的弹窗本质是一个新推入路由栈的路由层,你当前的代码直接执行了跳转到主页的逻辑,没有先将弹窗路由从栈中移除,导致弹窗路由一直残留。

解决方法

调整DialogButton的onPressed回调内的执行顺序,先调用Navigator.pop(context)关闭弹窗,再执行后续的状态重置和页面跳转逻辑即可。
如果你的主页面是当前第二个页面的上一级路由,更推荐关闭弹窗后直接返回上一级,不需要重新push新的主页面实例,避免路由栈冗余。

修正后的代码示例

setState(() {
  if (quizBrain.isFinished() == true) {
    var image = null;
    if (trueAns < 5) {
      image = AlertType.warning;
    } else {
      image = AlertType.success;
    }
    Alert(
      context: context,
      type: image,
      title: "RFLUTTER ALERT",
      desc: "Correct Answers: $trueAns \nFalse Answers: $falseAns.",
      buttons: [
        DialogButton(
          child: Text(
            "COOL",
            style: TextStyle(color: Colors.white, fontSize: 20),
          ),
          onPressed: () {
            // 第一步:先关闭弹窗
            Navigator.pop(context);
            // 第二步:重置状态
            setState(() {
              quizBrain.reset();
              scoreKeeper.clear();
              trueAns = 0;
              falseAns = 0;
            });
            // 第三步:跳转到主页面,如果主页面是上一级路由,直接用Navigator.pop(context)返回即可,不需要push新页面
            // 方案1:回到已有的上一级主页面
            Navigator.pop(context);
            // 方案2:如果确实需要新开主页面,再用下面的push逻辑
            // Navigator.push(
            //   context,
            //   MaterialPageRoute(
            //     builder: (BuildContext context) => HomeRoute(),
            //   )
            // );
          },
          width: 120,
        )
      ],
    ).show();
  }
}

注意事项

  • 路由操作必须遵循「先关闭弹窗、再操作页面路由」的顺序,否则弹窗路由会一直残留在栈中,回到当前页面时就会重新出现未关闭的弹窗
  • 尽量避免在弹窗未关闭的情况下执行页面跳转,会导致路由栈层级混乱

内容的提问来源于stack exchange,提问作者Aqeel Tariq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:15:03