Flutter - 如何在 IOS 上保存文件

Raf*_*nda 7 ios flutter

在 Android 上,我可以使用 package 下载 Downloads 文件夹中的 pdf 文件downloads_path_provider,但在 IOS 上,我使用这个 package 出错。如果我使用getApplicationDocumentsDirectory()我得到路径:/var/mobile/Containers/Data/Application/EBB52CAB-7783-489A-B9C4-4BB7A093B8C3/Documents 我想把下载文件放在 iphone 的文件中 在此处输入图片说明

Har*_*shi 12

您应该使用Path Provider而不是访问设备上的下载目录,它是官方的 Flutter 插件,并且易于使用。

Path Provider使用以下命令访问存储上的 Document 目录:

 Directory documents = await getApplicationDocumentsDirectory();
Run Code Online (Sandbox Code Playgroud)

这将允许您将文件存储在文档存储中,您可能需要添加访问存储的权限。

对于安卓使用:

 Directory documents = await getExternalStorageDirectory();
Run Code Online (Sandbox Code Playgroud)

请记住,用户可以看到上述两个目录。

  • 我发现了另一个问题[链接](/sf/ask/3865442871/)它解释了如何做到这一点,它现在可以工作,但它也将其他文件与我想要保存的pdf文件一起保存,我不知道为什么...... (3认同)

mc1*_*00p 8

<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
<key>UIFileSharingEnabled</key>
<true/>
Run Code Online (Sandbox Code Playgroud)

在撰写本文时,添加了这些键并尝试了很多事情。对我来说,解决方案当然是添加这两个键并使用 iOS 14(确切地说是 14.1)而不是 iOS 15。这是因为 iOS 15 由于某种原因不支持下载并存储在模拟器的下载文件夹中。

  • 添加到info.plist: &lt;key&gt;UISupportsDocumentBrowser&lt;/key&gt; &lt;true/&gt; &lt;key&gt;LSSupportsOpeningDocumentsInPlace&lt;/key&gt; &lt;true/&gt; &lt;key&gt;UIFileSharingEnabled&lt;/key&gt; &lt;true/&gt; (5认同)

Igo*_*off 5

获取路径

要访问 Document 目录,您应该使用 Flutter 插件来查找文件系统上的常用位置。最受欢迎的是path_provider

iOS 文件应用

对于用户设备上“文件”应用程序内应用程序文件夹中的下载文件,您应该更新 info.plist。

UISupportsDocumentBrowser (Boolean - iOS) 指定应用程序是基于文档的应用程序并使用 UIDocumentBrowserViewController 类。

如果此键设置为 YES,用户可以在设置中设置文档浏览器的默认保存位置。此外,本地文件提供程序授予对应用程序文档目录中所有文档的访问权限。这些文档显示在“文件”应用程序和文档浏览器中。用户可以就地打开和编辑这些文档。

iOS 11 及更高版本支持此密钥。

有关更多信息,请阅读文档:https : //developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW37