基础库
 
 
 
 
 

54 行
1.7 KiB

  1. import 'dart:collection';
  2. import 'package:dio/dio.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:fluttertoast/fluttertoast.dart';
  5. import 'package:image_gallery_saver/image_gallery_saver.dart';
  6. import 'package:path_provider/path_provider.dart';
  7. import 'package:permission_handler/permission_handler.dart';
  8. class Download {
  9. static HashMap hashMap = HashMap();
  10. Future<String> fileToGallery(
  11. String url, {
  12. String postfix,
  13. Function(int, int) progress,
  14. }) async {
  15. // 检查是否已有读写内存的权限
  16. bool status = await Permission.storage.isGranted;
  17. //判断如果还没拥有读写权限就申请获取权限
  18. if (status || await Permission.storage.request().isGranted) {
  19. if (hashMap.containsKey(url)) {
  20. return "正在下载";
  21. } else {
  22. hashMap[url] = false;
  23. }
  24. try {
  25. var strs = url.split('.');
  26. if (strs.length < 0) {
  27. return "文件链接错误";
  28. }
  29. var appDocDir = await getTemporaryDirectory();
  30. String savePath = appDocDir.path + "/" + DateTime.now().toIso8601String().toString() + (strs[strs.length - 1].length > 4 ? (postfix ?? "") : strs[strs.length - 1]);
  31. await Dio().download(url, savePath, onReceiveProgress: (count, toal) {
  32. if(progress!=null){
  33. progress(count, toal);
  34. }
  35. });
  36. print(savePath);
  37. final result = await ImageGallerySaver.saveFile(savePath);
  38. print(result);
  39. return "保存成功";
  40. } catch (e) {
  41. return "下载失败,原因:" + e.toString();
  42. } finally {
  43. hashMap.remove(url);
  44. }
  45. } else {
  46. return "请前往系统设置开启应用的内存读取权限再尝试";
  47. }
  48. }
  49. }