part of 'home_page.dart'; typedef OnLikeCallBack = void Function(String? id, String title, bool isLiked)?; class _Card extends StatelessWidget { final String text; final IconData icon; final String descText; final String? imageUrl; final OnLikeCallBack onLike; final VoidCallback? onTap; final String? id; final bool isLiked; final String date; const _Card( this.text, { this.icon = Icons.ac_unit_sharp, required this.descText, this.imageUrl, this.onLike, this.onTap, this.id, this.isLiked = false, required this.date, }); factory _Card.fromData( CardData data, { OnLikeCallBack onLike, VoidCallback? onTap, bool isLiked = false, }) => _Card( data.text, descText: data.descText, icon: data.icon, imageUrl: data.imageUrl, onLike: onLike, onTap: onTap, isLiked: isLiked, id: data.id, date: data.date, ); @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.only(left: 8.0, right: 8.0), child: GestureDetector( onTap: onTap, child: SizedBox( height: 150, child: Container( margin: const EdgeInsets.only(top: 10), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(13), border: Border.all( color: Colors.lightBlue, width: 3, )), child: IntrinsicHeight( child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ ClipRRect( borderRadius: const BorderRadius.only( bottomLeft: Radius.circular(10), topLeft: Radius.circular(10), ), child: SizedBox( height: double.infinity, width: 120, child: Image.network( imageUrl ?? '', fit: BoxFit.cover, errorBuilder: (_, __, ___) => const Placeholder(), ), ), ), Expanded( child: Padding( padding: const EdgeInsets.only( left: 8.0, top: 4.0, right: 4.0, bottom: 4.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( text, maxLines: 1, overflow: TextOverflow.ellipsis, style: const TextStyle( color: Colors.black, fontWeight: FontWeight.w500, fontSize: 26), ), Text( descText, maxLines: 5, overflow: TextOverflow.ellipsis, style: Theme.of(context).textTheme.bodySmall, ) ], ), ), ), //const Spacer(), Align( child: Padding( padding: const EdgeInsets.only( left: 8.0, top: 4.0, right: 8.0, bottom: 4.0), child: GestureDetector( onTap: () => onLike?.call(id, text, isLiked), child: AnimatedSwitcher( duration: const Duration(milliseconds: 300), child: isLiked ? const Icon( Icons.favorite, color: Colors.red, key: ValueKey(0), ) : const Icon( Icons.favorite_border, key: ValueKey(1), )), ), ), ) ], ), ), ), ), ), ); } }