Flutter path_provider的使用


Flutter path_provider 的使用

flutter 中获取各平台的存储目录路径,我们都是使用 path_provider,目前提供了 8 种获取目录的方法[2.0.2],每个方法并不一定是所有平台都可用的,这里我们就 iOS 和 Android 进行探讨。

API

这些API的说明基本上是翻译path_provider的注释,见:https://pub.dev/documentation/path_provider/latest/path_provider/path_provider-library.html

  1. getTemporaryDirectory:临时文件目录,不会被备份并且便于存放下载文件的缓存,此目录随时可能被系统清除。安卓上对应的原生方法是 getCacheDir,iOS 是 NSCachesDirectory。

  2. getApplicationSupportDirectory:应用程序可以在其中放置应用程序支持文件的目录的路径。将此文件用于您不想向用户公开的文件。 不应将此目录用于存放用户数据文件。安卓上对应的是 getFilesDir,iOS 是 NSApplicationSupportDirectory。

  3. getLibraryDirectory:用于存储持久化文件、备份,对用户不可见。这是 iOS 的方法,安卓会抛出[UnsupportedError]异常。

  4. getApplicationDocumentsDirectory:用于存放用户数据或不会重复生成的数据。安卓上对应的是 getDataDirectory,如果数据想让用户看到,可以考虑使用 [getExternalStorageDirectory]。iOS 是 NSDocumentDirectory,如果不是用户生成的数据,可以考虑[getApplicationSupportDirectory]。

  5. getExternalStorageDirectory:返回一个应用可以访问的顶层目录,对用户可见。在安卓是调用getExternalFilesDir(null)。在iOS上,此功能会抛出[UnsupportedError]异常,因为无法在应用程序的沙箱外部访问。

  6. getExternalCacheDirectories:存储特定于应用程序的外部缓存数据的目录的路径。 这些路径通常位于外部存储(如单独的分区或SD卡)上。 电话可能具有多个可用的存储目录。
    由于此功能仅在Android上可用,因此应在发出此函数调用之前确定当前操作系统。
    在iOS上,此功能会抛出[UnsupportedError]异常,因为这是不可能的在应用程序的沙箱外部访问。

  7. getExternalStorageDirectories:可以存储应用程序特定数据的目录的路径。 这些路径通常位于外部存储(如单独的分区或SD卡)上。
    由于此功能仅在Android上可用,因此应在发出此函数调用之前确定当前操作系统。
    在iOS上,此功能会抛出[UnsupportedError]异常,因为这是不可能的在应用程序的沙箱外部访问。
    在Android上,对应Context.getExternalFilesDirs(String type)或API Level 低于19的Context.getExternalFilesDir(String type)。

  8. getDownloadsDirectory:存储下载文件的目录的路径,这通常是桌面操作系统才有的。
    在Android和iOS上,会抛出[UnsupportedError]异常。

文件系统

Android

这篇文章讲得很好:Android文件系统基本认识

iOS

每个 iOS 程序都有一个独立的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒。应用必须待在自己的沙盒里,其他应用不能访问该沙盒。所有的非代码文件都要保存在此,例如属性文件 plist、文本文件、图像、图标、媒体资源等。

每个应用沙盒含有 3 个文件夹:Documents, Library 和 tmp:

  • Documents: 应用程序数据文件写入到这个目录下。这个目录用于存储用户数据。保存应用程序的重要数据文件和用户数据文件等。iTunes 同步时会备份该目录,对应 getApplicationDocumentsDirectory 方法,原生方法是 NSDocumentDirectory。

  • Library: 用来放置您希望被备份但不希望被用户看到的数据。该路径下的文件夹,除 Caches 以外,都会被 iTunes 备份。对应 getLibraryDirectory 方法。

    • Caches:适合存储体积大,不需要备份的非重要数据,iCloud 不会同步该文件。对应 getTemporaryDirectory 方法。
    • Preferences:包含应用程序的偏好设置文件,NSUserDefaults 类创建的数据和 plist 文件都放在这里。
    • Application Support:对应 getApplicationSupportDirectory 方法。
  • tmp: 保存应用的临时文件,用完就删除,系统可能在应用没在运行时删除该目录下的文件,iTunes 不会同步

如何让自己的 app 对“文件”app 开放管理权限?

在你的 App 内的文件可以出现在 Files 里面之前,你必须保证你的 App 是支持 Files 中打开并且可以分享的。这需要你在你的 App 内的 Info.plist 中添加两个键值对,第一个是 UIFileSharingEnabled,这个可以使 iTunes 分享你文件夹内的内容;第二个是 LSSupportsOpeningDocumentsInPlace ,它保证了你文件夹内本地文件的获取权限,你需要将这两个键值对的值设置为 YES 。

** 总结如下 **:

获取缓存统一用[getTemporaryDirectory]。

不想让用户看到数据可以用[getApplicationSupportDirectory],安卓也可以用[getApplicationDocumentsDirectory]。

想让用户看到数据,安卓用[getExternalStorageDirectory],iOS用[getApplicationDocumentsDirectory],另外还要注意配置info权限,才能在“文件”app看到数据。

参考:


文章作者: 小林
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小林 !
评论
  目录