import 'dart:io'; import 'package:flutter/material.dart'; import 'theme.dart'; /// Cover-Bild aus einer file-URI, mit Noten-Platzhalter als Fallback. class CoverImage extends StatelessWidget { const CoverImage({super.key, required this.artUri, this.size, this.radius = 8}); final Uri? artUri; final double? size; final double radius; @override Widget build(BuildContext context) { final placeholder = Container( width: size, height: size, color: MeloTheme.surface, child: LayoutBuilder( builder: (_, c) { final s = size ?? (c.hasBoundedWidth ? c.maxWidth : 48.0); return Icon(Icons.music_note, size: s * 0.4, color: MeloTheme.red); }, ), ); Widget child = placeholder; if (artUri != null && artUri!.scheme == 'file') { child = Image.file( File(artUri!.toFilePath()), width: size, height: size, fit: BoxFit.cover, errorBuilder: (_, _, _) => placeholder, ); } return ClipRRect(borderRadius: BorderRadius.circular(radius), child: child); } }