fooder-app/lib/widgets/diary.dart

98 lines
3.3 KiB
Dart
Raw Normal View History

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;
final ApiClient apiClient;
final Function() refreshParent;
2023-07-29 19:21:02 +02:00
2023-08-28 14:45:32 +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),
child: CustomScrollView(
slivers: <Widget>[
SliverAppBar(
2023-08-28 14:45:32 +02:00
title: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
const Spacer(),
Text(
"${diary.calories.toStringAsFixed(1)} kcal",
style: Theme.of(context)
.textTheme
.headlineLarge!
.copyWith(
color: Theme.of(context).colorScheme.onSecondary,
fontWeight: FontWeight.bold,
),
),
]),
expandedHeight: 150,
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(
2023-08-28 14:45:32 +02:00
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-08-28 14:45:32 +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-08-28 14:45:32 +02:00
)),
SliverList(
delegate: SliverChildListDelegate(
[
for (var meal in diary.meals)
MealWidget(
meal: meal,
apiClient: apiClient,
refreshParent: refreshParent,
2023-08-28 14:45:32 +02:00
),
],
),
),
2023-07-29 19:21:02 +02:00
],
),
);
}
}