Flutter如何实现文件下载功能(去除广告和推广)
在Flutter中如何实现文件下载功能?需要支持常见的文件类型如PDF、图片等,并且要能够显示下载进度。另外,希望下载过程中不要出现广告或推广内容,有没有纯净的解决方案?最好能提供完整的代码示例和注意事项。
2 回复
在Flutter中实现文件下载功能,可以通过以下步骤完成:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
flutter_downloader: ^1.10.2
permission_handler: ^10.2.0
2. 配置权限
Android:
在 android/app/src/main/AndroidManifest.xml 中添加:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
iOS:
在 ios/Runner/Info.plist 中添加:
<key>NSDownloadsFolderUsageDescription</key>
<string>需要下载文件到下载目录</string>
3. 初始化与请求权限
import 'package:flutter_downloader/flutter_downloader.dart';
import 'package:permission_handler/permission_handler.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await FlutterDownloader.initialize();
runApp(MyApp());
}
// 请求存储权限
Future<bool> _requestPermission() async {
var status = await Permission.storage.status;
if (status.isGranted) {
return true;
} else {
status = await Permission.storage.request();
return status.isGranted;
}
}
4. 实现下载功能
Future<void> downloadFile(String url, String fileName) async {
if (await _requestPermission()) {
final taskId = await FlutterDownloader.enqueue(
url: url,
savedDir: (await getExternalStorageDirectory())!.path,
fileName: fileName,
showNotification: true,
openFileFromNotification: true,
);
}
}
5. 监听下载状态
void _bindBackgroundCallback() {
FlutterDownloader.registerCallback(downloadCallback);
}
static void downloadCallback(String id, DownloadTaskStatus status, int progress) {
// 处理下载状态更新
}
关键说明:
- 使用
flutter_downloader处理下载任务 - 通过
permission_handler管理存储权限 - 支持后台下载和进度监控
- 下载路径使用
getExternalStorageDirectory获取
此实现完全基于开源库,无任何广告或推广内容。记得在下载完成后及时取消监听,并在 dispose 中调用 FlutterDownloader.cancel 清理资源。


