flutter如何实现文件下载

在Flutter中如何实现文件下载功能?我想下载服务器上的文件到本地设备,但不太清楚具体的实现方法。是否需要使用特定插件?下载过程中如何显示进度条?下载完成后文件默认保存在哪个目录?希望能得到详细的代码示例和实现步骤说明。

2 回复

Flutter中实现文件下载可使用dio库。步骤如下:

  1. 添加dio依赖到pubspec.yaml
  2. 使用dio.download()方法,传入文件URL和保存路径。
  3. 可选添加进度监听和错误处理。
  4. 注意申请存储权限(Android需WRITE_EXTERNAL_STORAGE)。

更多关于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. 配置权限

Androidandroid/app/src/main/AndroidManifest.xml):

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

iOSios/Runner/Info.plist):

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

3. 请求存储权限

import 'package:permission_handler/permission_handler.dart';

Future<bool> _requestPermission() async {
  var status = await Permission.storage.status;
  if (!status.isGranted) {
    status = await Permission.storage.request();
  }
  return status.isGranted;
}

4. 实现下载功能

import 'package:flutter_downloader/flutter_downloader.dart';

void downloadFile(String url, String fileName) async {
  final hasPermission = await _requestPermission();
  if (!hasPermission) return;

  final taskId = await FlutterDownloader.enqueue(
    url: url,
    savedDir: (await getExternalStorageDirectory())!.path,
    fileName: fileName,
    showNotification: true,
    openFileFromNotification: true,
  );
}

5. 监听下载状态

void initState() {
  super.initState();
  FlutterDownloader.registerCallback(downloadCallback);
}

static void downloadCallback(String id, DownloadTaskStatus status, int progress) {
  print('Download $id: $status, $progress%');
}

6. 完整示例

ElevatedButton(
  onPressed: () => downloadFile(
    'https://example.com/file.pdf',
    'document.pdf'
  ),
  child: Text('下载文件'),
)

注意事项:

  • 需要真机测试
  • iOS需要配置后台模式
  • 大文件建议添加进度显示
  • 下载路径可根据需要调整

这种方法支持后台下载、通知显示和进度监控,适合大多数下载需求。

回到顶部