summaryrefslogtreecommitdiff
path: root/lib/screens/events_screen.dart
diff options
context:
space:
mode:
Diffstat (limited to 'lib/screens/events_screen.dart')
-rw-r--r--lib/screens/events_screen.dart87
1 files changed, 68 insertions, 19 deletions
diff --git a/lib/screens/events_screen.dart b/lib/screens/events_screen.dart
index 0b78fbe..9183e5e 100644
--- a/lib/screens/events_screen.dart
+++ b/lib/screens/events_screen.dart
@@ -1,6 +1,10 @@
import 'package:flutter/material.dart';
+import 'package:pmsna1/utils.dart';
+import 'package:provider/provider.dart';
import 'package:table_calendar/table_calendar.dart';
+import '../models/event.dart';
+import '../providers/events_provider.dart';
import '../widgets/event_list.dart';
enum Vista { calendario, lista }
@@ -18,8 +22,32 @@ class _EventsScreenState extends State<EventsScreen> {
DateTime _focusedDay = DateTime.now();
CalendarFormat _calendarFormat = CalendarFormat.month;
+ Color? getEventColor(Event e) {
+ DateTime today = DateTime.now();
+ if (daysBetween(today, e.date) > 0 && daysBetween(today, e.date) <= 2) {
+ // 7. Cuando el evento esté a 2 días de realizarse, la
+ // celda del calendario deberá pintarse de color amarillo
+ return Colors.yellow;
+ } else if (isSameDay(e.date, today)) {
+ // 8. Cuando el evento sea el día en curso cambiará a un
+ // color verde
+ return Colors.green;
+ } else if (today.isAfter(e.date) && !e.completed) {
+ // 9. Cuando el evento ya haya pasado y no se haya
+ // completado, entonces se marcará en rojo
+ return Colors.red;
+ } else if (today.isAfter(e.date) && e.completed) {
+ // 10. Si el evento ya pasó y está como completado se
+ // dejará en verde
+ return Colors.green;
+ }
+ return null;
+ }
+
@override
Widget build(BuildContext context) {
+ EventsProvider provider = Provider.of<EventsProvider>(context);
+
return Scaffold(
appBar: AppBar(
title: const Text('Eventos'),
@@ -47,25 +75,46 @@ class _EventsScreenState extends State<EventsScreen> {
),
body: Container(
child: vista == Vista.calendario
- ? TableCalendar(
- firstDay: DateTime.fromMicrosecondsSinceEpoch(0),
- lastDay: DateTime.utc(9000, 12, 31),
- focusedDay: _focusedDay,
- selectedDayPredicate: (day) {
- return isSameDay(_selectedDay, day);
- },
- onDaySelected: (selectedDay, focusedDay) {
- setState(() {
- _selectedDay = selectedDay;
- _focusedDay = focusedDay;
- });
- },
- calendarFormat: _calendarFormat,
- onFormatChanged: (format) {
- setState(() {
- _calendarFormat = format;
- });
- },
+ ? SingleChildScrollView(
+ child: TableCalendar(
+ firstDay: DateTime.fromMicrosecondsSinceEpoch(0),
+ lastDay: DateTime.utc(9000, 12, 31),
+ focusedDay: _focusedDay,
+ selectedDayPredicate: (day) {
+ return isSameDay(_selectedDay, day);
+ },
+ onDaySelected: (selectedDay, focusedDay) {
+ setState(() {
+ _selectedDay = selectedDay;
+ _focusedDay = focusedDay;
+ });
+ },
+ calendarFormat: _calendarFormat,
+ onFormatChanged: (format) {
+ setState(() {
+ _calendarFormat = format;
+ });
+ },
+ eventLoader: (day) => provider.getEventsForDay(day),
+ // Source: https://stackoverflow.com/a/69036998
+ calendarBuilders: CalendarBuilders(
+ singleMarkerBuilder: (context, day, event) {
+ if (event == null) return null;
+ Event e = event as Event;
+ Color color = getEventColor(e) ??
+ Theme.of(context).colorScheme.onSurface;
+ return Container(
+ decoration: BoxDecoration(
+ shape: BoxShape.circle,
+ color: color,
+ ),
+ width: 5.0,
+ height: 5.0,
+ margin: const EdgeInsets.symmetric(horizontal: 1.5),
+ );
+ },
+ ),
+ ),
)
: const EventList()),
floatingActionButton: FloatingActionButton.extended(