part of 'home_page.dart'; typedef OnLikeCallback = void Function(String? id, String title, bool isLiked); class _Card extends StatelessWidget { final String text; final String categoryText; //final IconData icon; final String? imageUrl; final OnLikeCallback? onLike; final VoidCallback? onTap; final String uuid; final bool isLiked; const _Card( this.text, { //this.icon = Icons.abc, required this.categoryText, this.imageUrl, this.onLike, this.onTap, required this.uuid, this.isLiked = false, }); factory _Card.fromData( CardData data, { OnLikeCallback? onLike, VoidCallback? onTap, bool isLiked = false, }) => _Card( uuid: data.uuid, data.text!, categoryText: data.categoryText!, //icon: data.icon, imageUrl: data.imageUrl, onLike: onLike, onTap: onTap, isLiked: isLiked, ); @override Widget build(BuildContext context) { return GestureDetector( onTap: onTap, child: Container( margin: const EdgeInsets.all(5), padding: const EdgeInsets.all(10), decoration: BoxDecoration( color: Colors.white70, borderRadius: BorderRadius.circular(20), border: Border.all(color: Colors.grey.shade200), boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(.5), spreadRadius: 4, offset: const Offset(0, 5), blurRadius: 8, ), ], ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ClipRRect( borderRadius: BorderRadius.circular(10), child: SizedBox( height: 310, width: double.infinity, child: Stack( children: [ Positioned.fill( child: Image.network( imageUrl ?? '', fit: BoxFit.contain, errorBuilder: (_, __, ___) => const Placeholder(), ), ), Align( alignment: Alignment.bottomLeft, child: Container( decoration: const BoxDecoration( color: Colors.purpleAccent, borderRadius: BorderRadius.only( bottomRight: Radius.circular(20), ), ), padding: const EdgeInsets.fromLTRB(8, 2, 8, 2), child: Text( 'New!!!!', style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Colors.black), ), ), ) ], ), ), ), const SizedBox(height: 5), Text( text, style: Theme.of(context).textTheme.headlineLarge, ), Text( categoryText, style: Theme.of(context).textTheme.bodyLarge?.copyWith( fontSize: 20, ), ), const SizedBox(height: 5), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ GestureDetector( onTap: () => onLike?.call(uuid, text, isLiked), child: AnimatedSwitcher( duration: const Duration(milliseconds: 300), child: isLiked ? const Icon( Icons.favorite, color: Colors.redAccent, key: ValueKey(0), ) : const Icon( Icons.favorite_border, key: ValueKey(1), ), ), ), ], ), ], ), ), ); } }