Flutter文件下载管理插件http_downloader的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter文件下载管理插件http_downloader的使用

简单地从互联网下载文件并将其保存到设备上的指定位置。

您可以从互联网下载文件,并在下载过程中查看进度。可以根据需要自定义进度条。您可以在下载开始前和下载完成后调整视图。如果您不进行设置,它将保持默认状态。

使用方法

  1. 在需要显示下载进度的地方使用HttpDownloaderWidget()
  2. HttpDownloaderWidget(
    url: 需要下载的文件链接(例如:https://google.com/example.png),
    path: 文件保存的位置(例如:C:\\Users\\YourName\\Desktop),
    fileName: 保存文件的名称(例如:image.png
    ):

示例

如果您执行以下示例,它将具有默认视图。

HttpDownloaderWidget(
  url: "https://google.com/example.png",
  path: "C:\\Users\\YourName\\Desktop",
  fileName: "image.png"
)

您可以这样自定义它。

HttpDownloaderWidget(
  url: "https://google.com/example.png",
  path: "C:\\Users\\YourName\\Desktop",
  fileName: "image.png",
  startDownloadWidget: (download) {
    // 自定义下载按钮
    return ElevatedButton(
      onPressed: download,
      child: Text("下载"),
    );
  },
  downloadingWidget: (progress, downloadedMB, contentMB) {
    // 自定义下载过程中的视图
    return Column(
      children: [
        Text("正在下载.. ${progress.toString()}%", style: TextStyle(color: Colors.black)), // 显示下载进度
        SizedBox(
          width: 400,
          child: LinearProgressIndicator(
            value: progress / 100, // 进度条值
            borderRadius: BorderRadius.circular(10),
            color: Colors.red,
          ),
        ),
        Text("$downloadedMB MB / $contentMB MB", style: TextStyle(color: Colors.amber)), // 显示已下载和总大小
      ],
    );
  },
  downloadedWidget: const Text("下载完成"), // 下载完成后的视图
)

完整示例代码

以下是完整的示例代码,展示了如何在Flutter应用中使用HttpDownloaderWidget

import 'package:flutter/material.dart';
import 'package:http_downloader/http_downloader_widget.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Flutter Demo',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
      ),
      body: const Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            HttpDownloaderWidget(
              url: "https://google.com/example.png",
              path: "C:\\Users\\YourName\\Desktop",
              fileName: "image.png"
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter文件下载管理插件http_downloader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文件下载管理插件http_downloader的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用http_downloader插件进行文件下载管理的示例代码。http_downloader是一个强大的Flutter插件,用于在后台下载文件,并支持断点续传。

首先,确保你的Flutter项目已经添加了http_downloader依赖。在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  http_downloader: ^x.y.z  # 请替换为最新版本号

然后,运行flutter pub get来安装依赖。

接下来,我们编写代码来演示如何使用http_downloader进行文件下载。

1. 初始化下载任务

在Flutter应用中,你可以使用HttpDownloader类来管理下载任务。以下是一个简单的示例,展示了如何创建和启动一个下载任务:

import 'package:flutter/material.dart';
import 'package:http_downloader/http_downloader.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DownloadScreen(),
    );
  }
}

class DownloadScreen extends StatefulWidget {
  @override
  _DownloadScreenState createState() => _DownloadScreenState();
}

class _DownloadScreenState extends State<DownloadScreen> {
  late HttpDownloader downloader;

  @override
  void initState() {
    super.initState();
    downloader = HttpDownloader();
    initPlatformState();
  }

  Future<void> initPlatformState() async {
    if (!await downloader.isPermitted) {
      await downloader.requestPermission();
    }
  }

  void startDownload() async {
    String url = "https://example.com/yourfile.zip";
    String saveDir = (await getApplicationDocumentsDirectory()).path;
    String fileName = "yourfile.zip";
    String savePath = "$saveDir/$fileName";

    DownloadTask task = downloader.createDownloadTask(
      taskId: "your_task_id",
      url: url,
      savedDir: saveDir,
      fileName: fileName,
      headers: {}, // 可选:添加请求头
      showNotification: true, // 是否显示通知
      requiredStoragePermission: true, // 是否需要存储权限
    );

    try {
      await task.start(
        onReceiveProgress: (receivedBytes, totalBytes) {
          // 更新下载进度
          double progress = receivedBytes / totalBytes;
          print("Download progress: ${progress * 100}%");
        },
      );
      print("Download completed: $savePath");
    } catch (e) {
      print("Download failed: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('File Download Manager'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: startDownload,
          child: Text('Start Download'),
        ),
      ),
    );
  }
}

2. 处理下载状态

你可以通过监听下载任务的状态来获取下载进度、处理下载完成或失败的情况。例如,使用task.getStatus()来获取下载任务的当前状态。

void checkDownloadStatus() async {
  String taskId = "your_task_id";
  DownloadTaskStatus status = await downloader.getTaskStatus(taskId);

  switch (status) {
    case DownloadTaskStatus.pending:
      print("Download is pending");
      break;
    case DownloadTaskStatus.running:
      print("Download is running");
      break;
    case DownloadTaskStatus.completed:
      print("Download completed");
      break;
    case DownloadTaskStatus.paused:
      print("Download paused");
      break;
    case DownloadTaskStatus.cancelled:
      print("Download cancelled");
      break;
    case DownloadTaskStatus.failed:
      print("Download failed");
      break;
    case DownloadTaskStatus.unknown:
      print("Unknown download status");
      break;
  }
}

3. 取消下载任务

你可以通过调用task.cancel()来取消下载任务:

void cancelDownload() async {
  String taskId = "your_task_id";
  await downloader.cancelTask(taskId);
  print("Download task cancelled");
}

4. 重启下载任务

如果你需要重启一个已经失败或取消的下载任务,你可以重新调用task.start()方法。

注意事项

  • 请确保你已经在Android和iOS项目中配置了必要的权限,特别是存储权限。
  • 在实际应用中,你可能需要更复杂的UI来展示下载进度、错误处理等。
  • http_downloader插件提供了丰富的API来处理各种下载场景,建议查阅其官方文档以获取更多信息。

以上是一个基本的示例,展示了如何在Flutter项目中使用http_downloader插件进行文件下载管理。你可以根据实际需求进行扩展和定制。

回到顶部