2024-09-24 13:04:59 +04:00

95 lines
2.5 KiB
Dart

part of 'home_page.dart';
class _CardData {
final String text;
final String info;
final String? urlImage;
_CardData({required this.text, required this.info, required this.urlImage});
}
class _Card extends StatefulWidget {
final String text;
final String info;
final String? urlImage;
final VoidCallback? onLike;
const _Card({super.key, required this.text, required this.info, required this.urlImage, this.onLike});
factory _Card.fromData(_CardData data, {VoidCallback? onLike}) => _Card(
text: data.text,
info: data.info,
urlImage: data.urlImage,
onLike: onLike,
);
@override
State<_Card> createState() => _CardState();
}
class _CardState extends State<_Card> {
bool isLiked = false;
@override
Widget build(BuildContext context) {
return Card(
elevation: 4.0,
margin: const EdgeInsets.all(10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Stack(
children: [
Image.network(
widget.urlImage ?? 'https://hlebzavod3.ru/images/virtuemart/product/011_IMG_9657.jpg',
fit: BoxFit.cover,
height: 150.0,
width: double.infinity,
),
Positioned(
top: 8.0,
right: 8.0,
child: GestureDetector(
onTap: () {
setState(() {
isLiked = !isLiked;
});
if(isLiked) widget.onLike?.call();
},
child: Icon(
Icons.favorite,
color: isLiked ? Colors.red : Colors.blueGrey,
size: 30.0,
),
),
),
],
),
Padding(
padding: const EdgeInsets.all(10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
widget.text,
style: const TextStyle(
fontSize: 18.0,
fontWeight: FontWeight.bold,
),
),
const SizedBox(height: 5.0),
Text(
widget.info,
style: const TextStyle(
fontSize: 14.0,
color: Colors.grey,
),
),
],
),
),
],
),
);
}
}