From 6d81e2371f9283a3aaedbaeede0e40aab4420ed4 Mon Sep 17 00:00:00 2001 From: Jagandeep Brar Date: Mon, 19 Apr 2021 19:22:05 -0500 Subject: [PATCH] fix(Calendar): Upgrade to table_calendar 3.0.0, Set calendar range bounds (#435) * chore(flutter): Update table_calendar to 3.0.0 * fix(Dashboard): Update calendar to support table_calendar 3.0.0, set bounds for calendar * chore: Update CHANGELOG.md --- CHANGELOG.md | 7 ++ .../routes/calendar/widgets/calendar.dart | 101 +++++++++++------- pubspec.lock | 4 +- pubspec.yaml | 98 +++++++++-------- 4 files changed, 120 insertions(+), 90 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d0847ae0..60223d1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ ## v5.0.0 (50000018) +#### TWEAKS +- `[Dashboard]` (Calendar) Set bounds to calendar +- `[Dashboard]` (Calendar) Made the styling for calendar slightly more consistent + +#### FIXES +- `[Dashboard]` (Calendar) Stored current date would not update on date change + #### PLATFORM-SPECIFIC - `[macOS]` (fix) Utilize native filesystem dialogs for selecting and saving files diff --git a/lib/modules/dashboard/routes/calendar/widgets/calendar.dart b/lib/modules/dashboard/routes/calendar/widgets/calendar.dart index d9bde899..48649ee6 100644 --- a/lib/modules/dashboard/routes/calendar/widgets/calendar.dart +++ b/lib/modules/dashboard/routes/calendar/widgets/calendar.dart @@ -4,6 +4,7 @@ import 'package:intl/intl.dart'; import 'package:lunasea/core.dart'; import 'package:lunasea/modules/dashboard.dart'; import 'package:table_calendar/table_calendar.dart'; +import 'package:simple_gesture_detector/simple_gesture_detector.dart'; class DashboardCalendarWidget extends StatefulWidget { final Map events; @@ -20,6 +21,8 @@ class DashboardCalendarWidget extends StatefulWidget { class _State extends State { final GlobalKey _scaffoldKey = GlobalKey(); DateTime _today; + DateTime _selected; + CalendarFormat _calendarFormat; final TextStyle dayTileStyle = TextStyle( color: Colors.white, @@ -43,26 +46,22 @@ class _State extends State { ); List _selectedEvents; - CalendarController _calendarController; @override void initState() { super.initState(); - _calendarController = CalendarController(); - _today = context.read().today.lunaFloor; - _selectedEvents = widget.events[_today] ?? []; + DateTime _floored = context.read().today.lunaFloor; + _selected = _floored; + _today = _floored; + _selectedEvents = widget.events[_floored] ?? []; + _calendarFormat = (DashboardDatabaseValue.CALENDAR_STARTING_SIZE.data as CalendarStartingSize).data; } - @override - void dispose() { - _calendarController.dispose(); - super.dispose(); - } - - void _onDaySelected(DateTime day, List events, List _) { + void _onDaySelected(DateTime selected, DateTime focused) { HapticFeedback.selectionClick(); - setState(() { - _selectedEvents = events; + if(mounted) setState(() { + _selected = selected.lunaFloor; + _selectedEvents = widget.events[selected.lunaFloor]; }); } @@ -97,44 +96,70 @@ class _State extends State { DashboardDatabaseValue.CALENDAR_STARTING_SIZE.key, ]), builder: (context, box, _) { + DateTime firstDay = context.watch().today.subtract( + Duration(days: DashboardDatabaseValue.CALENDAR_DAYS_PAST.data), + ); + DateTime lastDay = context.watch().today.add( + Duration(days: DashboardDatabaseValue.CALENDAR_DAYS_FUTURE.data), + ); return SafeArea( child: LunaCard( context: context, child: Padding( child: TableCalendar( rowHeight: 48.0, - calendarController: _calendarController, - events: widget.events, - headerVisible: false, - startDay: DateTime.now().subtract(Duration(days: DashboardDatabaseValue.CALENDAR_DAYS_PAST.data)), - endDay: DateTime.now().add(Duration(days: DashboardDatabaseValue.CALENDAR_DAYS_FUTURE.data)), - startingDayOfWeek: (DashboardDatabaseValue.CALENDAR_STARTING_DAY.data as CalendarStartingDay).data, - calendarStyle: CalendarStyle( - selectedColor: LunaColours.accent.withOpacity(0.25), - markersMaxAmount: 1, - markersColor: LunaColours.accent, - weekendStyle: dayTileStyle, - weekdayStyle: dayTileStyle, - unavailableStyle: unavailableTitleStyle, - outsideStyle: outsideDayTileStyle, - selectedStyle: dayTileStyle, - outsideWeekendStyle: outsideDayTileStyle, - renderDaysOfWeek: true, - highlightToday: true, - todayColor: LunaColours.primary, - todayStyle: dayTileStyle, - outsideDaysVisible: false, + rangeSelectionMode: RangeSelectionMode.disabled, + simpleSwipeConfig: SimpleSwipeConfig( + verticalThreshold: 10.0, ), + focusedDay: _selected, + firstDay: firstDay, + lastDay: lastDay, + //events: widget.events, + headerVisible: false, + startingDayOfWeek: (DashboardDatabaseValue.CALENDAR_STARTING_DAY.data as CalendarStartingDay).data, + selectedDayPredicate: (date) => date?.lunaFloor == _selected?.lunaFloor, + calendarStyle: CalendarStyle( + markersMaxCount: 1, + isTodayHighlighted: true, + outsideDaysVisible: false, + selectedDecoration: BoxDecoration( + color: LunaColours.accent.withOpacity(0.20), + shape: BoxShape.circle, + ), + markerDecoration: BoxDecoration( + color: LunaColours.accent, + shape: BoxShape.circle, + ), + todayDecoration: BoxDecoration( + color: LunaColours.primary.withOpacity(0.60), + shape: BoxShape.circle, + ), + weekendTextStyle: dayTileStyle, + defaultTextStyle: dayTileStyle, + disabledTextStyle: unavailableTitleStyle, + outsideTextStyle: outsideDayTileStyle, + selectedTextStyle: TextStyle( + color: LunaColours.accent, + fontWeight: LunaUI.FONT_WEIGHT_BOLD, + ), + todayTextStyle: dayTileStyle, + ), + onFormatChanged: (format) => setState(() => _calendarFormat = format), daysOfWeekStyle: DaysOfWeekStyle( weekendStyle: weekdayTitleStyle, weekdayStyle: weekdayTitleStyle, ), - initialCalendarFormat: (DashboardDatabaseValue.CALENDAR_STARTING_SIZE.data as CalendarStartingSize).data, - availableCalendarFormats: const { - CalendarFormat.month : 'Month', CalendarFormat.twoWeeks : '2 Weeks', CalendarFormat.week : 'Week'}, + eventLoader: (date) => widget.events[date.lunaFloor], + calendarFormat: _calendarFormat, + availableCalendarFormats: { + CalendarFormat.month : 'Month', + CalendarFormat.twoWeeks : '2 Weeks', + CalendarFormat.week : 'Week', + }, onDaySelected: _onDaySelected, ), - padding: EdgeInsets.only(top: 16.0, bottom: 8.0), + padding: LunaUI.MARGIN_DEFAULT.subtract(EdgeInsets.symmetric(horizontal: 6.0)), ), ), ); diff --git a/pubspec.lock b/pubspec.lock index eb072e9e..13b55257 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1030,7 +1030,7 @@ packages: name: simple_gesture_detector url: "https://pub.dartlang.org" source: hosted - version: "0.1.6" + version: "0.2.0" sky_engine: dependency: transitive description: flutter @@ -1112,7 +1112,7 @@ packages: name: table_calendar url: "https://pub.dartlang.org" source: hosted - version: "2.3.3" + version: "3.0.0" tautulli: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index c4ba6c2d..ff6e5692 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -8,62 +8,60 @@ environment: dependencies: flutter: sdk: flutter - badges: ^1.2.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - cloud_firestore: ^1.0.5 # ANDROID IOS MACOS WEB - connectivity_plus: ^1.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - convert: ^3.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - dio: ^4.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - easy_localization: ^3.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - encrypt: ^5.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - expandable: ^5.0.1 # ANDROID IOS LINUX MACOS WEB WINDOWS - file_picker: ^3.0.1 # ANDROID IOS WEB - file_selector_macos: ^0.0.4 # MACOS - file_selector_platform_interface: ^2.0.2 # ANDROID IOS LINUX MACOS WEB WINDOWS - firebase_analytics: ^8.0.0 # ANDROID IOS WEB - firebase_auth: ^1.1.0 # ANDROID IOS MACOS WEB - firebase_core: ^1.0.3 # ANDROID IOS MACOS WEB - firebase_crashlytics: ^2.0.0 # ANDROID IOS MACOS - firebase_messaging: ^9.1.1 # ANDROID IOS MACOS WEB - firebase_storage: ^8.0.3 # ANDROID IOS MACOS WEB - flash: ^1.5.1 # ANDROID IOS LINUX MACOS WEB WINDOWS - fluro: ^2.0.3 # ANDROID IOS LINUX MACOS WEB WINDOWS - flutter_spinkit: ^5.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - fl_chart: ^0.35.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + badges: ^1.2.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + cloud_firestore: ^1.0.5 # ANDROID IOS MACOS WEB + connectivity_plus: ^1.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + convert: ^3.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + dio: ^4.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + easy_localization: ^3.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + encrypt: ^5.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + expandable: ^5.0.1 # ANDROID IOS LINUX MACOS WEB WINDOWS + file_picker: ^3.0.1 # ANDROID IOS WEB + file_selector_macos: ^0.0.4 # MACOS + file_selector_platform_interface: ^2.0.2 # ANDROID IOS LINUX MACOS WEB WINDOWS + firebase_analytics: ^8.0.0 # ANDROID IOS WEB + firebase_auth: ^1.1.0 # ANDROID IOS MACOS WEB + firebase_core: ^1.0.3 # ANDROID IOS MACOS WEB + firebase_crashlytics: ^2.0.0 # ANDROID IOS MACOS + firebase_messaging: ^9.1.1 # ANDROID IOS MACOS WEB + firebase_storage: ^8.0.3 # ANDROID IOS MACOS WEB + flash: ^1.5.1 # ANDROID IOS LINUX MACOS WEB WINDOWS + fluro: ^2.0.3 # ANDROID IOS LINUX MACOS WEB WINDOWS + flutter_spinkit: ^5.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + fl_chart: ^0.35.0 # ANDROID IOS LINUX MACOS WEB WINDOWS # font_awesome_flutter: # ANDROID IOS LINUX MACOS WEB WINDOWS # path: vendor/font_awesome_flutter - google_nav_bar: ^5.0.3 # ANDROID IOS LINUX MACOS WEB WINDOWS - hive: ^2.0.3 # ANDROID IOS LINUX MACOS WEB WINDOWS - hive_flutter: ^1.0.0 # ANDROID IOS LINUX MACOS WINDOWS - in_app_purchase: ^0.5.2 # ANDROID IOS - infinite_scroll_pagination: ^3.0.1 # ANDROID IOS LINUX MACOS WEB WINDOWS - intl: ^0.17.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - modal_bottom_sheet: ^2.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - network_info_plus: ^1.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - overseerr: ^0.0.1-pre.5 # ANDROID IOS LINUX MACOS WEB WINDOWS - package_info_plus: ^1.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - path_provider: ^2.0.1 # ANDROID IOS LINUX MACOS WINDOWS - percent_indicator: ^3.0.1 # ANDROID IOS LINUX MACOS WEB WINDOWS - provider: ^5.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - quick_actions: ^0.6.0 # ANDROID IOS - radarr: ^2.1.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - # radarr: - # path: /Users/jagandeepbrar/Git/Packages/radarr - share_plus: ^2.0.1 # ANDROID IOS LINUX MACOS WEB WINDOWS - sonarr: ^2.0.1 # ANDROID IOS LINUX MACOS WEB WINDOWS - stack_trace: ^1.10.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - supercharged: ^2.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - table_calendar: ^2.3.3 # ANDROID IOS LINUX MACOS WEB WINDOWS - tautulli: ^2.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - tuple: ^2.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS - url_launcher: ^6.0.3 # ANDROID IOS LINUX MACOS WEB WINDOWS - uuid: ^3.0.4 # ANDROID IOS LINUX MACOS WEB WINDOWS - wake_on_lan: ^2.0.1+1 # ANDROID IOS LINUX MACOS WINDOWS - window_size: + google_nav_bar: ^5.0.3 # ANDROID IOS LINUX MACOS WEB WINDOWS + hive: ^2.0.3 # ANDROID IOS LINUX MACOS WEB WINDOWS + hive_flutter: ^1.0.0 # ANDROID IOS LINUX MACOS WINDOWS + in_app_purchase: ^0.5.2 # ANDROID IOS + infinite_scroll_pagination: ^3.0.1 # ANDROID IOS LINUX MACOS WEB WINDOWS + intl: ^0.17.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + modal_bottom_sheet: ^2.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + network_info_plus: ^1.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + overseerr: ^0.0.1-pre.5 # ANDROID IOS LINUX MACOS WEB WINDOWS + package_info_plus: ^1.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + path_provider: ^2.0.1 # ANDROID IOS LINUX MACOS WINDOWS + percent_indicator: ^3.0.1 # ANDROID IOS LINUX MACOS WEB WINDOWS + provider: ^5.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + quick_actions: ^0.6.0 # ANDROID IOS + radarr: ^2.1.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + share_plus: ^2.0.1 # ANDROID IOS LINUX MACOS WEB WINDOWS + sonarr: ^2.0.1 # ANDROID IOS LINUX MACOS WEB WINDOWS + stack_trace: ^1.10.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + supercharged: ^2.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + table_calendar: ^3.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + tautulli: ^2.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + tuple: ^2.0.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + url_launcher: ^6.0.3 # ANDROID IOS LINUX MACOS WEB WINDOWS + uuid: ^3.0.4 # ANDROID IOS LINUX MACOS WEB WINDOWS + wake_on_lan: ^2.0.1+1 # ANDROID IOS LINUX MACOS WINDOWS + window_size: # LINUX MACOS WINDOWS git: url: git://github.com/google/flutter-desktop-embedding.git path: plugins/window_size ref: 57a2cd88486105d3d813583339eb0e23c9bfd6d2 - xml: ^5.1.0 # ANDROID IOS LINUX MACOS WEB WINDOWS + xml: ^5.1.0 # ANDROID IOS LINUX MACOS WEB WINDOWS dev_dependencies: build_runner: ^1.12.2