Flutter文件多任务下载插件multi_downloader2的使用
Flutter文件多任务下载插件multi_downloader2的使用
简介
multi_downloader2 是一个用于创建和管理下载任务的 Flutter 插件。它支持 iOS 和 Android 平台,并且能够在后台模式下运行下载任务。
- 平台支持: Flutter、Android、iOS
- 依赖库: 在 Android 上基于
WorkManager,在 iOS 上基于NSURLSessionDownloadTask
iOS 集成
必要配置
启用后台模式
打开你的 ios 项目并启用后台模式:

添加 SQLite 库
添加 sqlite 库到项目中:

配置 AppDelegate
在 Objective-C 或 Swift 中配置 AppDelegate:
Objective-C
// AppDelegate.h
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : FlutterAppDelegate
@end
// AppDelegate.m
#include "AppDelegate.h"
#include "GeneratedPluginRegistrant.h"
#include "FlutterDownloaderPlugin.h"
@implementation AppDelegate
void registerPlugins(NSObject<FlutterPluginRegistry>* registry) {
if (![registry hasPlugin:@"FlutterDownloaderPlugin"]) {
[FlutterDownloaderPlugin registerWithRegistrar:[registry registrarForPlugin:@"FlutterDownloaderPlugin"]];
}
}
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GeneratedPluginRegistrant registerWithRegistry:self];
[FlutterDownloaderPlugin setPluginRegistrantCallback:registerPlugins];
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
@end
Swift
import UIKit
import Flutter
import multi_downloader
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GeneratedPluginRegistrant.register(with: self)
FlutterDownloaderPlugin.setPluginRegistrantCallback(registerPlugins)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
private func registerPlugins(registry: FlutterPluginRegistry) {
if (!registry.hasPlugin("FlutterDownloaderPlugin")) {
FlutterDownloaderPlugin.register(with: registry.registrar(forPlugin: "FlutterDownloaderPlugin"))
}
}
可选配置
支持 HTTP 请求
如果需要通过 HTTP 下载文件,则需要禁用 Apple Transport Security (ATS) 特性。有两种方式:
-
禁用特定域的 ATS 在
Info.plist文件中添加以下代码:<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>www.yourserver.com</key> <dict> <!-- 允许子域 --> <key>NSIncludesSubdomains</key> <true/> <!-- 允许标准 HTTP 请求 --> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <!-- 指定最低 TLS 版本 --> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> </dict> -
完全禁用 ATS 在
Info.plist文件中添加以下代码:<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
配置最大并发任务数
默认情况下,该插件允许同时运行 3 个下载任务。可以通过以下代码更改此限制:
<!-- 更改此数字以配置最大并发任务数 -->
<key>FDMaximumConcurrentTasks</key>
<integer>5</integer>
本地化通知消息
可以自定义下载完成时的通知消息。例如:
<key>FDAllFilesDownloadedMessage</key>
<string>所有文件已下载</string>
Android 集成
必要配置
配置 AndroidManifest.xml
确保添加以下代码以处理点击通知后打开文件的功能:
<provider
android:name="vn.hunghd.flutterdownloader.DownloadedFileProvider"
android:authorities="${applicationId}.multi_downloader.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>
配置权限
确保添加以下权限:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
可选配置
配置最大并发任务数
可以通过以下代码设置最大并发任务数:
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
android:enabled="false"
android:exported="false" />
<provider
android:name="vn.hunghd.flutterdownloader.FlutterDownloaderInitializer"
android:authorities="${applicationId}.flutter-downloader-init"
android:exported="false">
<!-- 更改此数字以配置最大并发任务数 -->
<meta-data
android:name="vn.hunghd.flutterdownloader.MAX_CONCURRENT_TASKS"
android:value="5" />
</provider>
本地化通知消息
可以自定义通知消息,例如:
<string name="multi_downloader_notification_started">下载开始</string>
<string name="multi_downloader_notification_in_progress">下载中</string>
<string name="multi_downloader_notification_canceled">下载取消</string>
<string name="multi_downloader_notification_failed">下载失败</string>
<string name="multi_downloader_notification_complete">下载完成</string>
<string name="multi_downloader_notification_paused">下载暂停</string>
使用示例
导入包
import 'package:multi_downloader/multi_downloader.dart';
初始化插件
WidgetsFlutterBinding.ensureInitialized();
await FlutterDownloader.initialize();
创建新下载任务
final taskId = await FlutterDownloader.enqueue(
url: 'your download link', // 下载链接
savedDir: 'the path of directory where you want to save downloaded files', // 保存路径
showNotification: true, // 是否在状态栏显示下载进度(仅限 Android)
openFileFromNotification: true, // 点击通知是否打开下载文件(仅限 Android)
);
更新下载进度
FlutterDownloader.registerCallback(callback); // 注册回调函数
// 回调函数示例
static void downloadCallback(String id, DownloadTaskStatus status, int progress) {
final SendPort send = IsolateNameServer.lookupPortByName('downloader_send_port');
send.send([id, status, progress]);
}
加载所有任务
final tasks = await FlutterDownloader.loadTasks();
取消任务
FlutterDownloader.cancel(taskId: taskId); // 取消单个任务
FlutterDownloader.cancelAll(); // 取消所有任务
暂停任务
FlutterDownloader.pause(taskId: taskId);
恢复任务
FlutterDownloader.resume(taskId: taskId);
重试失败的任务
FlutterDownloader.retry(taskId: taskId);
删除任务
FlutterDownloader.remove(taskId: taskId, shouldDeleteContent: false);
打开下载的文件
FlutterDownloader.open(taskId: taskId);
更多关于Flutter文件多任务下载插件multi_downloader2的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复


