Преглед изворни кода

Android: Follow systemTheme on longTap on themeSwitchWidget

Neeraj Gupta пре 3 година
родитељ
комит
8e7f1cf28f
1 измењених фајлова са 41 додато и 34 уклоњено
  1. 41 34
      lib/ui/settings/theme_switch_widget.dart

+ 41 - 34
lib/ui/settings/theme_switch_widget.dart

@@ -2,6 +2,7 @@ import 'package:adaptive_theme/adaptive_theme.dart';
 import 'package:animated_toggle_switch/animated_toggle_switch.dart';
 import 'package:flutter/material.dart';
 import 'package:photos/ente_theme_data.dart';
+import 'package:photos/utils/toast_util.dart';
 
 class ThemeSwitchWidget extends StatelessWidget {
   const ThemeSwitchWidget({Key key}) : super(key: key);
@@ -12,41 +13,47 @@ class ThemeSwitchWidget extends StatelessWidget {
     if (Theme.of(context).brightness == Brightness.dark) {
       selectedTheme = 1;
     }
-    return AnimatedToggleSwitch<int>.rolling(
-      current: selectedTheme,
-      values: const [0, 1],
-      onChanged: (i) {
-        debugPrint("Changed to {i}, selectedTheme is {selectedTheme} ");
-        if (i == 0) {
-          AdaptiveTheme.of(context).setLight();
-        } else {
-          AdaptiveTheme.of(context).setDark();
-        }
+    return GestureDetector(
+      onLongPress: () {
+        AdaptiveTheme.of(context).setSystem();
+        showShortToast(context, 'Following system theme');
       },
-      iconBuilder: (i, size, foreground) {
-        final color = selectedTheme == i
-            ? Theme.of(context).colorScheme.themeSwitchActiveIconColor
-            : Theme.of(context).colorScheme.themeSwitchInactiveIconColor;
-        if (i == 0) {
-          return Icon(
-            Icons.light_mode,
-            color: color,
-          );
-        } else {
-          return Icon(
-            Icons.dark_mode,
-            color: color,
-          );
-        }
-      },
-      height: 36,
-      indicatorSize: const Size(36, 36),
-      indicatorColor: Theme.of(context).colorScheme.themeSwitchIndicatorColor,
-      borderColor: Theme.of(context)
-          .colorScheme
-          .themeSwitchInactiveIconColor
-          .withOpacity(0.1),
-      borderWidth: 1,
+      child: AnimatedToggleSwitch<int>.rolling(
+        current: selectedTheme,
+        values: const [0, 1],
+        onChanged: (i) {
+          debugPrint("Changed to {i}, selectedTheme is {selectedTheme} ");
+          if (i == 0) {
+            AdaptiveTheme.of(context).setLight();
+          } else {
+            AdaptiveTheme.of(context).setDark();
+          }
+        },
+        iconBuilder: (i, size, foreground) {
+          final color = selectedTheme == i
+              ? Theme.of(context).colorScheme.themeSwitchActiveIconColor
+              : Theme.of(context).colorScheme.themeSwitchInactiveIconColor;
+          if (i == 0) {
+            return Icon(
+              Icons.light_mode,
+              color: color,
+            );
+          } else {
+            return Icon(
+              Icons.dark_mode,
+              color: color,
+            );
+          }
+        },
+        height: 36,
+        indicatorSize: const Size(36, 36),
+        indicatorColor: Theme.of(context).colorScheme.themeSwitchIndicatorColor,
+        borderColor: Theme.of(context)
+            .colorScheme
+            .themeSwitchInactiveIconColor
+            .withOpacity(0.1),
+        borderWidth: 1,
+      ),
     );
   }
 }