Flutter 下载文件操作

Posted 会煮咖啡的猫咪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flutter 下载文件操作相关的知识,希望对你有一定的参考价值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5dCIPdBm-1635860443089)(https://ducafecat.tech/2021/11/03/translation/downloading-a-file-in-flutter/2021-11-02-21-06-58.png)]

原文在这里插入代码片

https://medium.com/halkbank-mobile-tech/downloading-a-file-in-flutter-d6762825c0a4

代码

https://github.com/deremakif/FlowderSample

参考

  • https://pub.dev/packages/path_provider
  • https://pub.dev/packages/flutter_downloader
  • https://pub.dev/packages/flowder
  • https://pub.dev/packages/open_file
  • https://pub.dev/packages/percent_indicator

正文

今天我要写一篇关于 flowder package 的文章。我用它从服务器上下载文件。有很多方法可以做到这一点,而且还有更受欢迎的软件包如 flutter_downloader 。但我更喜欢 flowder 软件包,因为它的实现很简单。

首先,如果下载文件夹不存在,我们应该创建它。要做到这一点,我们需要导入 path_provider package。并在当前页的 initState() 中调用 initPlatformState 方法。

Future<void> initPlatformState() async {
    _setPath();
    if (!mounted) return;
}void _setPath() async {
    Directory _path = await getApplicationDocumentsDirectory();
    String _localPath = _path.path + Platform.pathSeparator + 'Download';
    final savedDir = Directory(_localPath);
    bool hasExisted = await savedDir.exists();
    if (!hasExisted) {
        savedDir.create();
    }
    path = _localPath;
}

现在,我们有下载文件夹来保存文件。包的下载方法需要两个参数: URL 和选项。您可以根据需要自定义选项。

ElevatedButton(
    onPressed: () async {
      options = DownloaderUtils(
          progressCallback: (current, total) {
              final progress = (current / total) * 100;
              print('Downloading: $progress');
          },
          file: File('$path/loremipsum.pdf'),
          progress: ProgressImplementation(),
          onDone: () {
              OpenFile.open('$path/loremipsum.pdf');
          },
          deleteOnCancel: true,
      ); core = await Flowder.download(
             "https://assets.website-files.com/603d0d2db8ec32ba7d44fffe/603d0e327eb2748c8ab1053f_loremipsum.pdf",
             options,
           );
},

我使用 OpenFile package 包在文件完成下载过程时打开它。我还使用了 percent_indicator package 包来显示进展。

如果以后不需要使用该文件,可以在关闭文档后删除该文件。重要的是不要增加应用程序的大小。

OpenFile.open('$path/loremipsum.pdf').then((value) {
    File f = File('$path/loremipsum.pdf');
    f.delete();
});
  • 应用程序演示

示例项目的源代码。

  • GitHub - deremakif/FlowderSample
    https://github.com/deremakif/FlowderSample

© 猫哥

  • https://ducafecat.tech/

  • https://github.com/ducafecat

  • 微信群 ducafecat

以上是关于Flutter 下载文件操作的主要内容,如果未能解决你的问题,请参考以下文章

错误记录Flutter 混合开发获取 BinaryMessenger 报错 ( FlutterActivityAndFragmentDelegate.getFlutterEngine() )(代码片段

在 webview_flutter 中启用捏合和缩放,在哪里添加代码片段 [this.webView.getSettings().setBuiltInZoomControls(true);]

Flutterflutter doctor 报错Android license status unknown. Run `flutter doctor --android-licenses‘(代码片段

flutter解决 dart:html 只支持 flutter_web 其他平台编译报错 Avoid using web-only libraries outside Flutter web(代码片段

Flutter 报错 DioError [DioErrorType.DEFAULT]: Bad state: Insecure HTTP is not allowed by platform(代码片段

Flutter 布局备忘录