当前位置: 首页 > news >正文

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.lryc.cn/news/521053.html

相关文章:

  • 力扣 全排列
  • Golang 设计模式
  • Matlab 具有周期性分布的死角孔的饱和空气多孔材料的声学特性
  • maven 项目怎么指定打包后名字
  • Java Web开发进阶——Spring Boot与Thymeleaf模板引擎
  • 论文笔记(四十七)Diffusion policy: Visuomotor policy learning via action diffusion(下)
  • 开始使用Panuon开源界面库环境配置并手写VS2019高仿界面
  • 新垂直电商的社交传播策略与AI智能名片2+1链动模式S2B2C商城小程序的应用探索
  • WPS计算机二级•表格函数计算
  • ESP32S3官方例程如何使用
  • 新版 MacOS 无法从 /usr/local/lib 加载动态链接库的解决办法
  • 【Varnish】:解决 Varnish 7.6 CDN 静态资源缓存失效问题
  • 【记录】篡改猴插件下载网页m3u8视频
  • PID控制器 (Proportional-Integral-Derivative Controller) 算法详解及案例分析
  • 【Java设计模式-5】装饰模式:给咖啡加点“佐料”
  • C++ using(八股总结)
  • 《分布式光纤传感:架设于桥梁监测领域的 “智慧光网” 》
  • C++(5)
  • 【进程与线程】程序和进程在内存中的表现
  • 个人主页搭建全流程(Nginx部署+SSL配置+DCDN加速)
  • 语音合成的预训练模型
  • 前端组件开发:组件开发 / 定义配置 / 配置驱动开发 / 爬虫配置 / 组件V2.0 / form表单 / table表单
  • Swagger生成Api文档的增强解决方案--knife4j
  • Node.js - HTTP
  • LangChain学习笔记2 Prompt 模板
  • 如何在gitlab cicd中实现每月10号上午执行
  • SimpleFOC |SimpleFOC学习笔记汇总
  • OpenArk64:Windows 系统分析与逆向工程工具详解
  • 数据储存与管理【大数据导论】
  • 《从零到一:搭建高效体育直播网站的全流程技术指南》