如何使用flatter在ios的外部存储器中保存文本文件?

如何使用flatter在ios的外部存储器中保存文本文件?,ios,file,dart,flutter,storage,Ios,File,Dart,Flutter,Storage,我已经创建了一个应用程序,用户可以在Android的本地存储器中创建并保存一个文本文件。我使用了path\u provider包,该包提供了getExternalStorageDirectory()将数据保存在外部存储器中。但是我找不到同样的iosgetExternalStorageDirectory()不支持ios 我想保存该文件,以便用户以后可以从ios中的文件应用程序访问该文件 Future get\u localPath异步{ var dir=await getExternalStora

我已经创建了一个应用程序,用户可以在Android的本地存储器中创建并保存一个文本文件。我使用了path\u provider包,该包提供了getExternalStorageDirectory()将数据保存在外部存储器中。但是我找不到同样的iosgetExternalStorageDirectory()不支持ios

我想保存该文件,以便用户以后可以从ios中的文件应用程序访问该文件

Future get\u localPath异步{
var dir=await getExternalStorageDirectory();
返回目录路径;
}
未来获取\u本地文件异步{
最终路径=等待_localPath;
返回文件(“$path/test.txt”);
}
未来写入数据(字符串消息)异步{
final file=wait\u localFile;
返回文件.writeAsString(msg);
}

以上代码适用于Android(如果提供了存储权限)。任何人都可以帮助我在ios中实现同样的功能。

您可以将文件保存在NSDocumentsDirectory(
getApplicationDocumentsDirectory()
)中,然后将其提供给用户

发件人:

使用此目录存储用户生成的内容。此目录的内容可通过文件共享提供给用户;因此,他的目录应该只包含您希望向用户公开的文件

要使目录对用户可用,您需要在“your_app/ios/Runner.xcworkspace”下打开Xcode项目。然后在Runner目录中打开Info.plist文件,并添加两行,键为
UIFileSharingEnabled
LSSupportsOpeningDocumentsInPlace
。将两个键的值设置为
YES


如果您现在打开文件应用程序并单击“在我的iPhone上”,您应该会看到一个包含应用程序名称的文件夹。

作为对do@ni的赞美。回答,您必须同时启用这两个键。这是它应该看到的:

Xcode(info.plist):

编辑(info.plist):

LSSupportsOpeningDocumentsInPlace
UIFileSharingEnabled
资料来源:

在iOS 11及更高版本中,如果此键LSSupportsOpeningDocumentsInPlaceUIFileSharingEnabled键均为YES,则本地文件提供商将授予对应用程序文档目录中所有文档的访问权限。这些文档显示在“文件”应用程序和文档浏览器中。用户可以就地打开和编辑这些文档


来源:

Thx的答案,但这个解决方案的问题是,用户还可以访问所有其他文件,如db和json文件。有没有办法只拒绝访问这些内容?谢谢!它帮助了我
Future<String> get _localPath async{
var dir = await getExternalStorageDirectory();

  return dir.path;
}

Future<File> get _localFile async{
  final path = await _localPath;

  return File('$path/test.txt');
}

Future<File> writeData(String msg) async{
  final file = await _localFile;

  return file.writeAsString(msg);
}
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
<key>UIFileSharingEnabled</key>
<true/>