【问题标题】:Flutter open local asset (PDF) in native applicationFlutter 在本机应用程序中打开本地资产 (PDF)
【发布时间】:2018-12-31 14:25:05
【问题描述】:

我正在尝试将我的应用与 PDF 捆绑在一起,并让用户在本机查看器中打开它。

我试过了:

  • 将 PDF 的数据复制到“临时目录”或“文档目录”(来自 path_provider)并从那里打开
  • 要打开,我使用“url_launcher”打开文件。我尝试使用这两个文件://... urls 并仅传递本地路径,即/.../

文件肯定存在,这两个位置、两个平台上的文件都在应用程序的沙箱中似乎是权限问题。

该文件确实存在,我可以从网址打开 PDF。

这是flutter可以做到的吗?


2019 年 12 月 8 日更新

我刚刚被 SO 告知,这个问题有很多观点,但没有好的答案。对于这个项目,我最终尝试了 Cordova、Flutter、React Native 并最终放弃并创建了两个原生应用程序来完成我需要做的事情。他们工作正常,但客户想要进行大量的用户体验更改。

所以最后我将代码从事物的本机端包装到一个颤振插件中,然后在颤振中进行用户体验。这就是背景故事,这是我一起破解的技术规格:

对于 iOS,有一个在 github 的 iOS 11 中使用他们的 PDF 工具包的示例,我在那里做了一些工作,并且在 repo 中有一堆手动创建的功能,所以我将我想要的 PDF 附加到那个项目,并且写了一个脚本来展示它们,然后使用颤振桥启动。

对于 Android,情况大致相同 - 我将文件从应用程序包(不是颤振资产)复制到临时目录,然后创建一个共享链接并使用本机系统查看器启动 pdf。

总而言之,这是一个庞大的东西,虽然不是 Flutter 的错,就像我说的,我使用了一堆多平台框架,但没有一个能以令人满意的方式完成这项工作。不过,我确信更好的开发人员可以提出可行的解决方案。

编辑:已经提到使用 url_launcher 和 open_file 的组合。它们适用于外部文件,但不适用于捆绑资产。

【问题讨论】:

标签: dart flutter


【解决方案1】:

我不太确定这对您来说是否仍然是个问题。但是因为我想知道同样的事情,所以我试图弄清楚。这是我的结果,但我不得不提一下,我将文件存储在下载文件夹中:

  1. 安装url_launchersimple_permissions
  2. 将以下行添加到您的 AndroidManifest.xml 和相应的 iOS 等效项:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    
  3. 创建pdf的代码:

    SimplePermissions.requestPermission(Permission.WriteExternalStorage);
    String dir = (await getExternalStorageDirectory()).path + "/download";
    String filename = "$dir/" + title;
    File f = new File(filename);
    f.writeAsBytesSync(data);
    
  4. 打开文件的代码

    var url = 'file://' + f.path;
    if (await canLaunch(url)) {
     await launch(url, forceSafariVC: false, forceWebView: false);
    } else {
      throw 'Could not launch $url';
    }
    

【讨论】:

  • url_lancher 将无法成功打开 PDF 文件。将导致android.os.FileUriExposedException
  • 您的示例不像以前的评论者所写的那样工作?你有正确的解决方案吗?
  • 有没有人找到打开本地文件的解决方案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多