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

flutter 选择图片 用九宫格显示图片,右上角X删除选择图片,点击查看图片放大缩小,在多张图片可以左右滑动查看图片

flutter 选择图片 用九宫格显示图片,右上角X删除选择图片,点击查看图片放大缩小,在多张图片可以左右滑动查看图片

************ 暂无压缩图片功能 *********

显示图片 —

import 'dart:io';import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:photo_view/photo_view.dart';///图片选择和查看图片
class ImageSelectorGrid extends StatefulWidget {_ImageSelectorGridState createState() => _ImageSelectorGridState();
}class _ImageSelectorGridState extends State<ImageSelectorGrid> {final ImagePicker _picker = ImagePicker();List<File> selectedImages = [];int maxImages = 9; // 最大允许选择的图片数量Future<void> _pickImages2() async {//暂时没有限制final pickedFiles = await _picker.pickMultiImage(limit: 2);if (pickedFiles.isNotEmpty) {setState(() {selectedImages.addAll(pickedFiles.map((f) => File(f.path)));});}}///选取9张Future<void> _pickImages() async {final pickedFiles = await _picker.pickMultiImage();List<XFile> list =pickedFiles.take(maxImages - selectedImages.length).toList();if (list.isNotEmpty) {setState(() {selectedImages.addAll(list.map((f) => File(f.path)));});}}Widget build(BuildContext context) {return GridView.builder(gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3, // 九宫格布局crossAxisSpacing: 8.0,mainAxisSpacing: 8.0,),itemCount: (selectedImages.length >= 9)? selectedImages.length: selectedImages.length + 1, // +1 表示加号按钮itemBuilder: (context, index) {if (index == selectedImages.length) {// 最后一个位置放加号按钮return GestureDetector(onTap: _pickImages,child: Container(decoration: BoxDecoration(borderRadius: BorderRadius.circular(8.0),color: Colors.grey[200], // 设置背景颜色),child: const Center(child: Icon(Icons.add, size: 40, color: Colors.blue), // 加号图标),),);} else {return Stack(children: [GestureDetector(onTap: () {// 如果有多张图片,使用 PhotoView 支持滑动切换final PageController controller =PageController(initialPage: index);Navigator.push(context,MaterialPageRoute(builder: (context) => Scaffold(appBar: AppBar(title: const Text('图片预览'),),body: PageView.builder(controller: controller,// 使用 PageController 控制初始页面itemCount: selectedImages.length,onPageChanged: (int page) {},itemBuilder: (context, pageIndex) {return Hero(tag: 'image_$pageIndex',child: PhotoView(imageProvider: FileImage(File(selectedImages[pageIndex].path)),),);},),),),);/// 点击图片查看大图 --- 单张图// Navigator.push(//   context,//   MaterialPageRoute(//     builder: (context) => PhotoView(//       imageProvider: FileImage(selectedImages[index]),//     ),//   ),// );},child: Container(decoration: BoxDecoration(//border: Border.all(color: Colors.blue, width: 2.0), // 添加蓝色边框borderRadius: BorderRadius.circular(8.0), // 添加圆角image: DecorationImage(image: FileImage(selectedImages[index]),fit: BoxFit.cover, // 将图片适应容器),),),),Positioned(top: 5.0,right: 5.0,child: GestureDetector(onTap: () => _handleIconTap(index),child: const Icon(Icons.clear, size: 30, color: Colors.red),),),],/* Image.file(selectedImages[index],fit: BoxFit.cover, // 将图片适应容器),*/);}},);}// 处理图标点击事件void _handleIconTap(int index) {// 这里可以添加图标点击后要执行的操作,例如删除图片等showDialog(context: context,builder: (context) => AlertDialog(title: const Text('操作提示'),content: Text('是否删除这张图片?'),actions: [TextButton(onPressed: () => Navigator.pop(context),child: const Text('取消'),),TextButton(onPressed: () {setState(() {selectedImages.removeAt(index);});Navigator.pop(context);},child: const Text('删除'),),],),);}
}

添加插件

需要自己添加权限申请

  #选择图片image_picker: ^1.0.4#查看图片photo_view: ^0.14.0

相关文章:

  • ‌RISC-V架构的低功耗MCU多电压域优化设计
  • 智能硬件行业售后服务管理:提升客户体验的关键所在
  • 极简主义在 UI 设计中的应用与实践:打造简洁高效界面
  • 机器人抓取位姿检测——GRCN训练及测试教程(Pytorch)
  • tensorflow使用详解
  • 【Redis】set类型
  • java工具类
  • 2P4M-ASEMI机器人功率器件专用2P4M
  • 中国地区土地覆盖综合数据集
  • 复杂背景下无人机影像小目标检测:MPE-YOLO抗遮挡与抗背景干扰设计
  • Web开发-JavaEE应用依赖项Log4j日志Shiro验证FastJson数据XStream格式
  • Spark RDD行动算子与共享变量实战:从数据聚合到分布式通信
  • 革新桌面自动化:微软UFO²操作系统深度解析与未来展望
  • 迷你世界UGC3.0脚本Wiki角色模块管理接口 Actor
  • django filter 排除字段
  • 程序代码篇---ESP32 Camera Server
  • 【Redis】zset类型
  • go语言八股文(三)
  • 2个小时1.5w字| React Golang 全栈微服务实战
  • 新增29个专业,科技成为未来主赛道!
  • 人民日报读者点题:规范涉企执法,怎样防止问题反弹、提振企业信心?
  • 持续更新丨伊朗内政部长:港口爆炸已致14人死亡
  • “十四五”以来少数民族发展资金累计下达边疆省区252亿元
  • 印度媒体称印巴在克什米尔再次交火
  • 弘扬 “上海精神”,上合组织政党论坛聚焦政党责任与使命
  • 中国平安一季度净赚270亿降逾26%,营运利润增2.4%