simple_downloader
一个Flutter包,用于使用http更简单、更轻松地处理文件下载。
入门
在您的Flutter项目中,将依赖项添加到pubspec.yaml中
dependencies:
...
simple_downloader: ^0.0.1
用法
导入包
import 'package:simple_downloader/simple_downloader.dart';
初始化
late SimpleDownloader _downloader;
double _progress = 0.0;
int _offset = 0;
int _total = 0;
DownloadStatus _status = DownloadStatus.undefined;
DownloaderTask _task = const DownloaderTask(
url:
"https://file-examples.com/storage/fe2de9ae4662c61a094f3db/2017/10/file_example_JPG_2500kB.jpg",
fileName: "file_example.jpg",
);
@override
void initState() {
super.initState();
init();
}
Future<void> init() async {
final pathFile = (await path.getExternalStorageDirectory())!.path;
if (!mounted) return;
_task = _task.copyWith(
downloadPath: pathFile,
);
_downloader = SimpleDownloader.init(task: _task);
_downloader.callback.addListener(() {
setState(() {
_progress = _downloader.callback.progress;
_status = _downloader.callback.status;
_total = _downloader.callback.total;
_offset = _downloader.callback.offset;
});
});
}
处置
@override
void dispose() {
_downloader.dispose();
super.dispose();
}
开始下载
_downloader.download();
暂停下载
_downloader.pause();
恢复下载
_downloader.resume();
取消下载
_downloader.cancel();
重试下载
_downloader.retry();
打开已下载文件(仅支持Android)
final isSuccess = (await _downloader.open())!;
if(!isSuccess){
debugPrint("Failed to open downloaded file.");
}
Android 集成
为了处理打开已下载文件的点击操作,您需要添加一些额外的配置。
将以下内容添加到 AndroidManifest.xml
<application>
...
<provider
android:name="adry.app.simple_downloader.FileProvider"
android:authorities="${applicationId}.simple_downloader.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_path"/>
</provider>
<application>
为了打开APK文件,您的应用程序需要REQUEST_INSTALL_PACKAGES权限。
将以下内容添加到 AndroidManifest.xml
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />