diff --git a/lib/toolbar/date_selector.dart b/lib/toolbar/date_selector.dart index fe49b95e394556c1efd17814ab5b6a1b02a42281..a5152d7ef3acc15fdeea8acc130a3fb6279d9146 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 1b6726b13c4fcb2d60d6a9913ba089ecc9bf3f67..1273b0a29d8497611d91b2d3e56c29bf57022e37 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 2445e582e8de06b8a97a88c7807a6055e37f18c3..c7042b84524d9d921a1c0124b5abdda8a2652cb3 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)); + } }