Commit 8a66fb2

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-08-23 06:33:53
fix woy edge cases
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 2c7a9a1
Changed files (3)
app/lib/data_util/display_interval_picker.dart
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
 import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 import 'package:intl/intl.dart';
 import 'package:provider/provider.dart';
+import 'package:week_of_year/date_week_extensions.dart';
 
 /// A selector for [IntervallStorage] values.
 ///
@@ -18,23 +19,19 @@ class IntervalPicker extends StatelessWidget {
   
   @override
   Widget build(BuildContext context) => Consumer<IntervallStoreManager>(
-    builder: (context, intervallStoreManager, child) {
+    builder: (context, intervallStoreManager, _) {
       final intervall = intervallStoreManager.get(type);
       final loc = AppLocalizations.of(context)!;
+      final start = intervall.currentRange.start;
+      final end = intervall.currentRange.end;
       final String intervallDisplayText = switch (intervall.stepSize) {
-        TimeStep.day => DateFormat.yMMMd(loc.localeName).format(intervall.currentRange.start),
-        TimeStep.week => (){
-          final dayOfYear = int.parse(DateFormat('D').format(intervall.currentRange.start));
-          final weekOfYear = ((dayOfYear - intervall.currentRange.start.weekday + 10) / 7).floor();
-          return loc.weekOfYear(weekOfYear, intervall.currentRange.start.year);
-        }(),
-        TimeStep.month => DateFormat.yMMM(loc.localeName).format(intervall.currentRange.start),
-        TimeStep.year => DateFormat.y(loc.localeName).format(intervall.currentRange.start),
+        TimeStep.day => DateFormat.yMMMd().format(start),
+        TimeStep.week => loc.weekOfYear(start.weekOfYear, start.year),
+        TimeStep.month => DateFormat.yMMM().format(intervall.currentRange.start),
+        TimeStep.year => DateFormat.y().format(intervall.currentRange.start),
         TimeStep.lifetime => '-',
-        TimeStep.last7Days || TimeStep.last30Days || TimeStep.custom => (){
-          final f = DateFormat.yMMMd(loc.localeName);
-          return '${f.format(intervall.currentRange.start)} - ${f.format(intervall.currentRange.end)}';
-        }(),
+        TimeStep.last7Days || TimeStep.last30Days || TimeStep.custom =>
+          '${DateFormat.yMMMd().format(start)} - ${DateFormat.yMMMd().format(end)}',
       };
       return Column(
         children: [
@@ -42,15 +39,11 @@ class IntervalPicker extends StatelessWidget {
           const SizedBox(height: 2),
           Row(
             children: [
-              Expanded(
-                flex: 3,
-                child: MaterialButton(
-                  onPressed: () => intervall.moveDataRangeByStep(-1),
-                  child: const Icon(Icons.chevron_left, size: 48),
-                ),
+              IconButton(
+                onPressed: () => intervall.moveDataRangeByStep(-1),
+                icon: const Icon(Icons.chevron_left, size: 48),
               ),
               Expanded(
-                flex: 4,
                 child: DropdownButton<TimeStep>(
                   value: intervall.stepSize,
                   isExpanded: true,
@@ -75,12 +68,9 @@ class IntervalPicker extends StatelessWidget {
                   ]
                 ),
               ),
-              Expanded(
-                flex: 3,
-                child: MaterialButton(
-                  onPressed: () => intervall.moveDataRangeByStep(1),
-                  child: const Icon(Icons.chevron_right, size: 48),
-                ),
+              MaterialButton(
+                onPressed: () => intervall.moveDataRangeByStep(1),
+                child: const Icon(Icons.chevron_right, size: 48),
               ),
             ],
           ),
app/pubspec.lock
@@ -1165,6 +1165,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "1.2.1"
+  week_of_year:
+    dependency: "direct main"
+    description:
+      name: week_of_year
+      sha256: "578d2a9c7d93264b363ff3b1789e1acbae42295e803e70d362cfa07fcb73d3d1"
+      url: "https://pub.dev"
+    source: hosted
+    version: "2.2.0"
   win32:
     dependency: transitive
     description:
app/pubspec.yaml
@@ -24,6 +24,7 @@ dependencies:
   path: ^1.9.0
   pdf: ^3.11.0
   package_info_plus: ^8.0.1
+  week_of_year: 2.2.0
   sqflite: ^2.3.3+1
   shared_preferences: ^2.3.0
   url_launcher: ^6.3.0