Flutter文件下载插件file_downloader_android的使用

Flutter文件下载插件file_downloader_android的使用

file_downloader_android 是一个用于在 Flutter 应用中进行文件下载的插件。通过该插件,你可以在 Android 平台上实现文件的下载功能。

使用步骤

  1. 添加依赖

    pubspec.yaml 文件中添加以下依赖:

    dependencies:
      file_downloader: ^1.0.0
    
  2. 初始化插件

    首先需要初始化下载器并设置进度监听器。你可以创建一个类继承自 DownloaderAndroidProgress 来处理进度更新。

    import 'package:file_downloader/api_generated.dart';
    import 'package:file_downloader/file_downloader.dart';
    import 'dart:developer' as developer;
    
    // 设置进度监听器
    DownloaderAndroidProgress.setup(FlutterDownloadProgressImpl());
    
    class FlutterDownloadProgressImpl extends DownloaderAndroidProgress {
    
      FlutterDownloadProgressImpl();
    
      [@override](/user/override)
      void progress(String url, int sofarBytes, int totalBytes) {
        developer.debugPrint("flutter progress:$sofarBytes/$totalBytes");
      }
    }
    
  3. 下载文件

    使用 DownloaderAndroid().download 方法来启动文件下载。你需要提供下载 URL 和保存路径。

    void startDownload() async {
      String url = "http://kodo.hss01248.tech/apk/AppManager_v3.1.3.apk?v=2";
      String path = ""; // 空字符串表示默认路径
    
      DownloaderAndroid().download(url, path).then((value) {
        developer.debugPrint(value.toString());
        BaseApiResponse response = BaseApiResponse.fromMap(value);
        if (response.success) {
          developer.debugPrint("下载成功!");
        } else {
          developer.debugPrint("下载失败!");
        }
      }).catchError((error) {
        developer.debugPrint("下载过程中发生错误:$error");
      });
    }
    
  4. 取消下载

    如果需要取消正在进行的下载,可以使用 DownloaderAndroid().cancel 方法。同样需要提供下载 URL。

    void cancelDownload() async {
      String url = "http://kodo.hss01248.tech/apk/AppManager_v3.1.3.apk?v=2";
    
      DownloaderAndroid().cancel(url).then((value) {
        developer.debugPrint(value.toString());
        BaseApiResponse response = BaseApiResponse.fromMap(value);
        if (response.success) {
          developer.debugPrint("取消下载成功!");
        } else {
          developer.debugPrint("取消下载失败!");
        }
      }).catchError((error) {
        developer.debugPrint("取消下载过程中发生错误:$error");
      });
    }
    

完整示例代码

以下是一个完整的 Flutter 应用示例,展示了如何使用 file_downloader_android 插件进行文件下载和取消下载。

import 'package:base_api_response_flutter/base_api_response_flutter.dart';
import 'package:file_downloader/api_generated.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:file_downloader/file_downloader.dart';
import 'flutter_download_progress.dart';

void main() {
  runApp(const MyApp());
  DownloaderAndroidProgress.setup(FlutterDownloadProgressImpl());
}

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final _fileDownloaderPlugin = FileDownloader();

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    String platformVersion;
    // Platform messages may fail, so we use a try/catch PlatformException.
    // We also handle the message potentially returning null.
    try {
      platformVersion =
          await _fileDownloaderPlugin.getPlatformVersion() ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('文件下载插件示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: startDownload,
                child: Text("下载 APK"),
              ),
              ElevatedButton(
                onPressed: cancelDownload,
                child: Text("取消下载"),
              )
            ],
          ),
        ),
      ),
    );
  }
}

// 启动下载
void startDownload() async {
  String url = "http://kodo.hss01248.tech/apk/AppManager_v3.1.3.apk?v=2";
  String path = "";

  DownloaderAndroid().download(url, path).then((value) {
    debugPrint(value.toString());
    BaseApiResponse response = BaseApiResponse.fromMap(value);
    if (response.success) {
      debugPrint("下载成功!");
    } else {
      debugPrint("下载失败!");
    }
  }).catchError((error) {
    debugPrint("下载过程中发生错误:$error");
  });
}

// 取消下载
void cancelDownload() async {
  String url = "http://kodo.hss01248.tech/apk/AppManager_v3.1.3.apk?v=2";

  DownloaderAndroid().cancel(url).then((value) {
    debugPrint(value.toString());
    BaseApiResponse response = BaseApiResponse.fromMap(value);
    if (response.success) {
      debugPrint("取消下载成功!");
    } else {
      debugPrint("取消下载失败!");
    }
  }).catchError((error) {
    debugPrint("取消下载过程中发生错误:$error");
  });
}

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

1 回复

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


file_downloader_android 是一个用于在 Android 平台上进行文件下载的 Flutter 插件。它允许你在 Flutter 应用中轻松地下载文件并管理下载任务。以下是使用该插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 file_downloader_android 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  file_downloader_android: ^1.0.0  # 请使用最新版本

然后,运行 flutter pub get 以获取依赖。

2. 导入插件

在你的 Dart 文件中导入插件:

import 'package:file_downloader_android/file_downloader_android.dart';

3. 初始化插件

在使用插件之前,建议先初始化它:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await FileDownloaderAndroid.initialize();
  runApp(MyApp());
}

4. 下载文件

使用 FileDownloaderAndroid.downloadFile 方法来下载文件。你需要提供文件的 URL 和保存文件的路径。

void downloadFile() async {
  String url = 'https://example.com/path/to/your/file.zip';
  String savePath = '/storage/emulated/0/Download/file.zip';

  try {
    await FileDownloaderAndroid.downloadFile(url, savePath);
    print('File downloaded successfully');
  } catch (e) {
    print('Failed to download file: $e');
  }
}

5. 监听下载进度(可选)

如果你需要监听下载进度,可以使用 FileDownloaderAndroid.addListener 方法:

FileDownloaderAndroid.addListener((progress) {
  print('Download progress: $progress%');
});

6. 取消下载(可选)

如果你需要取消下载任务,可以使用 FileDownloaderAndroid.cancelDownload 方法:

void cancelDownload() async {
  await FileDownloaderAndroid.cancelDownload();
  print('Download cancelled');
}

7. 删除已下载文件(可选)

如果你需要删除已下载的文件,可以使用 FileDownloaderAndroid.deleteFile 方法:

void deleteFile(String filePath) async {
  await FileDownloaderAndroid.deleteFile(filePath);
  print('File deleted');
}

完整示例

以下是一个完整的示例,展示了如何使用 file_downloader_android 插件下载文件并监听下载进度:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await FileDownloaderAndroid.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('File Downloader Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: downloadFile,
            child: Text('Download File'),
          ),
        ),
      ),
    );
  }

  void downloadFile() async {
    String url = 'https://example.com/path/to/your/file.zip';
    String savePath = '/storage/emulated/0/Download/file.zip';

    FileDownloaderAndroid.addListener((progress) {
      print('Download progress: $progress%');
    });

    try {
      await FileDownloaderAndroid.downloadFile(url, savePath);
      print('File downloaded successfully');
    } catch (e) {
      print('Failed to download file: $e');
    }
  }
}

注意事项

  • 确保你已经在 AndroidManifest.xml 中添加了必要的权限,例如:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
回到顶部