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']}');},);
}相关文章:
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] 选项列表 …...
力扣 全排列
回溯经典例题。 题目 通过回溯生成所有可能的排列。每次递归时,选择一个数字,直到选满所有数字,然后记录当前排列,回到上层时移除最后选的数字并继续选择其他未选的数字。每次递归时,在 path 中添加一个新的数字&…...
Golang 设计模式
文章目录 创建型模式简单工厂模式图形接口具体图形类:圆形具体图形类:矩形工厂类定义使用简单工厂模式 抽象工厂模式1. 定义产品接口2. 定义具体产品实现类3. 定义抽象工厂接口4. 定义具体工厂实现类5. 使用抽象工厂创建对象并使用产品 创建者模式1. 定义…...
Matlab 具有周期性分布的死角孔的饱和空气多孔材料的声学特性
本文对直主孔含侧空腔(死角)的饱和空气多孔介质中的声传播进行了理论和数值研究。侧腔位于沿每个主孔周期性间隔的“节点”上。研究了侧向空腔分布中周期性的影响,并单独考虑了紧间隔死角的低频极限。结果表明,吸附系数和透射损失…...
maven 项目怎么指定打包后名字
在 Spring Boot 的 Maven 项目中,你可以通过配置 pom.xml 文件来指定打包后的文件名。具体步骤如下: 打开 pom.xml 文件:找到你的项目根目录下的 pom.xml 文件。 配置 finalName 属性:在 标签下,添加 属性来指定打包后…...
Java Web开发进阶——Spring Boot与Thymeleaf模板引擎
Thymeleaf 是一个现代化的、功能强大的 Java 模板引擎,常用于生成 Web 应用程序的视图。它与 Spring Boot 的集成十分方便,并且提供了丰富的功能,能够帮助开发者实现动态渲染数据、处理表单、页面控制等操作。下面,我们将详细探讨…...
论文笔记(四十七)Diffusion policy: Visuomotor policy learning via action diffusion(下)
Diffusion policy: Visuomotor policy learning via action diffusion(下) 文章概括5. 评估5.1 模拟环境和数据集5.2 评估方法论5.3 关键发现5.4 消融研究 6 真实世界评估6.1 真实世界Push-T任务6.2 杯子翻转任务6.3 酱汁倒入和涂抹任务 7. 实际双臂任务…...
开始使用Panuon开源界面库环境配置并手写VS2019高仿界面
1. Panuon环境配置 1.1. 通过Nuget 安装 Panuon.WPF.UI1.2. xaml引用命名空间1.3. using Panuon.WPF.UI; 2. VS2019 view 2.1. 设置窗体尺寸和title2.2. 添加静态资源 2.2.1. 什么是静态资源 2.3. 主Grid 2.3.1. 盒子模型2.3.2. 嵌套布局 3. 总结 1. Panuon环境配置 1.1. 通…...
新垂直电商的社交传播策略与AI智能名片2+1链动模式S2B2C商城小程序的应用探索
摘要:随着互联网技术的不断进步和电商行业的快速发展,传统电商模式已难以满足消费者日益增长的个性化和多元化需求。新垂直电商在此背景下应运而生,通过精准定位、用户细分以及深度社交传播策略,实现了用户群体的快速裂变与高效营…...
WPS计算机二级•表格函数计算
听说这里是目录哦 函数基础知识 相对绝对混合引用🌪️相对引用绝对引用混合引用 常用求和函数 SUM函数🌦️语法说明 函数快速求 平均数最值⚡平均数最值 实用统计函数 实现高效统计🌀COUNTCOUNTIF 实用文本函数 高效整理数据🌈RIG…...
ESP32S3官方例程如何使用
一、WIFI 找到app_wifi.c文件 wifi_config_t wifi_config; 把上面代码修改为下面代码 wifi_config_t wifi_config { .sta {.ssid DEFAULT_ESP_WIFI_SSID, //WIFI的SSID.password DEFAULT_ESP_WIFI_PASS, //WIFI密码.threshold.authmode WIFI_AUTH_WPA…...
新版 MacOS 无法从 /usr/local/lib 加载动态链接库的解决办法
自己编写的动态链接库在Unix规范下一般位于/usr/local/lib,在2023年及之前的MacOS版本中,直接将动态库安装到该位置即可在程序运行时加载,可是升级MacOS版本后,ld就报错。 错误现象 运行程序,报错 dyld[6376]: Libra…...
【Varnish】:解决 Varnish 7.6 CDN 静态资源缓存失效问题
项目场景: 在一个使用Varnish作为反向代理的Web应用中,我们依赖CDN(内容分发网络)来缓存静态资源(如图片、CSS、JavaScript文件等),以提高全球用户的访问速度并减轻源站服务器的负载。然而&…...
【记录】篡改猴插件下载网页m3u8视频
1.打开浏览器【管理扩展】页面(edge://extensions/),打开开发人员模式 2.Edge浏览器添加篡改猴插件 3.下载需要的脚本 可以从篡改猴首页找下载网站 https://www.tampermonkey.net/scripts.php?localezh_CN 4.安装成功重启浏览器&#x…...
PID控制器 (Proportional-Integral-Derivative Controller) 算法详解及案例分析
PID控制器 (Proportional-Integral-Derivative Controller) 算法详解及案例分析 目录 PID控制器 (Proportional-Integral-Derivative Controller) 算法详解及案例分析1. 引言2. PID控制器的基本概念2.1 PID控制器的定义2.2 PID控制器的核心思想2.3 PID控制器的应用领域 3. PID控…...
【Java设计模式-5】装饰模式:给咖啡加点“佐料”
今天咱们要探索一下Java世界里的装饰模式(Decorator Pattern)。为了让这个过程更加生动易懂,咱们就以大家都熟悉的咖啡饮品来举例吧,想象一下,你就是那个咖啡大师,要给顾客调制出各种独特口味的咖啡哦&…...
C++ using(八股总结)
using作用: 类型别名using声明using指示 类型别名 using 可以用来创建类型别名,替代传统的 typedef。这在定义复杂类型时尤其有用,例如模板类型。 // 使用 typedef 创建类型别名 typedef long long ll;// 使用 using 创建类型别名 using …...
《分布式光纤传感:架设于桥梁监测领域的 “智慧光网” 》
桥梁作为交通基础设施的重要组成部分,其结构健康状况直接关系到交通运输的安全和畅通。随着桥梁建设规模的不断扩大和服役年限的增长,桥梁结构的安全隐患日益凸显,传统的监测方法已难以满足对桥梁结构健康实时、全面、准确监测的需求。分布式…...
C++(5)
1.运算符重载 头文件 #ifndef MYSTRING_H #define MYSTRING_H#include <iostream> #include <cstring>using namespace std;class myString { private:char *str;//C风格字符串int size0; public:std::string s_str;//转换构造函数myString(const std::string &a…...
【进程与线程】程序和进程在内存中的表现
在计算机系统中,程序和进程是两个密切相关但又有本质区别的概念,尤其在内存中的表现上有显著不同: 在这张图中可以直观地看出程序和进程在内存中的结构区别。 基本定义 程序 程序 是一个 静态实体,表示一组写好的指令和数据的…...
Python开发者首次使用Taotoken接入大模型API的完整步骤指南
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Python开发者首次使用Taotoken接入大模型API的完整步骤指南 对于Python开发者而言,接入大模型API进行应用开发已成为一…...
自制BLE112串口编程器:基于Bootloader的免调试器烧录方案
1. 项目概述:为BLE112模块打造一款免调试器的RS232编程器在嵌入式开发,特别是早期的蓝牙低功耗(BLE)模块应用中,我们常常会遇到一个棘手的问题:官方开发工具链的依赖和限制。以Silicon Labs(当时…...
第二周(第12周)
1.单电源供电的二阶低通滤波器2.功率放大电路...
账务台账数据
银行里说的 “账务台账数据”,本质就是按会计规则把每笔业务逐笔、分户、分科目记下来的完整明细流水 余额 辅助信息,核心是 “可逐笔追溯、可对账、可审计” 的一套明细数据。下面用通俗、具体的方式拆开说:一、银行 “账务台账” 到底是什…...
企业内统一API网关与Taotoken聚合平台对接方案
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业内统一API网关与Taotoken聚合平台对接方案 在推进AI应用落地的过程中,许多中大型企业面临一个共同挑战:…...
十年以上经验的建站公司推荐|策划强、落地稳的网站制作公司盘点
互联网时代,企业官网已从单纯的信息展示窗口升级为集品牌价值传递、用户体验连接与业务高效转化于一体的核心数字阵地。行业报告显示,优质官网可帮助企业线上转化率提升35%-60%,而低效官网则可能导致潜在客户大量流失。面对市场上众多的网站建…...
网飞成立 AI 动画工作室,开启流媒体“原生 AI 制片时代”,中外布局逻辑有何不同?
1. Netflix“偷跑”在影视巨头关于 AIGC 的军备竞赛中,Netflix 再次加速。据外媒 TheVerge 报道,网飞于今年 3 月成立了名为 "INKubator" 的工作室,这是全球流媒体巨头中首个以生成式人工智能为核心的动画制作部门。此动作引发全球…...
LeaguePrank:5分钟打造个性化英雄联盟客户端,段位头像随心换!
LeaguePrank:5分钟打造个性化英雄联盟客户端,段位头像随心换! 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 厌倦了千篇一律的英雄联盟客户端界面?想向好友展示王者段位却还在白…...
怎么理解Filter不是在afterCompetition里面remove掉ThreadLocal里面的东西,而是说在finally块里面remove
文章目录1. 核心原因:Filter 的“套娃(洋葱圈)”执行模型2. 为什么不能(也无法)在这里用 afterCompletion?维度一:Filter 拿不到 afterCompletion维度二:生命周期顺序的致命冲突总结…...
D2DX如何让暗黑破坏神2在4K显示器上流畅运行:5个关键技术解析
D2DX如何让暗黑破坏神2在4K显示器上流畅运行:5个关键技术解析 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 当…...
