forked from eatvio/eatvio_app
fix(calendar): Finished days fix
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user