import 'package:flutter/material.dart'; import '../../../../domain/entities/track.dart'; import '../../../../core/theme/colors.dart'; import '../common/cached_network_image_with_fallback.dart'; /// Search result card for a track class SearchTrackCard extends StatelessWidget { final Track track; final VoidCallback? onTap; const SearchTrackCard({ required this.track, this.onTap, super.key, }); @override Widget build(BuildContext context) { return GestureDetector( onTap: onTap, child: Container( decoration: BoxDecoration( gradient: AppColors.primaryGradient, borderRadius: BorderRadius.circular(12), border: Border.all( color: AppColors.cyan.withOpacity(0.3), ), ), child: Padding( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ // Thumbnail or icon Expanded( child: ClipRRect( borderRadius: BorderRadius.circular(8), child: SizedBox( width: double.infinity, child: CachedNetworkImageWithFallback( imageUrl: track.imageUrl, fallbackIcon: Icons.music_note, progressColor: AppColors.cyan, fit: BoxFit.cover, ), ), ), ), const SizedBox(height: 12), // Track info Text( track.title, style: const TextStyle( color: AppColors.onBackground, fontWeight: FontWeight.w600, fontSize: 16, ), maxLines: 2, overflow: TextOverflow.ellipsis, ), const SizedBox(height: 4), Text( track.artist?.name ?? 'Unknown Artist', style: const TextStyle( color: AppColors.onBackground, fontSize: 14, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), ], ), ), ), ); } }