| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- 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<String, List<AssetInfo>> 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<AssetInfo> getMonthAssets(Map<String, List<AssetInfo>> 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<Uint8List?> 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<File?> 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;
- }
- }
- }
|