You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
meals/lib/widgets/MealItem.dart

79 lines
2.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:meals/models/Meal.dart';
import 'package:meals/screens/meal_details.dart';
import 'package:meals/widgets/meal_item%20treat.dart';
import 'package:transparent_image/transparent_image.dart';
class MealItem extends StatelessWidget {
final Meal meal;
final void Function(Meal meal) callbackClickOnMeal;
const MealItem({Key? key, required this.meal, required this.callbackClickOnMeal}) : super(key: key);
@override
Widget build(BuildContext context) {
return Card(
margin: const EdgeInsets.all(8),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
clipBehavior: Clip.hardEdge,
elevation: 2,
child: InkWell(
onTap: () => callbackClickOnMeal(meal),
child: Stack(
children: [
FadeInImage(
placeholder: MemoryImage(kTransparentImage),
image: NetworkImage(meal.imageUrl),
fit: BoxFit.cover,
height: 200,
width: double.infinity,
),
Positioned(
bottom: 0,
left: 0,
right: 0,
child: Container(
color: Colors.black54,
padding:
const EdgeInsets.symmetric(vertical: 6, horizontal: 44),
child: Column(
children: [
Text(
meal.title,
maxLines: 2,
textAlign: TextAlign.center,
softWrap: true,
overflow: TextOverflow.ellipsis,
style: const TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.white,
),
),
const SizedBox(
height: 24,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
MealItemTreat(
icon: Icons.schedule,
label: '${meal.duration} mins.'),
MealItemTreat(
icon: Icons.work, label: meal.beautifulComplexity),
MealItemTreat(
icon: Icons.attach_money,
label: meal.beautifulAffordability),
],
)
],
),
),
),
],
),
),
);
}
}