WallPaper_FSX_Flutter/lib/common/utils/download_util.dart
2024-05-13 13:44:27 +08:00

79 lines
2.6 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Author: fengshengxiong
// Date: 2024/5/10
// Description: 下载文件
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:wallpaper/common/components/view_state_widget.dart';
import 'package:wallpaper/common/network/dio_client.dart';
import 'package:wallpaper/common/utils/filesize_util.dart';
import 'package:wallpaper/common/utils/local_path_util.dart';
import 'package:wallpaper/common/utils/log_print.dart';
import 'package:wallpaper/common/utils/num_util.dart';
class DownloadUtil {
/// 下载壁纸
static Future downloadWallpaper(String imageUrl, Function(String savePath) callBack) async {
var process = 0.0.obs;
var processStr = ''.obs;
var cancelToken = CancelToken();
Get.showSnackbar(GetSnackBar(
borderRadius: 8.r,
margin: const EdgeInsets.symmetric(horizontal: 16).w,
snackPosition: SnackPosition.TOP,
backgroundColor: Colors.white,
titleText: const Text(
'Loading...',
style: TextStyle(color: Colors.black, fontWeight: FontWeight.w500),
),
messageText: Obx(() {
return Row(
children: [
loadingView(
valueColor: const AlwaysStoppedAnimation<Color>(Colors.black),
value: process.value,
),
SizedBox(width: 10.w),
Expanded(
child: Text(
processStr.value,
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: 14.sp,
color: Colors.black,
),
),
),
],
);
}),
));
Directory dir = Directory(await LocalPathUtil.getTemporaryPath());
bool exist = await dir.exists();
if (!exist) {
// 若目录不存在,先创建
await dir.create();
}
// 获取图片文件的名称使用uri来解析url
Uri uri = Uri.parse(imageUrl);
String savePath = '${dir.path}/${uri.pathSegments.last}';
LogPrint.d('壁纸保存位置:$savePath');
await DioClient().download(imageUrl, savePath, cancelToken: cancelToken, onReceiveProgress: (int count, int total) {
if (total != -1) {
process.value = NumUtil.strToDouble(NumUtil.formatNum(count / total));
processStr.value = '${FileSizeUtil.fileSize(count)}/${FileSizeUtil.fileSize(total)}';
}
}, success: () {
Get.back();
callBack(savePath);
}, fail: (err) {
Get.back();
});
}
}