Flutter文件下载管理插件easy_downloader的使用
Flutter文件下载管理插件easy_downloader的使用
简介
easy_downloader
是一个快速的下载管理器,允许在多个隔离环境中进行下载,文件被分割成多个片段并使用不同的连接下载每个片段。
特性
- ✅ 支持恢复、暂停、下载
- ✅ 支持队列下载
- ✅ 使用多个连接和进度条在多个隔离环境中下载
- ✅ 支持通知
- ✅ 支持下载后打开文件(仅限安卓和iOS)
入门指南
添加依赖
在 pubspec.yaml
文件中添加 easy_downloader
依赖:
dependencies:
easy_downloader: ^0.0.16
激活 easy_downloader
:
dart pub global activate easy_downloader
初始化插件
Flutter
添加 easy_downloader_flutter_lib
到 pubspec.yaml
中:
dependencies:
easy_downloader_flutter_lib: ^0.0.1
初始化插件:
await EasyDownloader().initFlutter(
allowNotification: true,
//notification icon present in android/res/drawable
defaultIconAndroid: 'download',
);
Dart
EasyDownloader().init();
创建新任务
var url = "https://github.com/linkkader/zanime/releases/download/39/zanime_39.apk";
var name = "test10MB$i";
var path = (await getApplicationDocumentsDirectory()).path;
var task = await downloader.download(
url: url,
autoStart: false,
path: path,
maxSplit: 1,
fileName: "${name}easyDownloader",
);
task.addListener((task) {
//监听所有任务更新
setState(() {
// 更新UI
});
});
task.addSpeedListener((length) {
//监听速度
speedTask[task.downloadId] = length;
setState(() {
// 更新UI
});
});
///显示通知(仅在安卓上测试)
task.showNotification();
完整示例代码
以下是一个完整的示例代码,展示如何使用 easy_downloader
进行文件下载:
import 'dart:io';
import 'package:easy_downloader/easy_downloader.dart';
import 'package:path_provider/path_provider.dart';
void main() async {
var file = File("test.mp4");
if (file.existsSync()) {
file.deleteSync();
}
await Isar.initializeIsarCore(download: true);
var isar = await Isar.open(EasyDownloader.schemas, directory: ".");
var easyDownloader = await EasyDownloader().init(isar: isar);
var dir = Directory("download");
if (dir.existsSync()) {
dir.deleteSync(recursive: true);
}
var downloadDir = await getApplicationDocumentsDirectory();
var task = await easyDownloader.download(
url: "https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4",
maxSplit: 10,
path: downloadDir.path,
);
task.addListener((task) {
print(
"status: ${task.status} ${task.totalDownloaded.toHumanReadableSize()} / ${task.totalLength.toHumanReadableSize()}");
});
task.start();
}
额外信息
- 仅在安卓、iOS 和 macOS 上测试。
- 如果您的文件较小,有时下载长度可能会超过总长度,这并不是问题。
许可证
Copyright (c) 2021 linkkader
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
这段Markdown文档详细介绍了如何使用 `easy_downloader` 插件进行文件下载,并提供了一个完整的示例代码来帮助开发者快速上手。
更多关于Flutter文件下载管理插件easy_downloader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter文件下载管理插件easy_downloader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter中使用easy_downloader
插件进行文件下载管理的示例代码。这个插件可以帮助你轻松地在Flutter应用中实现文件下载功能。
首先,你需要在你的pubspec.yaml
文件中添加easy_downloader
依赖:
dependencies:
flutter:
sdk: flutter
easy_downloader: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你可以在你的Flutter应用中使用easy_downloader
进行文件下载。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:easy_downloader/easy_downloader.dart';
import 'package:path_provider/path_provider.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Easy Downloader Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final EasyDownloader _downloader = EasyDownloader();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Easy Downloader Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: _downloadFile,
child: Text('Download File'),
),
),
);
}
Future<void> _downloadFile() async {
// 获取应用文档目录路径
final Directory appDocDir = await getApplicationDocumentsDirectory();
final String savePath = '${appDocDir.path}/example.zip';
// 下载文件
final DownloadTask task = await _downloader.downloadFile(
url: 'https://example.com/path/to/your/file.zip',
savedDir: appDocDir.path,
fileName: 'example.zip',
showNotification: true, // 是否显示下载通知
openFileFromNotification: true, // 是否允许从通知打开文件
);
// 监听下载进度
task.progress.listen((progress) {
print('Download Progress: ${progress.receivedLength}/${progress.totalLength}');
});
// 等待下载完成
await task.future;
// 下载完成后,你可以在这里处理文件,比如打开或显示下载完成的通知
print('File downloaded to $savePath');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('File downloaded successfully!')),
);
}
}
在这个示例中,我们做了以下几件事:
- 在
pubspec.yaml
文件中添加了easy_downloader
依赖。 - 创建了一个Flutter应用,并在主页面中添加了一个按钮。
- 当按钮被点击时,调用
_downloadFile
方法来下载文件。 - 使用
getApplicationDocumentsDirectory
函数获取应用的文档目录路径,并指定保存文件的名称。 - 使用
_downloader.downloadFile
方法开始下载文件,并传入URL、保存目录、文件名等参数。 - 监听下载进度,并在控制台中打印进度信息。
- 等待下载任务完成,并在下载完成后显示一个SnackBar通知用户文件已下载。
请注意,easy_downloader
插件的具体API可能会随着版本的更新而有所变化,因此建议查阅最新的官方文档以获取最准确的信息。