Flutter文件下载插件file_downloader_android的使用
Flutter文件下载插件file_downloader_android的使用
file_downloader_android
是一个用于在 Flutter 应用中进行文件下载的插件。通过该插件,你可以在 Android 平台上实现文件的下载功能。
使用步骤
-
添加依赖
在
pubspec.yaml
文件中添加以下依赖:dependencies: file_downloader: ^1.0.0
-
初始化插件
首先需要初始化下载器并设置进度监听器。你可以创建一个类继承自
DownloaderAndroidProgress
来处理进度更新。import 'package:file_downloader/api_generated.dart'; import 'package:file_downloader/file_downloader.dart'; import 'dart:developer' as developer; // 设置进度监听器 DownloaderAndroidProgress.setup(FlutterDownloadProgressImpl()); class FlutterDownloadProgressImpl extends DownloaderAndroidProgress { FlutterDownloadProgressImpl(); [@override](/user/override) void progress(String url, int sofarBytes, int totalBytes) { developer.debugPrint("flutter progress:$sofarBytes/$totalBytes"); } }
-
下载文件
使用
DownloaderAndroid().download
方法来启动文件下载。你需要提供下载 URL 和保存路径。void startDownload() async { String url = "http://kodo.hss01248.tech/apk/AppManager_v3.1.3.apk?v=2"; String path = ""; // 空字符串表示默认路径 DownloaderAndroid().download(url, path).then((value) { developer.debugPrint(value.toString()); BaseApiResponse response = BaseApiResponse.fromMap(value); if (response.success) { developer.debugPrint("下载成功!"); } else { developer.debugPrint("下载失败!"); } }).catchError((error) { developer.debugPrint("下载过程中发生错误:$error"); }); }
-
取消下载
如果需要取消正在进行的下载,可以使用
DownloaderAndroid().cancel
方法。同样需要提供下载 URL。void cancelDownload() async { String url = "http://kodo.hss01248.tech/apk/AppManager_v3.1.3.apk?v=2"; DownloaderAndroid().cancel(url).then((value) { developer.debugPrint(value.toString()); BaseApiResponse response = BaseApiResponse.fromMap(value); if (response.success) { developer.debugPrint("取消下载成功!"); } else { developer.debugPrint("取消下载失败!"); } }).catchError((error) { developer.debugPrint("取消下载过程中发生错误:$error"); }); }
完整示例代码
以下是一个完整的 Flutter 应用示例,展示了如何使用 file_downloader_android
插件进行文件下载和取消下载。
import 'package:base_api_response_flutter/base_api_response_flutter.dart';
import 'package:file_downloader/api_generated.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:file_downloader/file_downloader.dart';
import 'flutter_download_progress.dart';
void main() {
runApp(const MyApp());
DownloaderAndroidProgress.setup(FlutterDownloadProgressImpl());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
final _fileDownloaderPlugin = FileDownloader();
[@override](/user/override)
void initState() {
super.initState();
initPlatformState();
}
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initPlatformState() async {
String platformVersion;
// Platform messages may fail, so we use a try/catch PlatformException.
// We also handle the message potentially returning null.
try {
platformVersion =
await _fileDownloaderPlugin.getPlatformVersion() ?? 'Unknown platform version';
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
// If the widget was removed from the tree while the asynchronous platform
// message was in flight, we want to discard the reply rather than calling
// setState to update our non-existent appearance.
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('文件下载插件示例'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: startDownload,
child: Text("下载 APK"),
),
ElevatedButton(
onPressed: cancelDownload,
child: Text("取消下载"),
)
],
),
),
),
);
}
}
// 启动下载
void startDownload() async {
String url = "http://kodo.hss01248.tech/apk/AppManager_v3.1.3.apk?v=2";
String path = "";
DownloaderAndroid().download(url, path).then((value) {
debugPrint(value.toString());
BaseApiResponse response = BaseApiResponse.fromMap(value);
if (response.success) {
debugPrint("下载成功!");
} else {
debugPrint("下载失败!");
}
}).catchError((error) {
debugPrint("下载过程中发生错误:$error");
});
}
// 取消下载
void cancelDownload() async {
String url = "http://kodo.hss01248.tech/apk/AppManager_v3.1.3.apk?v=2";
DownloaderAndroid().cancel(url).then((value) {
debugPrint(value.toString());
BaseApiResponse response = BaseApiResponse.fromMap(value);
if (response.success) {
debugPrint("取消下载成功!");
} else {
debugPrint("取消下载失败!");
}
}).catchError((error) {
debugPrint("取消下载过程中发生错误:$error");
});
}
更多关于Flutter文件下载插件file_downloader_android的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter文件下载插件file_downloader_android的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
file_downloader_android
是一个用于在 Android 平台上进行文件下载的 Flutter 插件。它允许你在 Flutter 应用中轻松地下载文件并管理下载任务。以下是使用该插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 file_downloader_android
插件的依赖。
dependencies:
flutter:
sdk: flutter
file_downloader_android: ^1.0.0 # 请使用最新版本
然后,运行 flutter pub get
以获取依赖。
2. 导入插件
在你的 Dart 文件中导入插件:
import 'package:file_downloader_android/file_downloader_android.dart';
3. 初始化插件
在使用插件之前,建议先初始化它:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await FileDownloaderAndroid.initialize();
runApp(MyApp());
}
4. 下载文件
使用 FileDownloaderAndroid.downloadFile
方法来下载文件。你需要提供文件的 URL 和保存文件的路径。
void downloadFile() async {
String url = 'https://example.com/path/to/your/file.zip';
String savePath = '/storage/emulated/0/Download/file.zip';
try {
await FileDownloaderAndroid.downloadFile(url, savePath);
print('File downloaded successfully');
} catch (e) {
print('Failed to download file: $e');
}
}
5. 监听下载进度(可选)
如果你需要监听下载进度,可以使用 FileDownloaderAndroid.addListener
方法:
FileDownloaderAndroid.addListener((progress) {
print('Download progress: $progress%');
});
6. 取消下载(可选)
如果你需要取消下载任务,可以使用 FileDownloaderAndroid.cancelDownload
方法:
void cancelDownload() async {
await FileDownloaderAndroid.cancelDownload();
print('Download cancelled');
}
7. 删除已下载文件(可选)
如果你需要删除已下载的文件,可以使用 FileDownloaderAndroid.deleteFile
方法:
void deleteFile(String filePath) async {
await FileDownloaderAndroid.deleteFile(filePath);
print('File deleted');
}
完整示例
以下是一个完整的示例,展示了如何使用 file_downloader_android
插件下载文件并监听下载进度:
import 'package:flutter/material.dart';
import 'package:file_downloader_android/file_downloader_android.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await FileDownloaderAndroid.initialize();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('File Downloader Example'),
),
body: Center(
child: ElevatedButton(
onPressed: downloadFile,
child: Text('Download File'),
),
),
),
);
}
void downloadFile() async {
String url = 'https://example.com/path/to/your/file.zip';
String savePath = '/storage/emulated/0/Download/file.zip';
FileDownloaderAndroid.addListener((progress) {
print('Download progress: $progress%');
});
try {
await FileDownloaderAndroid.downloadFile(url, savePath);
print('File downloaded successfully');
} catch (e) {
print('Failed to download file: $e');
}
}
}
注意事项
- 确保你已经在
AndroidManifest.xml
中添加了必要的权限,例如:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />