【问题标题】:Flutter can't load File() from path on iOSFlutter 无法从 iOS 上的路径加载 File()
【发布时间】:2019-11-14 11:19:54
【问题描述】:

嘿,我正在使用 flutter_sound 包进行录音。

但是当我从记录器文件路径创建一个 File() 对象时,当我尝试调用 length() 或 readBytes() 函数时,iOS 上没有出现预期错误..

在 Android 上一切正常,所以我尝试比较两个平台上制作的文件,它们有点不同

ANDROID 文件路径 = /storage/emulated/0/...

iOS 文件路径 = file:///Users/kleinpetr/Library/Developer/......

我认为问题出在不同的路径上。

iOS 上的错误是这样的

Cannot retrieve length of file, path =
'file:///Users/kleinpetr/Library/Developer/CoreSimulator/Devices/62B6742D-0FA4-4B92-B138
0D9E717DB91B/data/Containers/Data/Application/8587EB31-CF5D-4045-950B
6C011AE3EA96/Library/Caches/voice-message.m4a' (OS Error: No such file or directory, errno = 2)

【问题讨论】:

  • iOS 路径看起来不太好。您是否尝试过使用 path_provider 包的函数getTemporaryDirectory
  • 是的,完全一样。这是在模拟器中。但在真实设备中也是如此。所以路径应该没问题。
  • 尝试使用File.fromUri(Uri.parse(fullPath))
  • @IgorKharakhordin 它的工作!谢谢你。但是你知道问题出在哪里吗?
  • 我已经发布了答案

标签: ios flutter dart


【解决方案1】:

所以使用File.fromUri(Uri.parse(fullPath)) 对你有用。您提供给 File 类的内容实际上不是路径,而是 URI 字符串(它在开头有协议指定的 file:// )。您需要做的是解析 URI 并从中创建一个文件。

【讨论】:

  • 因此,当路径字符串包含“file:///”时,我必须解析为 Uri 并使用 fromUri 构造函数加载 File()。例如,当字符串路径为“/some/storage/file”时,我可以通过经典构造函数 File(path).. 加载文件。对吗?
  • @PetrKlein 是的,没错。但我不确定为什么你会在 Android 上和 iOS 上的 Uri 上获得常规路径。听起来很奇怪。
  • 好的,因为这个插件pub.dev/packages/flutter_sound返回了一个URI而不是路径。但我不知道这是不同的。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-09
  • 2017-05-07
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
相关资源
最近更新 更多