如何检查XFile是否存在?Flutter跨平台文件存在性校验
跨Flutter Web与移动端用XFile检查文件存在性的方案
因为XFile是跨平台抽象类,本身没有提供exists()方法,需要根据不同平台分别处理:
移动端(Android/iOS)
在移动端,XFile本质是对dart:io的File的包装,可以直接通过路径转成File后调用exists()方法:
import 'dart:io'; import 'package:cross_file/cross_file.dart'; import 'package:flutter/foundation.dart'; Future<bool> checkXFileExists(XFile xfile) async { if (!kIsWeb) { return await File(xfile.path).exists(); } return false; }
Web端
Web环境下,浏览器限制了直接访问本地文件系统的权限,XFile对应的是浏览器中的File对象,没有真实的本地文件路径。此时可以通过尝试读取文件内容来判断文件是否有效(即是否存在可读取的文件数据):
import 'package:cross_file/cross_file.dart'; import 'package:flutter/foundation.dart'; Future<bool> checkXFileExists(XFile xfile) async { if (kIsWeb) { try { // 尝试读取文件字节,成功则说明文件有效存在 await xfile.readAsBytes(); return true; } catch (_) { // 读取失败则认为文件不存在或无效 return false; } } else { return await File(xfile.path).exists(); } }
注意事项
Web端无法直接检查本地文件系统中某个路径下的文件是否存在,只能针对已获取到的XFile实例做有效性验证。如果是要检查下载后的文件是否存在,Web端没有原生API支持,只能依赖浏览器的下载记录提示用户确认。
内容的提问来源于stack exchange,提问作者Zahra
相关产品推荐
相关产品推荐

