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
相关产品推荐
相关产品推荐

