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,您需要使用 getApplicationDocumentsDirectory
from 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 - 保存对用户可见的文件的主要内容,如果未能解决你的问题,请参考以下文章