Commit 5303536

derdilla <derdilla06@gmail.com>
2023-05-29 06:17:58
add animation speed setting
1 parent 9a7565d
Changed files (3)
lib/model/settings_store.dart
@@ -182,6 +182,13 @@ class Settings extends ChangeNotifier {
     notifyListeners();
   }
 
+  int get animationSpeed {
+    return _prefs.getInt('animationSpeed') ?? 150;
+  }
+  set animationSpeed(int newSpeed) {
+    _prefs.setInt('animationSpeed', newSpeed);
+    notifyListeners();
+  }
 }
 
 class TimeStep {
lib/screens/home.dart
@@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
 import 'package:blood_pressure_app/components/measurement_graph.dart';
 import 'package:blood_pressure_app/components/measurement_list.dart';
 import 'package:flutter/services.dart';
+import 'package:path/path.dart';
 import 'package:provider/provider.dart';
 
 
@@ -69,7 +70,7 @@ class AppHome extends StatelessWidget {
                       onPressed: () {
                         Navigator.push(
                           context,
-                          _buildTransition(const AddMeasurementPage()),
+                          _buildTransition(const AddMeasurementPage(), settings.animationSpeed),
                         );
                       },
                     ),
@@ -89,7 +90,7 @@ class AppHome extends StatelessWidget {
                       onPressed: () {
                         Navigator.push(
                           context,
-                          _buildTransition(const StatisticsPage())
+                          _buildTransition(const StatisticsPage(), settings.animationSpeed)
                         );
                       },
                     ),
@@ -109,7 +110,7 @@ class AppHome extends StatelessWidget {
                       onPressed: () {
                         Navigator.push(
                           context,
-                          _buildTransition(const SettingsPage())
+                          _buildTransition(const SettingsPage(), settings.animationSpeed)
                         );
                       },
                     ),
@@ -123,19 +124,17 @@ class AppHome extends StatelessWidget {
   }
 }
 
-PageRouteBuilder _buildTransition(Widget page) {
-  return PageRouteBuilder(
-    transitionDuration: const Duration(milliseconds: 150),
-    pageBuilder: (context, animation, secondaryAnimation) => page,
-    transitionsBuilder: (context, animation, secondaryAnimation, child) {
-      const begin = Offset(0.9, 0.6);
-      const end = Offset.zero;
-      final tween = Tween(begin: begin, end: end);
-      final offsetAnimation = animation.drive(tween);
-      return SlideTransition(
-        position: offsetAnimation,
-        child: child,
-      );
-    }
-  );
+PageRoute _buildTransition(Widget page, int duration) {
+  return TimedMaterialPageRouter(duration: Duration(milliseconds: duration), builder: (context) => page);
+}
+
+class TimedMaterialPageRouter extends MaterialPageRoute {
+  Duration _duration = Duration.zero;
+  
+  TimedMaterialPageRouter({required WidgetBuilder builder, required Duration duration}) : super(builder: builder) {
+    _duration = duration;
+  }
+
+  @override
+  Duration get transitionDuration => _duration;
 }
\ No newline at end of file
lib/screens/settings.dart
@@ -89,6 +89,17 @@ class SettingsPage extends StatelessWidget {
                     end: 5,
                     stepSize: 1,
                   ),
+                  SliderSettingsTile(
+                    title: const Text('animation duration'),
+                    leading: const Icon(Icons.speed),
+                    onChanged: (double value) {
+                      settings.animationSpeed = value.toInt();
+                    },
+                    initialValue: settings.animationSpeed.toDouble(),
+                    start: 0,
+                    end: 1000,
+                    stepSize: 50,
+                  ),
                   ColorSelectionSettingsTile(
                       onMainColorChanged: (color) => settings.accentColor = settings.createMaterialColor((color ?? Colors.teal).value),
                       initialColor: settings.accentColor,