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

Flutter中如何实现点击Yes/No按钮后自动关闭的对话框?

Flutter 确认对话框(Yes/No)实现方案

你的代码存在两个核心问题:

  • 直接返回returnValue无效:showDialog是异步操作,函数会在对话框弹出后立即返回初始的false,无法获取用户的实际选择结果
  • 未关闭对话框:按钮点击后仅修改变量,没有调用关闭对话框的方法

以下是修正后的完整实现:

Future<bool> showAlertDialog(BuildContext context, String message) async {
  // 弹出对话框并等待用户选择结果
  return await showDialog(
    context: context,
    barrierDismissible: false, // 点击外部不关闭对话框,可选配置
    builder: (BuildContext context) {
      return AlertDialog(
        title: const Text("是否继续操作?"),
        content: Text(message),
        actions: [
          ElevatedButton(
            child: const Text("取消"),
            onPressed: () {
              // 关闭对话框并返回false
              Navigator.pop(context, false);
            },
          ),
          ElevatedButton(
            child: const Text("继续"),
            onPressed: () {
              // 关闭对话框并返回true
              Navigator.pop(context, true);
            },
          ),
        ],
      );
    },
  ) ?? false; // 若用户通过返回键等方式关闭,默认返回false
}

使用方式示例

// 在需要调用的方法前添加async关键字
bool shouldContinue = await showAlertDialog(context, "此操作将删除数据,确认继续?");
if (shouldContinue) {
  // 用户选择继续,执行对应逻辑
} else {
  // 用户选择取消,执行对应逻辑
}

关键说明

  • 用Future<bool>作为返回类型,配合async/await等待用户的选择结果
  • 通过Navigator.pop(context, 返回值)同时完成关闭对话框和传递选择结果两个操作
  • barrierDismissible: false可强制用户必须选择按钮才能关闭对话框,可根据需求调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:57:42