|
- import 'dart:collection';
- import 'dart:io';
-
- import 'package:dio/dio.dart';
- import 'package:flutter/material.dart';
- import 'package:fluttertoast/fluttertoast.dart';
- import 'package:path_provider/path_provider.dart';
- import 'package:permission_handler/permission_handler.dart';
- import 'package:save_image/save_image.dart';
-
- class Download {
- static HashMap hashMap = HashMap();
-
- Future<String> fileToGallery(
- String url, {
- String postfix,
- Function(int, int) progress,
- }) async {
- // 检查是否已有读写内存的权限
- bool status = await Permission.storage.isGranted;
-
- //判断如果还没拥有读写权限就申请获取权限
- if (status || await Permission.storage.request().isGranted) {
- if (hashMap.containsKey(url)) {
- return "正在下载";
- } else {
- hashMap[url] = false;
- }
- try {
- var strs = url.split('.');
- if (strs.length < 0) {
- return "文件链接错误";
- }
- var appDocDir = await getTemporaryDirectory();
- String savePath = appDocDir.path +
- "/" +
- DateTime.now().toIso8601String().toString() +
- (strs[strs.length - 1].length > 4 ? (postfix ?? "") : ('.' + strs[strs.length - 1]));
- await Dio().download(url, savePath, onReceiveProgress: (count, toal) {
- if (progress != null) {
- progress(count, toal);
- }
- });
- print(savePath);
- var result = await SaveImage.save(imageBytes: File(savePath).readAsBytesSync());
- if (result != null && result) {
- return "保存成功";
- } else {
- return "保存失败";
- }
- } catch (e) {
- return "下载失败,原因:" + e.toString();
- } finally {
- hashMap.remove(url);
- }
- } else {
- return "请前往系统设置开启应用的内存读取权限再尝试";
- }
- }
- }
|