Flutter:封装ActionSheet 操作菜单

演示效果图
在这里插入图片描述

action_sheet_util.dart

import 'package:ducafe_ui_core/ducafe_ui_core.dart';
import 'package:flutter/material.dart';
import 'package:demo/common/index.dart';class ActionSheetUtil {/// 底部操作表/// [context] 上下文/// [title] 标题/// [items] 选项列表 [{'id': 1, 'title': '相机', 'type': 'camera'}]/// [onConfirm] 确认回调 返回选中项static void showActionSheet({required BuildContext context,required String title,required List<Map<String, dynamic>> items,required Function(Map<String, dynamic>) onConfirm,}) {showModalBottomSheet(context: context,backgroundColor: Colors.transparent,builder: (context) => Container(decoration: BoxDecoration(color: Colors.white,borderRadius: BorderRadius.only(topLeft: Radius.circular(30.w),topRight: Radius.circular(30.w),),),child: SafeArea(child: Column(mainAxisSize: MainAxisSize.min,children: [// 标题Container(height: 100.w,alignment: Alignment.center,child: TextWidget.body(title,size: 30.sp,weight: FontWeight.w600,),),// 选项列表...items.map((item) => GestureDetector(onTap: () {Navigator.pop(context);onConfirm(item);},child: Container(height: 100.w,alignment: Alignment.center,decoration: BoxDecoration(border: Border(top: BorderSide(color: const Color(0xff999999),width: 1.w,),),),child: TextWidget.body(item['title'],size: 28.sp,color: const Color(0xff333333),),),)).toList(),// 间隔Container(height: 16.w,color: const Color(0xffF4F4F4),),// 取消按钮GestureDetector(onTap: () => Navigator.pop(context),child: Container(height: 100.w,alignment: Alignment.center,child: TextWidget.body('取消',size: 28.sp,color: const Color(0xff333333),),),),],),),),);}
}

调用时需要传入BuildContext context


