From 1c23e3be2c0a6cf1c11c421a0d44f3f00cbf22a2 Mon Sep 17 00:00:00 2001 From: doodlezucc <electerminator@gmail.com> Date: Wed, 25 Oct 2023 12:54:15 +0200 Subject: [PATCH] display relative week instead of exact date --- lib/toolbar/date_selector.dart | 37 ++++++++++++++++++++++------------ lib/toolbar/toolbar.dart | 2 +- lib/util/date_extension.dart | 4 ++++ 3 files changed, 29 insertions(+), 14 deletions(-) diff --git a/lib/toolbar/date_selector.dart b/lib/toolbar/date_selector.dart index fe49b95..a5152d7 100644 --- a/lib/toolbar/date_selector.dart +++ b/lib/toolbar/date_selector.dart @@ -11,6 +11,26 @@ class DateSelector extends StatelessWidget { final DateSelectedCallback onSelect; final DateTime date; + String get weekRelativeString { + final currentWeekStart = DateTime.now().atStartOfWeek(); + final selectedWeekStart = date.atStartOfWeek(); + + final difference = selectedWeekStart.difference(currentWeekStart); + final differenceInWeeks = (difference.inHours / 24 / 7).round(); + + if (differenceInWeeks >= 2) { + return 'In $differenceInWeeks Wochen'; + } else if (differenceInWeeks == 1) { + return 'Nächste Woche'; + } else if (differenceInWeeks <= -2) { + return 'Vor ${differenceInWeeks.abs()} Wochen'; + } else if (differenceInWeeks == -1) { + return 'Letzte Woche'; + } + + return 'Aktuell'; + } + const DateSelector({ super.key, required this.date, @@ -21,23 +41,14 @@ class DateSelector extends StatelessWidget { const duration = oneWeek; if (forward) { - onSelect(date.add(duration)); + onSelect(date.add(duration).atStartOfWeek()); } else { - onSelect(date.subtract(duration)); + onSelect(date.subtract(duration).atStartOfWeek()); } } void onTap(BuildContext context) async { - final result = await showDatePicker( - context: context, - initialDate: date, - firstDate: DateTime(2000, 1, 1), - lastDate: DateTime.now().add(const Duration(days: 60)), - ); - - if (result != null) { - onSelect(result); - } + onSelect(DateTime.now().atStartOfWeek()); } @override @@ -53,7 +64,7 @@ class DateSelector extends StatelessWidget { child: SizedBox( width: 100, child: Text( - date.format(), + weekRelativeString, textAlign: TextAlign.center, ), ), diff --git a/lib/toolbar/toolbar.dart b/lib/toolbar/toolbar.dart index 1b6726b..1273b0a 100644 --- a/lib/toolbar/toolbar.dart +++ b/lib/toolbar/toolbar.dart @@ -18,8 +18,8 @@ class _ToolbarState extends State<Toolbar> { return Container( color: Theme.of(context).colorScheme.background, child: Row( + mainAxisAlignment: MainAxisAlignment.center, children: [ - Expanded(child: Container()), DateSelector( date: widget.appContext.date.value, onSelect: (v) => setState(() { diff --git a/lib/util/date_extension.dart b/lib/util/date_extension.dart index 2445e58..c7042b8 100644 --- a/lib/util/date_extension.dart +++ b/lib/util/date_extension.dart @@ -22,4 +22,8 @@ extension DateExtension on DateTime { return '$dd.$mm.$year'; } + + DateTime atStartOfWeek() { + return subtract(Duration(days: weekday - 1)); + } } -- GitLab