2023-07-29 19:21:02 +02:00
|
|
|
import 'package:flutter/material.dart';
|
2023-07-30 15:31:36 +02:00
|
|
|
import 'package:fooder/models/diary.dart';
|
|
|
|
import 'package:fooder/widgets/meal.dart';
|
|
|
|
import 'package:fooder/widgets/macro.dart';
|
|
|
|
import 'package:fooder/client.dart';
|
|
|
|
import 'package:fooder/screens/add_meal.dart';
|
2023-07-29 19:21:02 +02:00
|
|
|
import 'dart:core';
|
|
|
|
|
|
|
|
|
|
|
|
class DiaryWidget extends StatelessWidget {
|
|
|
|
final Diary diary;
|
2023-07-30 13:09:41 +02:00
|
|
|
final ApiClient apiClient;
|
|
|
|
final Function() refreshParent;
|
2023-07-29 19:21:02 +02:00
|
|
|
|
2023-07-30 13:09:41 +02:00
|
|
|
const DiaryWidget({super.key, required this.diary, required this.apiClient, required this.refreshParent});
|
2023-07-29 19:21:02 +02:00
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return Container(
|
|
|
|
padding: const EdgeInsets.all(8),
|
2023-07-30 13:09:41 +02:00
|
|
|
child: CustomScrollView(
|
|
|
|
slivers: <Widget>[
|
|
|
|
SliverAppBar(
|
|
|
|
title: Row(
|
2023-07-30 14:40:45 +02:00
|
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
2023-07-30 13:09:41 +02:00
|
|
|
children: <Widget>[
|
2023-07-30 14:42:55 +02:00
|
|
|
const Spacer(),
|
2023-07-30 13:09:41 +02:00
|
|
|
Text(
|
|
|
|
"${diary.calories.toStringAsFixed(1)} kcal",
|
|
|
|
style: Theme.of(context).textTheme.headlineLarge!.copyWith(
|
|
|
|
color: Theme.of(context).colorScheme.onSecondary,
|
|
|
|
fontWeight: FontWeight.bold,
|
2023-07-29 23:54:51 +02:00
|
|
|
),
|
2023-07-30 13:09:41 +02:00
|
|
|
),
|
|
|
|
]
|
|
|
|
),
|
2023-07-30 15:16:22 +02:00
|
|
|
expandedHeight: 150,
|
2023-07-30 13:09:41 +02:00
|
|
|
backgroundColor: Theme.of(context).colorScheme.secondary,
|
|
|
|
shape: RoundedRectangleBorder(
|
|
|
|
borderRadius: BorderRadius.circular(8),
|
|
|
|
),
|
|
|
|
floating: true,
|
|
|
|
flexibleSpace: FlexibleSpaceBar(
|
|
|
|
title: MacroWidget(
|
2023-07-30 14:40:45 +02:00
|
|
|
protein: diary.protein,
|
|
|
|
carb: diary.carb,
|
|
|
|
fat: diary.fat,
|
|
|
|
style: Theme.of(context).textTheme.bodyMedium!.copyWith(
|
|
|
|
color: Theme.of(context).colorScheme.onSecondary,
|
|
|
|
fontWeight: FontWeight.bold,
|
|
|
|
),
|
2023-07-30 15:16:22 +02:00
|
|
|
child: IconButton(
|
2023-07-30 14:40:45 +02:00
|
|
|
onPressed: () {
|
|
|
|
Navigator.push(
|
|
|
|
context,
|
|
|
|
MaterialPageRoute(
|
|
|
|
builder: (context) => AddMealScreen(
|
|
|
|
apiClient: apiClient,
|
|
|
|
diary: diary,
|
|
|
|
),
|
|
|
|
),
|
|
|
|
).then((_) {
|
|
|
|
refreshParent();
|
|
|
|
});
|
|
|
|
},
|
2023-07-30 15:16:22 +02:00
|
|
|
icon: const Icon(Icons.add),
|
|
|
|
style: ButtonStyle(
|
|
|
|
backgroundColor: MaterialStateProperty.all<Color>(Theme.of(context).colorScheme.secondary),
|
|
|
|
foregroundColor: MaterialStateProperty.all<Color>(Theme.of(context).colorScheme.onSecondary),
|
|
|
|
),
|
2023-07-30 14:40:45 +02:00
|
|
|
),
|
2023-07-30 13:09:41 +02:00
|
|
|
),
|
2023-07-30 14:40:45 +02:00
|
|
|
)
|
2023-07-29 23:54:51 +02:00
|
|
|
),
|
2023-07-30 13:09:41 +02:00
|
|
|
SliverList(
|
|
|
|
delegate: SliverChildListDelegate(
|
|
|
|
[
|
|
|
|
for (var meal in diary.meals)
|
|
|
|
MealWidget(
|
|
|
|
meal: meal,
|
|
|
|
apiClient: apiClient,
|
|
|
|
refreshParent: refreshParent,
|
|
|
|
),
|
|
|
|
],
|
|
|
|
),
|
|
|
|
),
|
2023-07-29 19:21:02 +02:00
|
|
|
],
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|