84 lines
2.6 KiB
Dart
84 lines
2.6 KiB
Dart
|
import 'package:ernaehrung/android/components/card/card_data_food_component.dart';
|
||
|
import 'package:ernaehrung/android/components/card/card_title_component.dart';
|
||
|
import 'package:flutter/material.dart';
|
||
|
|
||
|
import '../../models/food.dart';
|
||
|
import '../../pages/nav_pages/search_food.dart';
|
||
|
|
||
|
class CardComponent extends StatelessWidget {
|
||
|
final String title;
|
||
|
final List<dynamic> foods;
|
||
|
|
||
|
const CardComponent(this.title, this.foods, {super.key});
|
||
|
|
||
|
List<Food> castDynamicToListFood(List<dynamic> dynamicList) {
|
||
|
List<Food> foodList = [];
|
||
|
for (Food element in dynamicList) {
|
||
|
foodList.add(element);
|
||
|
}
|
||
|
|
||
|
return foodList;
|
||
|
}
|
||
|
|
||
|
Route createRoute(String cardName) {
|
||
|
return PageRouteBuilder(
|
||
|
pageBuilder: (context, animation, secondaryAnimation) =>
|
||
|
SearchFoodPage(cardName),
|
||
|
transitionsBuilder: (context, animation, secondaryAnimation, child) {
|
||
|
const begin = Offset(0.0, 1.0);
|
||
|
const end = Offset.zero;
|
||
|
const curve = Curves.ease;
|
||
|
|
||
|
var tween =
|
||
|
Tween(begin: begin, end: end).chain(CurveTween(curve: curve));
|
||
|
|
||
|
return SlideTransition(
|
||
|
position: animation.drive(tween),
|
||
|
child: child,
|
||
|
);
|
||
|
},
|
||
|
);
|
||
|
}
|
||
|
|
||
|
@override
|
||
|
Widget build(BuildContext context) {
|
||
|
return Container(
|
||
|
height: 300,
|
||
|
decoration: BoxDecoration(
|
||
|
color: const Color(0xFF6E7BFB),
|
||
|
borderRadius: const BorderRadius.all(Radius.circular(16)),
|
||
|
border: Border.all(
|
||
|
color: Colors.black,
|
||
|
),
|
||
|
),
|
||
|
margin: const EdgeInsets.fromLTRB(0, 16, 0, 16),
|
||
|
child: Column(
|
||
|
children: [
|
||
|
CardTitleComponent(
|
||
|
title, "${castDynamicToListFood(foods).length} Kalorien"),
|
||
|
CardDataFoodComponent(
|
||
|
castDynamicToListFood(foods)
|
||
|
),
|
||
|
Padding(
|
||
|
padding: const EdgeInsets.symmetric(vertical: 0, horizontal: 8),
|
||
|
child: Container(
|
||
|
margin: const EdgeInsets.fromLTRB(0, 8, 0, 0),
|
||
|
child: ElevatedButton(
|
||
|
style: ElevatedButton.styleFrom(
|
||
|
minimumSize: const Size.fromHeight(40), //
|
||
|
backgroundColor: const Color(0xFFffffff),
|
||
|
foregroundColor: const Color(0xFF6E7BFB),
|
||
|
shape: const StadiumBorder(),
|
||
|
),
|
||
|
onPressed: () async {
|
||
|
Navigator.of(context).push(createRoute(title));
|
||
|
},
|
||
|
child: Text('Text Of Button'),
|
||
|
),
|
||
|
),
|
||
|
)
|
||
|
],
|
||
|
));
|
||
|
}
|
||
|
}
|