.onTap(() {controller.showImagePicker(BuildContext context);
}),/ 定义选项列表
final List<Map<String, dynamic>> actions = [{"id": 1, "title": "相机", "type": "camera"},{"id": 2, "title": "相册", "type": "gallery"},
];// 在控制器或页面中使用
void showImagePicker(context) async{ActionSheetUtil.showActionSheet(context: context,title: '请选择',items: actions,onConfirm: (item) async {print('操作类型:${item['type']}');},);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2180.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用yarn命令创建Vue3项目

文章目录 1.技术栈2.创建流程2.1创建vue3项目2.2选择配置项2.3进入项目目录 3.使用Yarn启动项目3.1安装依赖3.2运行项目 1.技术栈 yarnvitevue3 2.创建流程 2.1创建vue3项目 vue create 项目名称2.2选择配置项 直接回车可选择Vue3 2.3进入项目目录 cd 项目名称默认在当前…

【Node.js的安装与配置】

目录&#xff1a; 一&#xff1a;下载Node.js二&#xff1a;安装Node.js三&#xff1a;配置存放目录四&#xff1a;配置环境变量五&#xff1a;配置淘宝镜像六&#xff1a;测试Node.js 一&#xff1a;下载Node.js &#x1f534; 下载地址&#xff1a;https://www.nodejs.com.cn…

【AIGC】SYNCAMMASTER:多视角多像机的视频生成

标题&#xff1a;SYNCAMMASTER: SYNCHRONIZING MULTI-CAMERA VIDEO GENERATION FROM DIVERSE VIEWPOINTS 主页&#xff1a;https://jianhongbai.github.io/SynCamMaster/ 代码&#xff1a;https://github.com/KwaiVGI/SynCamMaster 文章目录 摘要一、引言二、使用步骤2.1 TextT…

左神算法基础提升--1

文章目录 哈希函数哈希函数的主要特点确定性快速计算输出长度固定离散性 哈希表哈希表的原理解题 布隆过滤器布隆过滤器的主要特点高效性快速查询空间效率误报率 布隆过滤器的原理 一致性哈希一致性哈希原理一致性哈希应用 哈希函数 哈希函数是一种将任意长度的输入&#xff0…

【Go】Go Gin框架初识(一)

1. 什么是Gin框架 Gin框架&#xff1a;是一个由 Golang 语言开发的 web 框架&#xff0c;能够极大提高开发 web 应用的效率&#xff01; 1.1 什么是web框架 web框架体系图&#xff08;前后端不分离&#xff09;如下图所示&#xff1a; 从上图中我们可以发现一个Web框架最重要…

VS Code 的扩展下载安装的最新方式

离线包的下载 在 2024年的时候&#xff0c;在VS Code的官方扩展市场&#xff1a;https://marketplace.visualstudio.com/ &#xff0c; 搜索到需要的扩展之后&#xff0c;是可以在对应的页面现在最新版本和几个历史版本的扩展的安装包。 下载下来的扩展包的文件是后缀是 vsix …

【Vue3 入门到实战】3. ref 和 reactive区别和适用场景

目录 ​编辑 1. ref 部分 1.1 ref定义基本数据类型 1.2 ref 定义引用数据类型 2. reactive 函数 3. ref 和 reactive 对比 3.1 原理 3.2 区别 3.3 使用原则 在 Vue 3 中 ref 和 reactive 是用于创建响应式数据的两个核心函数。它们都属于 Composition API 的一部分&…

浅谈云计算07 | 云安全机制

云计算安全机制 一、引言二、加密技术&#xff1a;数据的隐形护盾三、散列机制&#xff1a;数据完整性的忠诚卫士四、数字签名&#xff1a;数据来源与真伪的鉴定专家五、公钥基础设施&#xff08;PKI&#xff09;&#xff1a;信任的基石六、身份与访问管理&#xff08;IAM&…

【Sql递归查询】Mysql、Oracle、SQL Server、PostgreSQL 实现递归查询的区别与案例(详解)

文章目录 Mysql 5.7 递归查询Mysql 8 实现递归查询Oracle递归示例SQL Server 递归查询示例PostgreSQL 递归查询示例 更多相关内容可查看 Mysql 5.7 递归查询 MySQL 5.7 本身不直接支持标准 SQL 中的递归查询语法&#xff08;如 WITH RECURSIVE 这种常见的递归查询方式&#xf…

【Unity3D】【已解决】TextMeshPro无法显示中文的解决方法

TextMeshPro无法显示中文的解决方法 现象解决方法Assets 目录中新建一个字体文件夹在C:\Windows\Fonts 中随便找一个中文字体的字体文件把字体文件拖到第一步创建的文件夹中右键导入的字体&#xff0c;Create---TextMeshPro---Font Asset&#xff0c;创建字体文件资源把 SDF文件…

ShaderJoy —— 如何判别直线是否和二次贝塞尔曲线相交【GLSL】

效果图 关键代码解析 bool IntersectsQuadraticBezier (vec2 src, vec2 dest) {float A = (CONTROL_POINT_A - 2.0 * CONTROL_POINT_B

第十二章:算法与程序设计

文章目录&#xff1a; 一&#xff1a;基本概念 1.算法与程序 1.1 算法 1.2 程序 2.编译预处理 3.面向对象技术 4.程序设计方法 5.SOP标志作业流程 6.工具 6.1 自然语言 6.2 流程图 6.3 N/S图 6.4 伪代码 6.5 计算机语言 二&#xff1a;程序设计 基础 1.常数 …

【BLE】CC2541之ADC

本文最后修改时间&#xff1a;2022年04月12日 23:00 一、本节简介 本文介绍如何通过P05口采集电压值。 二、实验平台 1&#xff09;CC2541平台 ①协议栈版本&#xff1a;BLE-CC254x-1.4.0 ②编译软件&#xff1a;IAR 10.20.1 ③硬件平台&#xff1a;香瓜CC2541开发板、USB…

SpeingMVC框架(三)

目录 五、响应数据与结果视图 1、返回值分类 2、springmvc的请求转发和重定向 六、异常处理 1、处理思路 2、自定义异常处理器 七、springmvc中的拦截器 1、拦截器概述 2、自定义拦截器步骤 五、响应数据与结果视图 1、返回值分类 返回String&#xff1a;Controller方…

Hadoop3.x 万字解析,从入门到剖析源码

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

【Vue】分享一个快速入门的前端框架以及如何搭建

先上效果图: 登录 菜单: 下载地址: 链接&#xff1a;https://pan.baidu.com/s/1m-ZlBARWU6_2n8jZil_RAQ 提取码&#xff1a;ui20 … 主要是可以自定义设置token,更改后端请求地址较为方便。 应用设置: 登录与token设置: 在这里设置不用登录,可以请求的接口: request.js i…

汽车免拆诊断案例 | 2007 款法拉利 599 GTB 车发动机故障灯异常点亮

故障现象  一辆2007款法拉利599 GTB车&#xff0c;搭载6.0 L V12自然吸气发动机&#xff08;图1&#xff09;&#xff0c;累计行驶里程约为6万km。该车因发动机故障灯异常点亮进厂检修。 图1 发动机的布置 故障诊断 接车后试车&#xff0c;发动机怠速轻微抖动&#xff0c;…

Emacs 折腾日记(九)——elisp 数组与序列

elisp 中序列是数组和列表的统称&#xff0c;序列的共性是内部数据有一个先后的顺序&#xff0c;它与C/C 中有序列表类似。 elisp 中的数组包括向量、字符串、char-table 和布尔向量&#xff0c;它们的关系如下: 在之前一章中已经介绍了序列中的一种类型——列表&#xff0c…

Mac玩Steam游戏秘籍!

Mac玩Steam游戏秘籍&#xff01; 大家好&#xff01;最近有不少朋友在用MacBook玩Steam游戏时遇到不支持mac的问题。别担心&#xff0c;我来教你如何用第三方工具Crossover来畅玩这些不支持的游戏&#xff0c;简单又实用&#xff01; 第一步&#xff1a;下载Crossover 首先&…

初识算法和数据结构P1:保姆级图文详解

文章目录 前言1、算法例子1.1、查字典&#xff08;二分查找算法&#xff09;1.2、整理扑克&#xff08;插入排序算法&#xff09;1.3、货币找零&#xff08;贪心算法&#xff09; 2、算法与数据结构2.1、算法定义2.2、数据结构定义2.3、数据结构与算法的关系2.4、独立于编程语言…