Download 下载文件在颤振

Download 下载文件在颤振,download,flutter,Download,Flutter,我制作了一个flatter应用程序,首先我显示了关于pdf文件的所有信息,包括文件的url、提交表单Restfull API,一切都很好,但我想在用户单击该文件时下载该文件,我尝试了以下方法: onTap: () async { // downloadFile(snapshot.data[index].file); Dio dio = new Dio();

我制作了一个flatter应用程序,首先我显示了关于pdf文件的所有信息,包括文件的url、提交表单Restfull API,一切都很好,但我想在用户单击该文件时下载该文件,我尝试了以下方法:

 onTap: () async {
                                // downloadFile(snapshot.data[index].file);
                                Dio dio = new Dio();
                                Directory dir =
                                    await getApplicationDocumentsDirectory();
                                String path = dir.path;
                                await dio.download(
                                    snapshot.data[index].file, path);
                              },
snapshot.data[index].file,path是正确的路径或来自api的文件,但不起作用,请在此代码中给我一个(path)错误

await getApplicationDocumentsDirectory();
String path = dir.path;

this is my error log:

E/flutter (26482): [ERROR:flutter/shell/common/shell.cc(188)] Dart Error: Unhandled exception:
E/flutter (26482): FileSystemException: Cannot open file, path = '/data/data/com.example.mis/app_flutter' (OS Error: Is a
directory, errno = 21)
E/flutter (26482): #0      _File.throwIfError (dart:io/file_impl.dart:647:7)
E/flutter (26482): #1      _File.openSync (dart:io/file_impl.dart:491:5)
E/flutter (26482): #2      Dio.download (package:dio/src/dio.dart:212:20)
E/flutter (26482): <asynchronous suspension>
E/flutter (26482): #3      MaterialsState.build.<anonymous closure>.<anonymous closure>.<anonymous closure>
(package:mis/courses/materials.dart:121:47)
E/flutter (26482): <asynchronous suspension>
E/flutter (26482): #4      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)
E/flutter (26482): #5      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:562:30)
E/flutter (26482): #6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)
E/flutter (26482): #7      TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)
E/flutter (26482): #8      TapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:204:7)
E/flutter (26482): #9      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27)
E/flutter (26482): #10     _WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent
(package:flutter/src/gestures/binding.dart:184:20)
E/flutter (26482): #11     _WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent
(package:flutter/src/gestures/binding.dart:158:22)
E/flutter (26482): #12     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerEvent
(package:flutter/src/gestures/binding.dart:138:7)
E/flutter (26482): #13     _WidgetsFlutterBinding&BindingBase&GestureBinding._flushPointerEventQueue
(package:flutter/src/gestures/binding.dart:101:7)
E/flutter (26482): #14     _WidgetsFlutterBinding&BindingBase&GestureBinding._handlePointerDataPacket
(package:flutter/src/gestures/binding.dart:85:7)
E/flutter (26482): #15     _invoke1 (dart:ui/hooks.dart:159:13)
E/flutter (26482): #16     _dispatchPointerDataPacket (dart:ui/hooks.dart:113:5)
等待getApplicationDocumentsDirectory();
字符串路径=dir.path;
这是我的错误日志:
E/flatter(26482):[错误:flatter/shell/common/shell.cc(188)]省道错误:未处理的异常:
E/flatter(26482):文件系统异常:无法打开文件,路径='/data/data/com.example.mis/app_flatter'(操作系统错误:是错误)
目录,errno=21)
E/flatter(26482):#0文件.throwiferor(dart:io/File_impl.dart:647:7)
E/flatter(26482):#1 _File.openSync(dart:io/File_impl.dart:491:5)
E/flatter(26482):#2 Dio.download(包:Dio/src/Dio.dart:212:20)
E/颤振(26482):
E/颤振(26482):#3材料状态。构建。。。
(套餐:mis/课程/材料。dart:121:47)
E/颤振(26482):
E/颤振(26482):#4(InkResponseEstate.)(handleTap)(包装:颤振/src/材料/墨水)井。省道:507:14)
E/flatter(26482):#5#InkResponseState.build。(包装:颤振/src/材料/墨水井。省道:562:30)
E/flatter(26482):#6 GestureRecognitizer.invokeCallback(包:flatter/src/signatures/recognizer.dart:102:24)
E/flatter(26482):#7 TapGestureRecognitor.#检查(软件包:flatter/src/signatures/tap.dart:242:9)
E/flatter(26482):#8 TapGestureRecognizer.AcceptPirse(包:flatter/src/pirses/tap.dart:204:7)
E/flatter(26482):#9 GestureArenaManager.sweep(包:flatter/src/signatures/arena.dart:156:27)
E/颤振(26482):#10#WidgetsFlutterBinding&BindingBase&GestureBinding.handleEvent
(包装:颤振/src/signatures/binding.dart:184:20)
E/flatter(26482):35; 11_WidgetsFlutterBinding&BindingBase&GestureBinding.dispatchEvent
(包装:颤振/src/signatures/binding.dart:158:22)
E/颤振(26482):#12#WidgetsFlutterBinding&BindingBase&GestureBinding.#手点事件
(包装:颤振/src/signatures/binding.dart:138:7)
E/颤振(26482):#13#WidgetsFlutterBinding&BindingBase&GestureBinding.#flushPointerEventQueue
(包装:颤振/src/signatures/binding.dart:101:7)
E/Flatter(26482):#14#WidgetsFlutterBinding&BindingBase&GestureBinding.#handlePointerDataPacket.#
(包装:颤振/src/signatures/binding.省道:85:7)
E/flatter(26482):#15_调用1(省道:ui/hooks.省道:159:13)
E/flatter(26482):#16 dispatchPointerDataPacket(dart:ui/hooks.dart:113:5)

是否有其他方法下载文件?或者干脆打开它?非常感谢

以防其他人需要。
问题是您没有将文件路径作为参数传递,而是传递了一个目录

await dio.download(snapshot.data[index].file, path+'/fileName.pdf');  

这应该可以解决问题。

在颤振上使用插件文件支持

未来下载文件异步{
文件=等待文件支持(url:)http://test.com/.mp4");
返回文件;
}

请发布错误日志。是的,还有另外一种方法,您可以使用专门为创建和管理下载任务而设计的[Flatter_downloader]插件。支持iOS和Android。谢谢,我会试试的,我会在帖子中添加错误
Future<File> downloadFile async{
File file =await FileSupport(url:"http://test.com/.mp4");
 return file;
}