Flutter 在本机应用程序中打开本地资源(PDF)

2023-12-07

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

我努力了:

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

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

该文件确实存在,并且我可以从 Web URL 打开 PDF。

这是 flutter 可以做的事情吗?


2019 年 12 月 8 日更新

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

所以最后我将本机方面的代码包装到一个 flutter 插件中,然后在 flutter 中进行 UX。这就是背景故事,这是我一起编写的技术规格:

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

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

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

编辑:有人提到要使用 url_launcher 和 open_file 的组合。它们非常适合外部文件,但不适用于捆绑资源。


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

  1. install 网址启动器 and 简单权限
  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';
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter 在本机应用程序中打开本地资源(PDF) 的相关文章

  • Dart 流 .asBroadcastStream 内存泄漏

    在我们的 Flutter 应用程序中 我们存在内存泄漏和流未关闭的情况 我们追踪源代码如下 Rx combineLatest asBroadcastStream RxDart的结果 combineLatest 是单订阅流 添加 asBroa
  • 如何更改文本字段颤动内部的值?

    我有一个TextEditingController如果用户单击按钮 它就会填写信息 我似乎不知道如何更改 a 中的文本Textfield or TextFormField 有解决办法吗 只需更改text财产 TextField contro
  • 更改语言 Flutter 的按钮

    我正在 Flutter 中构建一个应用程序 到目前为止 我正在使用 JSON 国际化 其中应用程序的语言基于用户手机中默认的语言 它工作得很好 但我想给用户有机会在不更改手机系统语言设置的情况下更改语言 只需单击按钮 然后应用程序即可更改语
  • Flutter:一张带有圆形头像的卡片,非常引人注目

    我想做一张卡片CircleAvatar 突出显示 您可以在这张图片中看到详细信息 我不知道它是如何工作的 我尝试了一些Stack和定位小部件 但它不起作用 Stack确实是解决方案 Stack children
  • ListView 和快照 - 错误 - 错误状态:DocumentSnapshotPlatform 中不存在字段[重复]

    这个问题在这里已经有答案了 我对快照和 ListView 有一个小问题 到目前为止 它运行得很好 但自从我更新了 flutter 和 Dart 后 我 收到了一个错误 构建 StreamBuilder gt 时抛出以下 StateError
  • 如何更改 Flutter 中的默认字体系列

    如何更改应用程序的每个文本以使用特定字体 我可以使用以下命令单独更改它们TextStyle 但如何让我的应用程序默认使用特定字体 你能告诉我怎么做吗 您可以按照以下步骤更改 Flutter 应用程序的默认字体系列 1 将字体文件添加到项目文
  • 如何在flutter项目中使用http拦截器?

    我必须向我的所有 Api 添加标头 有人告诉我为此使用 http 拦截器 但我无法理解如何做到这一点 因为我是颤振的新手 谁能帮我举个例子吗 您可以使用http 拦截器 https pub dev packages http interce
  • 如何在flutter中绕过SSL证书验证?

    如何在flutter中绕过SSL证书验证 错误 握手异常 客户端中的握手错误 操作系统错误 CERTIFICATE VERIFY FAILED 自签名证书 handshake cc 345 您需要配置 HttpService 以使用自签名
  • NestedScrollView 与 ListView 中的粘性选项卡

    布局按预期工作 但以下情况除外 当我滚动一页时 第二页也会滚动 没有那么多 但足以掩盖第一个项目 我可以想象它与 NestedScrollView 有关 但我不知道如何继续 import package flutter material d
  • 如何更改 ElevatedButton 颜色或阴影 Flutter

    我当时用的是RaisedButton直到 Flutter 弃用了它 我们不能再使用它了 有一个建议说 使用ElevatedButton相反 所以我尝试使用它 但我看不到类似的属性color elevation focusColor etc
  • 如何在Flutter中使用多个ChangeNotifierProvider?

    我最近开始使用provider对于我的状态管理 我知道如何一次使用一个 class Home extends StatelessWidget override Widget build BuildContext context return
  • 自定义卡片形状 Flutter SDK

    我在 Flutter 上使用 GridView 开发了一个应用程序 GridView 项目是卡片 默认卡片形状是半径为 4 的矩形 我知道 Card Widget 有 shape 属性 并且它需要 ShapeBorder 类 但我无法找到如
  • flutter 中 sqlite 中的多个参数

    我想知道如何将多个参数传递给 sqllite 中的原始查询 我的代码如下 query async get a reference to the database Database db await DatabaseHelper instan
  • 扑。应用程序不会崩溃并发送崩溃报告

    我已经集成了Firebase Crashlytics在我的应用程序中 我正在测试 Android 应用程序 我强迫崩溃来检查它 if true List arr throw arr 1 2 我的问题是应用程序不会崩溃 我只是在日志中得到这个
  • 配置根项目“firebase_auth”时出现问题

    my error 我无法构建 apk 发布文件 我完成了应用程序一段时间 没有出现错误 几天后 我在构建应用程序时收到此错误 请告诉我如何摆脱它 我尝试了 4 个小时 什么也没得到 FAILURE Build failed with an
  • Flutter http请求上传mp3文件

    我使用这个 api 上传 mp3 文件 使用这种方法 Future
  • Flutter:将字符串转换为 Map

    我正在使用 SQFlite 在本地存储数据 我有一个表 其中有一个名为 json 的字段 该字段的类型为 TEXT 并存储转换为字符串的 json 例如 name Eduardo Age 23 性别男 到目前为止 一切正常 但随后我需要从数
  • Dart 从 UInt8List 获取扩展

    我正在使用该包图像选择器 https pub dev packages image picker接受来自用户的图像 这会产生 PickedFile 和字节数组 由于图像随后被上传 我想知道如何从字节数组中猜测 mime 类型 PickedF
  • 颤振轮播图像滑块在点击事件期间打开单独的页面被调用

    我是新来的 我想问一个关于我的代码的问题 我查看了 youtube 和一些关于这个 inkwell 的 google 教程 以及点击功能来在 flutter 上打开新的类活动 但结果是 当点击图像时 它会打开不同的图像屏幕 但它们共享相同的
  • Flutter Web 崩溃并显示无法打开文件 client.js

    我可以就这个错误请求你的帮助吗 当我第一次尝试使用 flutter run d chrome 运行 flutter web 时会发生这种情况 Launching lib main dart on Chrome in debug mode S

随机推荐