diff --git a/lib/extensions/date.dart b/lib/extensions/date.dart index f993412..46902af 100644 --- a/lib/extensions/date.dart +++ b/lib/extensions/date.dart @@ -2,4 +2,7 @@ extension DateExtensions on DateTime { bool isSameDay(final DateTime other) { return year == other.year && month == other.month && day == other.day; } + + DateTime asNormalizedDate() => DateTime(year, month, day); + DateTime asNormalizedDateTime() => DateTime(year, month, day, hour, minute); } diff --git a/lib/managers/calendar_manager.dart b/lib/managers/calendar_manager.dart index d14f829..a286f21 100644 --- a/lib/managers/calendar_manager.dart +++ b/lib/managers/calendar_manager.dart @@ -1,3 +1,4 @@ +import 'package:share_location/extensions/date.dart'; import 'package:share_location/foreign_types/memory.dart'; import 'package:share_location/helpers/iterate_months.dart'; @@ -8,15 +9,12 @@ class CalendarManager { required final List memories, }) : _values = mapFromMemoriesList(memories); - static DateTime createDateKey(final DateTime date) => - DateTime(date.year, date.month, date.day); - static Map> mapFromMemoriesList( final List memories) { final map = >{}; for (final memory in memories) { - final key = createDateKey(memory.creationDate); + final key = memory.creationDate.asNormalizedDate(); if (map.containsKey(key)) { map[key]!.add(memory.id); diff --git a/lib/models/timeline.dart b/lib/models/timeline.dart index 4c086ff..a3c77b9 100644 --- a/lib/models/timeline.dart +++ b/lib/models/timeline.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:math'; import 'package:property_change_notifier/property_change_notifier.dart'; +import 'package:share_location/extensions/date.dart'; import 'package:share_location/foreign_types/memory.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; @@ -43,9 +44,6 @@ class TimelineModel extends PropertyChangeNotifier { _timeline.removeWhere((key, memories) => memories.isEmpty); } - static DateTime createDateKey(final DateTime date) => - DateTime(date.year, date.month, date.day); - void restoreOverlay() => setShowOverlay(true); void hideOverlay() => setShowOverlay(false); @@ -55,7 +53,7 @@ class TimelineModel extends PropertyChangeNotifier { final map = >{}; for (final memory in memories) { - final key = createDateKey(memory.creationDate); + final key = memory.creationDate.asNormalizedDate(); if (map.containsKey(key)) { map[key]!.add(memory); diff --git a/lib/widgets/calendar_month.dart b/lib/widgets/calendar_month.dart index 8232047..1973155 100644 --- a/lib/widgets/calendar_month.dart +++ b/lib/widgets/calendar_month.dart @@ -5,6 +5,7 @@ import 'package:flutter_calendar_widget/flutter_calendar_widget.dart'; import 'package:intl/intl.dart'; import 'package:share_location/constants/spacing.dart'; import 'package:share_location/constants/values.dart'; +import 'package:share_location/extensions/date.dart'; import 'package:share_location/screens/timeline_screen.dart'; import 'package:share_location/widgets/delay_render.dart'; import 'package:share_location/widgets/fade_and_move_in_animation.dart'; @@ -113,6 +114,8 @@ class CalendarMonth extends StatelessWidget { DateTime get firstDate => DateTime(year, month, 1); DateTime get lastDate => DateTime(year, month, DateUtils.getDaysInMonth(year, month)); + bool doesDateExist(final DateTime date) => + dayAmountMap.keys.contains(date.asNormalizedDate()); @override Widget build(BuildContext context) { @@ -139,6 +142,10 @@ class CalendarMonth extends StatelessWidget { maxDate: lastDate, startingDayOfWeek: DayOfWeek.mon, onDayPressed: (date) { + if (!doesDateExist(date)) { + return; + } + Navigator.push( context, MaterialPageRoute(