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

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

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

简介

easy_downloader 是一个快速的下载管理器,允许在多个隔离环境中进行下载,文件被分割成多个片段并使用不同的连接下载每个片段。

特性

  • ✅ 支持恢复、暂停、下载
  • ✅ 支持队列下载
  • ✅ 使用多个连接和进度条在多个隔离环境中下载
  • ✅ 支持通知
  • ✅ 支持下载后打开文件(仅限安卓和iOS)

easy_downloader

入门指南

添加依赖

pubspec.yaml 文件中添加 easy_downloader 依赖:

dependencies:
  easy_downloader: ^0.0.16

激活 easy_downloader

dart pub global activate easy_downloader

初始化插件

Flutter

添加 easy_downloader_flutter_libpubspec.yaml 中:

dependencies:
  easy_downloader_flutter_lib: ^0.0.1

初始化插件:

await EasyDownloader().initFlutter(
      allowNotification: true,
      //notification icon present in android/res/drawable
      defaultIconAndroid: 'download',
);

Dart

EasyDownloader().init();

创建新任务

var url = "https://github.com/linkkader/zanime/releases/download/39/zanime_39.apk";
var name = "test10MB$i";
var path = (await getApplicationDocumentsDirectory()).path;
var task = await downloader.download(
  url: url,
  autoStart: false,
  path: path,
  maxSplit: 1,
  fileName: "${name}easyDownloader",
);

task.addListener((task) {
  //监听所有任务更新
  setState(() {
    // 更新UI
  });
});

task.addSpeedListener((length) {
  //监听速度
  speedTask[task.downloadId] = length;
  setState(() {
    // 更新UI
  });
});

///显示通知(仅在安卓上测试)
task.showNotification();

完整示例代码

以下是一个完整的示例代码,展示如何使用 easy_downloader 进行文件下载:

import 'dart:io';
import 'package:easy_downloader/easy_downloader.dart';
import 'package:path_provider/path_provider.dart';

void main() async {
  var file = File("test.mp4");
  if (file.existsSync()) {
    file.deleteSync();
  }

  await Isar.initializeIsarCore(download: true);
  var isar = await Isar.open(EasyDownloader.schemas, directory: ".");
  var easyDownloader = await EasyDownloader().init(isar: isar);
  
  var dir = Directory("download");
  if (dir.existsSync()) {
    dir.deleteSync(recursive: true);
  }

  var downloadDir = await getApplicationDocumentsDirectory();
  var task = await easyDownloader.download(
    url: "https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4",
    maxSplit: 10,
    path: downloadDir.path,
  );

  task.addListener((task) {
    print(
        "status: ${task.status} ${task.totalDownloaded.toHumanReadableSize()} / ${task.totalLength.toHumanReadableSize()}");
  });

  task.start();
}

额外信息

  • 仅在安卓、iOS 和 macOS 上测试。
  • 如果您的文件较小,有时下载长度可能会超过总长度,这并不是问题。

许可证

Copyright (c) 2021 linkkader

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

这段Markdown文档详细介绍了如何使用 `easy_downloader` 插件进行文件下载,并提供了一个完整的示例代码来帮助开发者快速上手。

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

1 回复

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


当然,以下是一个关于如何在Flutter中使用easy_downloader插件进行文件下载管理的示例代码。这个插件可以帮助你轻松地在Flutter应用中实现文件下载功能。

首先,你需要在你的pubspec.yaml文件中添加easy_downloader依赖:

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

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

接下来,你可以在你的Flutter应用中使用easy_downloader进行文件下载。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:easy_downloader/easy_downloader.dart';
import 'package:path_provider/path_provider.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Easy Downloader Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final EasyDownloader _downloader = EasyDownloader();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Easy Downloader Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _downloadFile,
          child: Text('Download File'),
        ),
      ),
    );
  }

  Future<void> _downloadFile() async {
    // 获取应用文档目录路径
    final Directory appDocDir = await getApplicationDocumentsDirectory();
    final String savePath = '${appDocDir.path}/example.zip';

    // 下载文件
    final DownloadTask task = await _downloader.downloadFile(
      url: 'https://example.com/path/to/your/file.zip',
      savedDir: appDocDir.path,
      fileName: 'example.zip',
      showNotification: true, // 是否显示下载通知
      openFileFromNotification: true, // 是否允许从通知打开文件
    );

    // 监听下载进度
    task.progress.listen((progress) {
      print('Download Progress: ${progress.receivedLength}/${progress.totalLength}');
    });

    // 等待下载完成
    await task.future;

    // 下载完成后,你可以在这里处理文件,比如打开或显示下载完成的通知
    print('File downloaded to $savePath');
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('File downloaded successfully!')),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. pubspec.yaml文件中添加了easy_downloader依赖。
  2. 创建了一个Flutter应用,并在主页面中添加了一个按钮。
  3. 当按钮被点击时,调用_downloadFile方法来下载文件。
  4. 使用getApplicationDocumentsDirectory函数获取应用的文档目录路径,并指定保存文件的名称。
  5. 使用_downloader.downloadFile方法开始下载文件,并传入URL、保存目录、文件名等参数。
  6. 监听下载进度,并在控制台中打印进度信息。
  7. 等待下载任务完成,并在下载完成后显示一个SnackBar通知用户文件已下载。

请注意,easy_downloader插件的具体API可能会随着版本的更新而有所变化,因此建议查阅最新的官方文档以获取最准确的信息。

回到顶部