fix(calendar): Finished days fix

This commit is contained in:
2024-07-25 16:53:49 +03:00
parent 102154ddb2
commit 56e5cdbe16
8 changed files with 132 additions and 483 deletions

View File

@@ -1,5 +1,6 @@
// ignore_for_file: unused_local_variable
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';
@@ -7,7 +8,6 @@ import 'package:table_calendar/table_calendar.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_form_builder/flutter_form_builder.dart';
import 'dart:collection';
// ignore: must_be_immutable
class CalendarScreen extends StatelessWidget {
@@ -104,60 +104,48 @@ class CalendarScreen extends StatelessWidget {
firstDay: DateTime.utc(2010, 10, 16),
lastDay: DateTime.utc(2030, 3, 14),
focusedDay: DateTime.now(),
eventLoader: (day) {
if (day.weekday == DateTime.monday) {
return [Event('Cyclic event')];
}
return [];
},
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),
),
),
);
}
}
/// Example event class.
class Event {
final String title;
Widget _buildCellDate(DateTime day, CalendarStateLoaded state, {DateTime? focusedDay}) {
final String dayString = day.toIso8601String().split('T').first;
final List<CalendarModel> calendarModels = state.calendarList;
const Event(this.title);
// Находим первую модель, соответствующую дате
final CalendarModel model = calendarModels.firstWhere((model) => model.date == dayString, orElse: () => CalendarModel(date: dayString, diary: {}));
@override
String toString() => title;
}
Color? bgclr; // Объявляем переменную bgclr здесь
/// Example events.
///
/// Using a [LinkedHashMap] is highly recommended if you decide to use a map.
final kEvents = LinkedHashMap<DateTime, List<Event>>(
equals: isSameDay,
hashCode: getHashCode,
)..addAll(_kEventSource);
if (model.diary is Map<String, dynamic>) {
final Map<String, dynamic> diary = model.diary as Map<String, dynamic>;
final _kEventSource = Map.fromIterable(List.generate(50, (index) => index),
key: (item) => DateTime.utc(kFirstDay.year, kFirstDay.month, item * 5),
value: (item) => List.generate(
item % 4 + 1, (index) => Event('Event $item | ${index + 1}')))
..addAll({
kToday: [
Event('Today\'s Event 1'),
Event('Today\'s Event 2'),
],
});
if (diary['state'] == "started") {
bgclr = Colors.grey;
} else if (diary['state'] == "finished") {
bgclr = Colors.green;
} else {
bgclr = Colors.white;
}
} else {
bgclr = Colors.white; // Значение по умолчанию, если diary не является Map
}
int getHashCode(DateTime key) {
return key.day * 1000000 + key.month * 10000 + key.year;
}
/// Returns a list of [DateTime] objects from [first] to [last], inclusive.
List<DateTime> daysInRange(DateTime first, DateTime last) {
final dayCount = last.difference(first).inDays + 1;
return List.generate(
dayCount,
(index) => DateTime.utc(first.year, first.month, first.day + index),
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)),
);
}
final kToday = DateTime.now();
final kFirstDay = DateTime(kToday.year, kToday.month - 3, kToday.day);
final kLastDay = DateTime(kToday.year, kToday.month + 3, kToday.day);