class FileUtils { // 支持的图片格式列表 static const imageExtensions = [ 'jpg', 'jpeg', 'png', 'gif', 'webp', 'bmp', 'tiff', 'svg', 'heic', 'heif' ]; // 支持的文档格式列表 static const documentExtensions = [ 'pdf', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'rtf', 'csv', 'odt', 'ods', 'odp' ]; // 获取 URL 的文件扩展名(小写) static String? _getFileExtension(String url) { try { // 处理带有查询参数的 URL final uri = Uri.parse(url); final pathSegments = uri.pathSegments; if (pathSegments.isEmpty) return null; final fileName = pathSegments.last; final dotIndex = fileName.lastIndexOf('.'); if (dotIndex == -1) return null; return fileName.substring(dotIndex + 1).toLowerCase(); } catch (e) { return null; } } // 判断是否是图片 static bool isImage(String url) { final ext = _getFileExtension(url); return ext != null && imageExtensions.contains(ext); } // 判断是否是文档 static bool isDocument(String url) { final ext = _getFileExtension(url); return ext != null && documentExtensions.contains(ext); } // 综合判断方法 static FileType getFileType(String url) { final ext = _getFileExtension(url); if (ext == null) return FileType.unknown; if (imageExtensions.contains(ext)) return FileType.image; if (documentExtensions.contains(ext)) return FileType.document; return FileType.unknown; } } enum FileType { image, document, unknown }