Flutter - 保存对用户可见的文件

Posted

技术标签:

【中文标题】Flutter - 保存对用户可见的文件【英文标题】:Flutter - Save file visible to the user 【发布时间】:2020-03-27 22:59:26 【问题描述】:

在 Flutter 项目中,我创建了一个 pdf 文档。我可以将文档保存在应用程序的路径中。 但是用户无权访问它。或者,如何将文件保存到用户可以看到的另一个文件夹中?

import 'package:path_provider/path_provider.dart';
  Future<void> savePdfDocument() async 
    final PdfCreater generatedPdf = PdfCreater(document);
    final List<int> generatedPdfDocument = generatedPdf.buildPdf();

    final String dir = (await getApplicationDocumentsDirectory()).path;
    final String path = '$dir/example.pdf';
    final File file = File(path);
    file.writeAsBytesSync(generatedPdfDocument);
  

【问题讨论】:

由于你是在Documents目录下保存文件,用户可以看到,他可能需要去android/data/data/your_package_name/文件夹,如果你想把文件保存在根目录下,你可以简单地改变路径,但请确保您有权访问 Android 中的存储权限。 @CopsOnRoad 这不是真的,用户无法访问来自getApplicationDocumentsDirectory() 的路径。该名称可能具有误导性,它不是您在手机的“文件”菜单中看到的文档文件夹 @West 是的,我知道document 文件夹不是您 SD 卡目录根目录下的文件夹。我以为是android/data/package/files,但结果是data/data/package/app_flutter/,用户确实无法访问。 【参考方案1】:

使用downloads_path_provider,在安卓上它会将文件保存在下载中。

对于 ios,您需要使用 getApplicationDocumentsDirectoryfrom path_provider 并在 info.plist 上添加权限以使该文件夹对用户可见:

<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
<key>UIFileSharingEnabled</key>
<true/>

【讨论】:

2021 年 1 月 8 日:此插件有很多不一致之处,不应再使用。随意分叉和调整它。 如果您无法在 iOS 上的文件应用中使用 path_provider 查看您的文件,此权限将允许您查看它们。【参考方案2】:

这就像一个魅力

String documentsPath = '/storage/emulated/0/Documents/';
if (Platform.isIOS) 
  Directory path = await getApplicationDocumentsDirectory();
  documentsPath = path.path;

也不要忘记将其添加到 pubspec path_provider: 2.0.1

【讨论】:

【参考方案3】:

另外,请务必在物理设备上进行测试,iOS 模拟器将无法运行。

【讨论】:

以上是关于Flutter - 保存对用户可见的文件的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 以不可见模式保存音频/视频文件,类似于 Spotify/Youtube(离线下载)

flutter SharedPreferences数据存储

flutte的第一个hello world程序

flutte学习-编译模式

flutte学习-编译模式

在 Flutter 中将视频文件保存到设备