Flutter如何实现文件下载功能(去除广告和推广)

在Flutter中如何实现文件下载功能?需要支持常见的文件类型如PDF、图片等,并且要能够显示下载进度。另外,希望下载过程中不要出现广告或推广内容,有没有纯净的解决方案?最好能提供完整的代码示例和注意事项。

2 回复

使用dio库实现文件下载。示例代码:

import 'package:dio/dio.dart';
import 'package:path_provider/path_provider.dart';

void downloadFile(String url, String filename) async {
  Dio dio = Dio();
  var dir = await getApplicationDocumentsDirectory();
  
  await dio.download(
    url,
    '${dir.path}/$filename',
    onReceiveProgress: (received, total) {
      // 更新下载进度
    },
  );
}

需要添加依赖:diopath_provider

更多关于Flutter如何实现文件下载功能(去除广告和推广)的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在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 清理资源。

回到顶部