You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用file_picker及open_file.dart无法打开文件求助

问题原因
  • 核心错误是你没有从FilePicker返回的PlatformFile对象中提取真实路径,而是直接对_paths列表调用了toString()方法,传入File构造和OpenFile.open的实际上是整个列表的序列化字符串,不是真实的文件路径,所以系统找不到对应的文件。
  • 从你提供的运行日志可以验证:你传给OpenFile的内容是完整的[PlatformFile(path: xxx, name: xxx...)]序列化字符串,而不是单独的/data/user/0/com.example.bismillah/cache/file_picker/pdf_tmp_fie.pdf路径值。
修正方案

如果使用的是单选模式(你代码中_multiPick默认值为false时),直接取列表中第一个PlatformFile的path属性即可,修正后的代码片段如下:

if (_paths != null && _paths!.isNotEmpty) {
  // 单选模式取第一个选中文件的路径
  PlatformFile selectedFile = _paths!.first;
  String? filePath = selectedFile.path;
  if (filePath != null) {
    print("FILEPATH FOUND==> $filePath");
    File file = File(filePath);
    (await file.exists()) ? print("file exist") : print("file !exist");
    final _result = await OpenFile.open(filePath);
    print("result: "+ _result.message);
  } else {
    print("fail to get file path");
  }
} else {
  print("nope");
}
额外注意事项
  • 如果你开启了多选模式(_multiPick = true),需要遍历_paths列表逐个处理每个文件的path属性,不要直接对整个列表调用toString。
  • Android 11及以上版本如需打开外部存储非媒体类文件,记得在AndroidManifest.xml中配置对应文件访问权限与FileProvider规则,避免后续出现权限类打开失败问题。

内容的提问来源于stack exchange,提问作者fajar setiawan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:45:03