Flutter---showCupertinoDialog

核心特点

①半透明背景

②圆角设计

③平滑动画

④自适应深色模式

方法签名

Dart 复制代码
Future<T?> showCupertinoDialog<T>({
  required BuildContext context,
  required WidgetBuilder builder,
  bool barrierDismissible = true,
  String? barrierLabel,
  RouteSettings? routeSettings,
})

实现的简单案例

实现的具体代码

Dart 复制代码
// 显示对话框的方法
  void _showDeleteDialog() {
    showCupertinoDialog(
      context: context,
      builder: (context) => CupertinoAlertDialog(
        title: const Text("提示"), //对话框标题
        content: const Text("确定要删除吗?"),//对话框内容
        actions: [
          CupertinoDialogAction(
            child: const Text("取消"),//取消按钮
            onPressed: () => Navigator.pop(context),
          ),
          CupertinoDialogAction(
            child: const Text("确认"),//确认按钮
            onPressed: () => deleteItem(),
          ),
        ],
      ),
    );
  }

实现的完整代码

Dart 复制代码
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class HomePage extends StatefulWidget{
  const HomePage({super.key});

  @override
  State<StatefulWidget> createState() => _HomePageState();

}

class _HomePageState extends State<HomePage>{

  // 删除项目的方法
  void deleteItem() {
    Navigator.pop(context); // 关闭对话框
    // 这里添加删除逻辑的具体逻辑
    print("项目已删除");
  }

  // 显示对话框的方法
  void _showDeleteDialog() {
    showCupertinoDialog(
      context: context,
      builder: (context) => CupertinoAlertDialog(
        title: const Text("提示"), //对话框标题
        content: const Text("确定要删除吗?"),//对话框内容
        actions: [
          CupertinoDialogAction(
            child: const Text("取消"),//取消按钮
            onPressed: () => Navigator.pop(context),
          ),
          CupertinoDialogAction(
            child: const Text("确认"),//确认按钮
            onPressed: () => deleteItem(),
          ),
        ],
      ),
    );
  }

  //UI构建
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
           // const Text("home页面"),
            const SizedBox(height: 20),
            CupertinoButton(
              onPressed: _showDeleteDialog,//给按钮引入点击删除事件
              child: const Text("删除对话框"),
            ),
          ],
        ),


      ),
    );
  }

}

核心组件

CupertinoAlertDialog

典型结构

Dart 复制代码
CupertinoAlertDialog(
  title: Text("标题"),
  content: Text("内容文本"),
  actions: [
    CupertinoDialogAction(...),
    CupertinoDialogAction(...),
  ],
)
CupertinoDialogAction是对话框操作按钮

可以设置关键属性

Dart 复制代码
isDefaultAction: true, // 文字会加粗显示,强调样式(通常用于确认),
isDestructiveAction: true, // 文字显示为红色,警示样式(红色文字)

效果图为

相关推荐
DanCheOo几秒前
AI 应用的安全架构:Prompt 注入、数据泄露、权限边界
前端·人工智能·prompt·安全架构
We་ct1 小时前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域
身如柳絮随风扬1 小时前
多数据源切换实战:从业务场景到3种实现方案全解析
java·分布式·微服务
weixin_427771611 小时前
前端调试隐藏元素
前端
Java小生不才2 小时前
Spring AI文生音
java·人工智能·spring
凯尔萨厮2 小时前
Springboot2.x+Thymeleaf项目创建
java
fish_xk2 小时前
map和set
java·开发语言
李崧正2 小时前
Java技术分享:Lambda表达式与函数式编程
java·开发语言·python
老了,不知天命2 小时前
鳶尾花項目JAVA
java·开发语言·机器学习
二哈赛车手2 小时前
新人笔记---实现简易版的rag的bm25检索(利用ES),以及RAG上传时的ES与向量数据库双写
java·数据库·笔记·spring·elasticsearch·ai