import 'dart:io'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; import 'package:spotiflac_android/services/cover_cache_manager.dart'; class PlayerArtwork extends StatelessWidget { final String? artUri; final ColorScheme colorScheme; final int? cacheWidth; final double iconSize; const PlayerArtwork({ super.key, required this.artUri, required this.colorScheme, this.cacheWidth, this.iconSize = 40, }); @override Widget build(BuildContext context) { final placeholder = Container( color: colorScheme.surfaceContainerHighest, child: Icon( Icons.music_note, size: iconSize, color: colorScheme.onSurfaceVariant, ), ); final uri = artUri; if (uri == null || uri.isEmpty) return placeholder; if (uri.startsWith('http')) { return CachedNetworkImage( imageUrl: uri, fit: BoxFit.cover, cacheManager: CoverCacheManager.instance, memCacheWidth: cacheWidth, fadeInDuration: const Duration(milliseconds: 150), fadeOutDuration: const Duration(milliseconds: 0), placeholder: (_, _) => placeholder, errorWidget: (_, _, _) => placeholder, ); } if (uri.startsWith('file://')) { final path = Uri.parse(uri).toFilePath(); return Image.file( File(path), fit: BoxFit.cover, cacheWidth: cacheWidth, errorBuilder: (_, _, _) => placeholder, ); } return placeholder; } }