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

【Flutter】支持多平台 多端保存图片到本地相册 (兼容 Web端 移动端 android 保存到本地)

免责声明: 我只测试了Web端 和 Android端 可行哈

import 'dart:io';
import 'package:flutter/services.dart';
import 'package:http/http.dart' as http;
import 'package:universal_html/html.dart' as html;
import 'package:oktoast/oktoast.dart';
import 'package:image_gallery_saver/image_gallery_saver.dart';
import 'package:permission_handler/permission_handler.dart';//申请存 本地存储 和 相册 权限
Future<bool> getPhotoPermission() async {if (Platform.isIOS) {var storageStatus = await Permission.storage.status;var photosStatus = await Permission.photos.status;if (storageStatus.isDenied || photosStatus.isDenied) {Map<Permission, PermissionStatus> statuses = await [Permission.storage,Permission.photos,].request();}return storageStatus.isGranted && photosStatus.isGranted;} else {var storageStatus = await Permission.storage.status;var photosStatus = await Permission.photos.status;if (storageStatus.isDenied || photosStatus.isDenied) {Map<Permission, PermissionStatus> statuses = await [Permission.storage,Permission.photos,].request();}return storageStatus.isGranted && photosStatus.isGranted;}
}// 根据网络路径保存图片到相册
Future<void> saveImage(String imageUrl) async {final response = await http.get(Uri.parse(imageUrl));final bytes = response.bodyBytes;if (kIsWeb) {final imageData = Uint8List.fromList(bytes);final blob = html.Blob([imageData], 'image/jpeg');final url = html.Url.createObjectUrlFromBlob(blob);final anchor = html.AnchorElement(href: url);String timestamp = DateTime.now().millisecondsSinceEpoch.toString();anchor.download = 'image_$timestamp.jpg';anchor.click();html.Url.revokeObjectUrl(url);} else {if (Platform.isAndroid || Platform.isIOS) {bool permission = await getPhotoPermission();if (permission) {if (Platform.isIOS) {// 自动以时间戳命名final result = await ImageGallerySaver.saveImage(bytes);if (result != null) {showToast("保存成功");} else {print('error');}} else {//安卓// 自动以时间戳命名final result = await ImageGallerySaver.saveImage(bytes);if (result != null) {showToast("保存成功");} else {print('error');}}} else {//重新请求--第一次请求权限时,保存方法不会走,需要重新调一次saveImage(imageUrl);}} else {throw PlatformException(code: 'PLATFORM_NOT_SUPPORTED',message: 'Saving images is not supported on this platform.',);}}
}
http://www.lryc.cn/news/161303.html

相关文章:

  • postgresql 安装教程
  • 手写数据库连接池
  • 在CentOS7上增加swap空间
  • @Autowired和@Resource
  • QTableView通过setColumnWidth设置了列宽无效的问题
  • 【用unity实现100个游戏之10】复刻经典俄罗斯方块游戏
  • Docker容器内数据备份到系统本地
  • 学信息系统项目管理师第4版系列06_项目管理概论
  • Java发送(QQ)邮箱、验证码发送
  • PostgresSQL----基于Kubernetes部署PostgresSQL
  • 7 个适合初学者的项目,可帮助您开始使用 ChatGPT
  • JDBC操作SQLite的工具类
  • SEO百度优化基础知识全解析(了解百度SEO标签作用)
  • 用python实现基本数据结构【03/4】
  • 软件测试面试题汇总
  • AP5101C 高压线性恒流IC 宽电压6-100V LED汽车大灯照明 台灯LED矿灯 指示灯电源驱动
  • 【大数问题】字符串相减(大数相减)<模拟>
  • easycode生成代码模板配置
  • 【数据结构】堆排序和Top-k问题
  • 经典的生产者和消费者模型问题
  • Java基础:代理
  • 每日一学——防火墙2
  • Web学习笔记-React(组合Components)
  • 【strstr函数的介绍和模拟实现——超详细版】
  • 【Terraform】Terraform自动创建云服务器脚本
  • TCP机制之确认应答及超时重传
  • Openharmony3.2 源码编译(ubuntu 22.04) 过程记录
  • PostgreSQL 数据库使用 psql 导入 SQL
  • 容器编排学习(三)端口映射与Harber镜像仓库介绍
  • Day_13 > 指针进阶(2)