flutter_downloader插件下载文件打开问题

flutter_downloader插件的问题

flutter_downloader插件的下载地址

flutter_downloader

flutter_downloader的open方法不能再下载完成后打开

解决方法:由于下载太快,某些通知没有完成,所以实际上并没完成收尾工作,所以打不开。只需要Sleep 1s就可以了

这是监听的代码

 void initState() {
    super.initState();
    IsolateNameServer.registerPortWithName(
        _port.sendPort, 'downloader_send_port');

    _port.listen((dynamic data) async {
      DownloadTaskStatus status = data[1];
      if (status == DownloadTaskStatus.complete) {
        //程序休眠1s,保证下载事项处理完成
        sleep(Duration(seconds: 1));
        await PermissionUtil.getPermission(Permission.storage);
        Fluttertoast.showToast(msg: '下载成功,保存在${await Paths.downloadPath()}');
        FlutterDownloader.open(taskId: data[0]);
      } else if (status == DownloadTaskStatus.failed) {
        Fluttertoast.showToast(msg: '下载失败');
      }
    });
  }

这是回调,记住一定要是静态函数

static void downloadCallback(
      String id, DownloadTaskStatus status, int progress) {
    final SendPort send =
        IsolateNameServer.lookupPortByName('downloader_send_port');
    send.send([id, status, progress]);
  }

别忘了释放

  @override
  void dispose() {
    super.dispose();
    IsolateNameServer.removePortNameMapping('downloader_send_port');
  }

flutter_downloader下载完成之后默认打开的应用选择不正确

这个问题困扰了我一段时间,我以为flutter_downloader是通过打表来做到解析用什么应用来打开的,但是查看源码发现不是。

通过源码TaskDao类,可以看到这个mimetype是从数据库取得的
在这里插入图片描述
而数据库内容则是在TaskDao类的updateTask方法中存入的

追踪下去,发现调用updateTask的时候的传参是contentType
在这里插入图片描述
而contentType的来源是通过http请求的回复确定的
在这里插入图片描述
所以只需要后端把content-Type的值改成所需要打开的内容的值就可以了

附录

下面列出几种常用的content-type

种类后缀content-type
word文档doc/docxapplication/msword
excel文档xls/xlsxapplication/vnd.ms-excel
ppt演示文稿ppt/pptxapplication/vnd.ms-powerpoint
压缩文件zip/rar/gzipapplication/x-gzip
安装包apkapplication/vnd.android.package-archive
图片png/jpg/jpeg/gif/…image/*
视频mp4/rmvb/…video/*
文本txt/…text/plain
文本chmapplication/x-chm
flutter_downloader是一个用于在Flutter应用程序中进行文件下载插件。它提供了一种简单而强大的方式来管理和监控文件下载任务。 使用flutter_downloader,你可以轻松地添加文件下载功能到你的Flutter应用程序中。它支持多个平台,包括Android和iOS,并且提供了一组易于使用的API来管理下载任务。 要使用flutter_downloader,首先需要在你的Flutter项目中添加依赖。在pubspec.yaml文件中,添加以下内容: ``` dependencies: flutter_downloader: ^1.6.0 ``` 然后运行`flutter pub get`命令来获取依赖。 接下来,在你的代码中导入flutter_downloader包,并使用它来创建和管理下载任务。你可以使用`FlutterDownloader.enqueue`方法来创建一个下载任务,并传递下载链接、保存路径等参数。你还可以使用`FlutterDownloader.open`方法来打开下载文件。 以下是一个简单的示例代码,演示了如何使用flutter_downloader进行文件下载: ```dart import 'package:flutter/material.dart'; import 'package:flutter_downloader/flutter_downloader.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('File Downloader'), ), body: Center( child: RaisedButton( child: Text('Download File'), onPressed: () { _startDownload(); }, ), ), ), ); } void _startDownload() async { String url = 'https://example.com/file.pdf'; String savedDir = '/storage/emulated/0/Download'; await FlutterDownloader.enqueue( url: url, savedDir: savedDir, showNotification: true, openFileFromNotification: true, ); } } ``` 这是一个简单的示例,当用户点击按钮时,会触发文件下载任务。下载文件将保存在指定的目录中,并且会显示下载通知。用户可以通过通知来打开下载文件
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值