import 'dart:io'; import 'dart:typed_data'; import 'package:clean/model/asset_info.dart'; import 'package:intl/intl.dart'; import 'package:wechat_assets_picker/wechat_assets_picker.dart'; import 'file_utils.dart'; class ImageUtil { // 生成月份 key (用于内部存储) static String getMonthKey(DateTime date) { return '${date.year}-${date.month.toString().padLeft(2, '0')}'; } // 格式化月份显示 (例如: Jan 2025) static String formatMonthKey(String monthKey) { final parts = monthKey.split('-'); if (parts.length == 2) { final date = DateTime(int.parse(parts[0]), int.parse(parts[1])); return DateFormat('MMM yyyy').format(date); } return monthKey; } // 获取指定索引的月份显示文本 static String getMonthText(Map> assets, int index) { final monthKeys = assets.keys.toList() ..sort((a, b) => b.compareTo(a)); // 最新的月份在前 if (index < monthKeys.length) { return formatMonthKey(monthKeys[index]); } return ''; } // 获取指定月份的图片 static List getMonthAssets(Map> assets, int index) { final monthKeys = assets.keys.toList() ..sort((a, b) => b.compareTo(a)); // 最新的月份在前 if (index < monthKeys.length) { return assets[monthKeys[index]] ?? []; } return []; } // 获取缩略图数据 static Future getImageThumbnail(AssetInfo asset) async { try { // 先尝试从本地读取缩略图 final localThumb = await FileUtils.getThumbData(asset.id.substring(0, 36)); if (localThumb != null) { return localThumb; } // 如果本地没有,则从 AssetEntity 获取 return await asset.thumbnailData; } catch (e) { print('获取缩略图失败: $e'); return null; } } // 获取原始图片文件 static Future getImageFile(AssetInfo asset) async { try { // 先尝试从本地读取 final assetPath = await FileUtils.getAssetPath(); final localFile = File('$assetPath/${asset.id.substring(0, 36)}.jpg'); if (await localFile.exists()) { return localFile; } // 如果本地没有,则从 AssetEntity 获取 return asset.file; } catch (e) { print('获取图片文件失败: $e'); return null; } } }