import 'dart:convert'; import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:pmu_new/models/CardData.dart'; class MyCard extends StatelessWidget { final CardData cardData; final VoidCallback onTap; final Color backgroundColor; //final String? id; final bool isliked; final void Function(String? id, String title, bool isliked)? onlike; MyCard({ required this.cardData, required this.onTap, this.onlike, this.backgroundColor = const Color.fromARGB(70, 173, 216, 230), this.isliked=false, }); double turns = 0.0; @override Widget build(BuildContext context) { return Container( margin: const EdgeInsets.all(16), padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: this.backgroundColor, borderRadius: BorderRadius.circular(9), border: Border.all(color: Colors.grey), boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(.5), spreadRadius: 4, offset: const Offset(0, 5), blurRadius: 8, ), ], ), child: IntrinsicHeight( child: Column( //crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ Column( children: [ GestureDetector( onTap: onTap, child: ClipRRect( borderRadius: BorderRadius.circular(10), child: SizedBox( height: 240, width: 300, child: this.cardData.bytes != null ? Image.memory(base64Decode(this.cardData.bytes!)) : Image.network( this.cardData.imageUrl ?? '', fit: BoxFit.cover, errorBuilder: (_, __, ___) => const Placeholder(), ), ), )) ], ), ]), Row( children: [ Expanded( child: Padding( padding: const EdgeInsets.only(left: 16.0, top: 12.0), child: Text(this.cardData.text, style: TextStyle(decoration: TextDecoration.underline, fontSize: 30)), ), ), ], ), Row(children: [ Expanded( child: Padding( padding: const EdgeInsets.only(left: 16.0), child: Text( this.cardData.descriptionText, style: Theme.of(context).textTheme.bodyLarge, )), ), /*Expanded( child: Padding( padding: const EdgeInsets.only(left: 16.0), child: Column(), ))*/ ]), Row(mainAxisAlignment: MainAxisAlignment.center, children: [ Padding( padding: EdgeInsets.only(top: 7.0), child: AnimatedRotation( duration: const Duration(milliseconds: 500), turns: turns, child: GestureDetector( onTap: () { turns += 1.0; onlike?.call(this.cardData.id, cardData.text, isliked); }, child: AnimatedSwitcher( duration: const Duration(milliseconds: 200), child: isliked ? const Icon( Icons.favorite, color: Colors.redAccent, key: ValueKey(0), ) : const Icon( Icons.favorite_border, key: ValueKey(1), )), )) )]) ], ), )); } }