feat(diary): Nutrition chart looks like half-donut

This commit is contained in:
2024-07-31 12:21:17 +03:00
parent 56e5cdbe16
commit a2360a1c19
5 changed files with 181 additions and 80 deletions

View File

@@ -4,6 +4,7 @@ import 'package:eatvio_app/features/calendar/models/calendar_model.dart';
import 'package:eatvio_app/features/calendar/presentation/bloc/calendar_cubit.dart';
import 'package:eatvio_app/features/calendar/presentation/bloc/calendar_state.dart';
import 'package:eatvio_app/core/app_export.dart';
import 'package:go_router/go_router.dart';
import 'package:table_calendar/table_calendar.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
@@ -101,26 +102,34 @@ class CalendarScreen extends StatelessWidget {
],
),
child: TableCalendar(
locale: 'ru_RU',
firstDay: DateTime.utc(2010, 10, 16),
lastDay: DateTime.utc(2030, 3, 14),
focusedDay: DateTime.now(),
startingDayOfWeek: StartingDayOfWeek.monday,
calendarBuilders: CalendarBuilders(
selectedBuilder: (context, day, focusedDay) => _buildCellDate(day, focusedDay: focusedDay, state),
defaultBuilder: (context, day, focusedDay) => _buildCellDate(day, state),
todayBuilder: (context, day, focusedDay) => _buildCellDate(day, state),
selectedBuilder: (context, day, focusedDay) =>
_buildCellDate(context, day, focusedDay: focusedDay, state),
defaultBuilder: (context, day, focusedDay) =>
_buildCellDate(context, day, state),
todayBuilder: (context, day, focusedDay) =>
_buildCellDate(context, day, state),
),
),
);
}
}
Widget _buildCellDate(DateTime day, CalendarStateLoaded state, {DateTime? focusedDay}) {
Widget _buildCellDate(
BuildContext context, DateTime day, CalendarStateLoaded state,
{DateTime? focusedDay}) {
final String dayString = day.toIso8601String().split('T').first;
final List<CalendarModel> calendarModels = state.calendarList;
// Находим первую модель, соответствующую дате
final CalendarModel model = calendarModels.firstWhere((model) => model.date == dayString, orElse: () => CalendarModel(date: dayString, diary: {}));
final CalendarModel model = calendarModels.firstWhere(
(model) => model.date == dayString,
orElse: () => CalendarModel(date: dayString, diary: {}));
Color? bgclr; // Объявляем переменную bgclr здесь
@@ -138,14 +147,16 @@ Widget _buildCellDate(DateTime day, CalendarStateLoaded state, {DateTime? focuse
bgclr = Colors.white; // Значение по умолчанию, если diary не является Map
}
return Container(
margin: const EdgeInsets.all(5),
alignment: Alignment.center,
decoration: BoxDecoration(
shape: (day == focusedDay) ? BoxShape.circle : BoxShape.rectangle,
color: bgclr,
borderRadius: (day == focusedDay) ? null : BorderRadius.circular(4),
),
child: Text(day.day.toString(), style: TextStyle(color: Colors.black)),
);
return GestureDetector(
onTap: () => GoRouter.of(context).replace('/diary-screen'),
child: Container(
margin: const EdgeInsets.all(5),
alignment: Alignment.center,
decoration: BoxDecoration(
shape: (day == focusedDay) ? BoxShape.circle : BoxShape.rectangle,
color: bgclr,
borderRadius: (day == focusedDay) ? null : BorderRadius.circular(4),
),
child: Text(day.day.toString(), style: TextStyle(color: Colors.black)),
));
}