fooder-app/lib/widgets/summary.dart

122 lines
3.4 KiB
Dart
Raw Normal View History

2024-03-29 16:47:25 +01:00
import 'package:flutter/material.dart';
import 'package:fooder/models/diary.dart';
import 'package:fooder/widgets/macroEntry.dart';
import 'package:fooder/screens/add_meal.dart';
import 'package:fooder/client.dart';
import 'dart:core';
class SummaryHeader extends StatelessWidget {
final Diary diary;
final Function addMeal;
2024-03-30 14:07:10 +01:00
const SummaryHeader({super.key, required this.addMeal, required this.diary});
2024-03-29 16:47:25 +01:00
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Text(
"Summary",
style: Theme.of(context).textTheme.headlineSmall!.copyWith(
2024-03-30 14:07:10 +01:00
color: Theme.of(context).colorScheme.onPrimary,
fontWeight: FontWeight.bold,
),
2024-03-29 16:47:25 +01:00
),
),
2024-03-30 14:07:10 +01:00
const Spacer(),
2024-03-29 16:47:25 +01:00
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: IconButton(
2024-03-30 14:07:10 +01:00
icon: const Icon(Icons.playlist_add_rounded),
2024-03-29 16:47:25 +01:00
iconSize: 32,
color: Theme.of(context).colorScheme.onPrimary,
onPressed: () => addMeal(context),
),
),
],
);
}
}
class SummaryWidget extends StatelessWidget {
2024-03-30 14:07:10 +01:00
static const maxWidth = 920.0;
2024-03-29 16:47:25 +01:00
final Diary diary;
final ApiClient apiClient;
final Function() refreshParent;
const SummaryWidget(
{super.key,
required this.diary,
required this.apiClient,
required this.refreshParent});
Future<void> _addMeal(context) async {
await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => AddMealScreen(
apiClient: apiClient,
diary: diary,
),
),
).then((_) => refreshParent());
}
@override
Widget build(BuildContext context) {
var theme = Theme.of(context);
var colorScheme = theme.colorScheme;
2024-03-30 14:07:10 +01:00
var widthAvail = MediaQuery.of(context).size.width;
var width = widthAvail > maxWidth ? maxWidth : widthAvail;
2024-03-29 16:47:25 +01:00
return Center(
child: Padding(
padding: const EdgeInsets.all(8),
child: Card(
elevation: 4,
clipBehavior: Clip.antiAlias,
shadowColor: colorScheme.primary.withOpacity(1.0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(24),
),
child: SizedBox(
width: width,
child: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [
colorScheme.primary.withOpacity(0.6),
colorScheme.secondary.withOpacity(0.5),
],
),
),
child: Padding(
2024-03-30 14:07:10 +01:00
padding:
const EdgeInsets.symmetric(vertical: 12, horizontal: 24),
2024-03-29 16:47:25 +01:00
child: Column(
children: <Widget>[
SummaryHeader(diary: diary, addMeal: _addMeal),
2024-03-30 14:07:10 +01:00
const MacroHeaderWidget(
2024-03-29 16:47:25 +01:00
calories: true,
),
MacroEntryWidget(
protein: diary.protein,
carb: diary.carb,
fat: diary.fat,
calories: diary.calories,
),
],
),
),
),
),
),
),
);
}
}