// lib/metadata/metadata_reader.dart import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:audio_metadata_reader/audio_metadata_reader.dart' as amr; import 'metadata_model.dart'; class MetadataReader { Future readRawMetadata(File file) async { try { // ⭐ getImage: true 读取封面图 final meta = amr.readMetadata(file, getImage: true); // ⭐ 提取第一张图片 Uint8List? artwork; if (meta.pictures != null && meta.pictures!.isNotEmpty) { artwork = meta.pictures.first.bytes; } return RawMetadata( title: meta.title ?? '', artist: meta.artist ?? '', album: meta.album ?? '', genres: meta.genres, performers: meta.performers, year: _toInt(meta.year), trackNumber: _toInt(meta.trackNumber), trackTotal: _toInt(meta.trackTotal), discNumber: _toInt(meta.discNumber), totalDisc: _toInt(meta.totalDisc), duration: meta.duration, artwork: artwork, ); } catch (e) { debugPrint('⚠️ [MetadataReader] read failed: $e'); return const RawMetadata(); } } int _toInt(dynamic value) { if (value == null) return 0; if (value is int) return value; if (value is String) return int.tryParse(value) ?? 0; if (value is num) return value.toInt(); return 0; } }