Browse Source

Show dialog in the backup section widget

Vishnu 4 năm trước cách đây
mục cha
commit
c9c2d2ec0e

+ 11 - 101
lib/ui/free_space_page.dart

@@ -1,7 +1,3 @@
-import 'dart:io';
-import 'dart:math';
-
-import 'package:confetti/confetti.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/widgets.dart';
 import 'package:flutter/widgets.dart';
 import 'package:intl/intl.dart';
 import 'package:intl/intl.dart';
@@ -13,7 +9,6 @@ import 'package:photos/ui/loading_widget.dart';
 import 'package:photos/utils/data_util.dart';
 import 'package:photos/utils/data_util.dart';
 import 'package:photos/utils/delete_file_util.dart';
 import 'package:photos/utils/delete_file_util.dart';
 import 'package:photos/utils/dialog_util.dart';
 import 'package:photos/utils/dialog_util.dart';
-import 'package:url_launcher/url_launcher.dart';
 
 
 class FreeSpacePage extends StatefulWidget {
 class FreeSpacePage extends StatefulWidget {
   FreeSpacePage({Key key}) : super(key: key);
   FreeSpacePage({Key key}) : super(key: key);
@@ -165,60 +160,7 @@ class _FreeSpacePageState extends State<FreeSpacePage> {
             child: button(
             child: button(
               "free up " + formatBytes(status.size),
               "free up " + formatBytes(status.size),
               onPressed: () async {
               onPressed: () async {
-                final dialog = createProgressDialog(
-                    context,
-                    "deleting " +
-                        status.localIDs.length.toString() +
-                        " backed up files...");
-                await dialog.show();
-                await deleteLocalFiles(status.localIDs);
-                await dialog.hide();
-                AlertDialog alert = AlertDialog(
-                  title: Text("success"),
-                  content: Text("you have successfully freed up " +
-                      formatBytes(status.size) +
-                      "!"),
-                  actions: [
-                    TextButton(
-                      child: Text(
-                        "rate us",
-                        style: TextStyle(
-                          color: Theme.of(context).buttonColor,
-                        ),
-                      ),
-                      onPressed: () {
-                        if (Platform.isAndroid) {
-                          launch(
-                              "https://play.google.com/store/apps/details?id=io.ente.photos");
-                        } else {
-                          launch(
-                              "https://apps.apple.com/in/app/ente-photos/id1542026904");
-                        }
-                      },
-                    ),
-                    TextButton(
-                      child: Text(
-                        "ok",
-                        style: TextStyle(
-                          color: Colors.white,
-                        ),
-                      ),
-                      onPressed: () {
-                        Navigator.of(context).pop();
-                      },
-                    ),
-                  ],
-                );
-                Navigator.of(context).pop();
-                showConfettiDialog(
-                  context: context,
-                  builder: (BuildContext context) {
-                    return alert;
-                  },
-                  barrierColor: Colors.black87,
-                  confettiAlignment: Alignment.topCenter,
-                  useRootNavigator: false,
-                );
+                await _freeStorage(status);
               },
               },
               fontSize: 18,
               fontSize: 18,
             ),
             ),
@@ -228,47 +170,15 @@ class _FreeSpacePageState extends State<FreeSpacePage> {
     );
     );
   }
   }
 
 
-  Future<T> showConfettiDialog<T>({
-    @required BuildContext context,
-    WidgetBuilder builder,
-    bool barrierDismissible = true,
-    Color barrierColor,
-    bool useSafeArea = true,
-    bool useRootNavigator = true,
-    RouteSettings routeSettings,
-    Alignment confettiAlignment = Alignment.center,
-  }) {
-    final pageBuilder = Builder(
-      builder: builder,
-    );
-    ConfettiController _confettiController =
-        ConfettiController(duration: const Duration(seconds: 1));
-    _confettiController.play();
-    return showDialog(
-      context: context,
-      builder: (BuildContext buildContext) {
-        return Stack(
-          children: [
-            pageBuilder,
-            Align(
-              alignment: confettiAlignment,
-              child: ConfettiWidget(
-                confettiController: _confettiController,
-                blastDirection: pi / 2,
-                emissionFrequency: 0,
-                numberOfParticles: 100, // a lot of particles at once
-                gravity: 1,
-                blastDirectionality: BlastDirectionality.explosive,
-              ),
-            ),
-          ],
-        );
-      },
-      barrierDismissible: barrierDismissible,
-      barrierColor: barrierColor,
-      useSafeArea: useSafeArea,
-      useRootNavigator: useRootNavigator,
-      routeSettings: routeSettings,
-    );
+  Future<void> _freeStorage(BackupStatus status) async {
+    final dialog = createProgressDialog(
+        context,
+        "deleting " +
+            status.localIDs.length.toString() +
+            " backed up files...");
+    await dialog.show();
+    await deleteLocalFiles(status.localIDs);
+    await dialog.hide();
+    Navigator.of(context).pop(status);
   }
   }
 }
 }

+ 55 - 1
lib/ui/settings/backup_section_widget.dart

@@ -2,11 +2,15 @@ import 'dart:io';
 
 
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
 import 'package:photos/core/configuration.dart';
 import 'package:photos/core/configuration.dart';
+import 'package:photos/models/backup_status.dart';
 import 'package:photos/ui/backup_folder_selection_widget.dart';
 import 'package:photos/ui/backup_folder_selection_widget.dart';
 import 'package:photos/ui/free_space_page.dart';
 import 'package:photos/ui/free_space_page.dart';
 import 'package:photos/ui/settings/settings_section_title.dart';
 import 'package:photos/ui/settings/settings_section_title.dart';
 import 'package:photos/ui/settings/settings_text_item.dart';
 import 'package:photos/ui/settings/settings_text_item.dart';
+import 'package:photos/utils/data_util.dart';
+import 'package:photos/utils/dialog_util.dart';
 import 'package:photos/utils/navigation_util.dart';
 import 'package:photos/utils/navigation_util.dart';
+import 'package:url_launcher/url_launcher.dart';
 
 
 class BackupSectionWidget extends StatefulWidget {
 class BackupSectionWidget extends StatefulWidget {
   BackupSectionWidget({Key key}) : super(key: key);
   BackupSectionWidget({Key key}) : super(key: key);
@@ -77,7 +81,10 @@ class BackupSectionWidgetState extends State<BackupSectionWidget> {
           GestureDetector(
           GestureDetector(
             behavior: HitTestBehavior.translucent,
             behavior: HitTestBehavior.translucent,
             onTap: () async {
             onTap: () async {
-              routeToPage(context, FreeSpacePage());
+              BackupStatus status = await routeToPage(context, FreeSpacePage());
+              if (status != null) {
+                _showSpaceFreedDialog(status);
+              }
             },
             },
             child: SettingsTextItem(
             child: SettingsTextItem(
               text: "free up space",
               text: "free up space",
@@ -88,4 +95,51 @@ class BackupSectionWidgetState extends State<BackupSectionWidget> {
       ),
       ),
     );
     );
   }
   }
+
+  void _showSpaceFreedDialog(BackupStatus status) {
+    AlertDialog alert = AlertDialog(
+      title: Text("success"),
+      content: Text(
+          "you have successfully freed up " + formatBytes(status.size) + "!"),
+      actions: [
+        TextButton(
+          child: Text(
+            "rate us",
+            style: TextStyle(
+              color: Theme.of(context).buttonColor,
+            ),
+          ),
+          onPressed: () {
+            Navigator.of(context, rootNavigator: true).pop('dialog');
+            if (Platform.isAndroid) {
+              launch(
+                  "https://play.google.com/store/apps/details?id=io.ente.photos");
+            } else {
+              launch("https://apps.apple.com/in/app/ente-photos/id1542026904");
+            }
+          },
+        ),
+        TextButton(
+          child: Text(
+            "ok",
+            style: TextStyle(
+              color: Colors.white,
+            ),
+          ),
+          onPressed: () {
+            Navigator.of(context, rootNavigator: true).pop('dialog');
+          },
+        ),
+      ],
+    );
+    showConfettiDialog(
+      context: context,
+      builder: (BuildContext context) {
+        return alert;
+      },
+      barrierColor: Colors.black87,
+      confettiAlignment: Alignment.topCenter,
+      useRootNavigator: true,
+    );
+  }
 }
 }

+ 47 - 0
lib/utils/dialog_util.dart

@@ -1,3 +1,6 @@
+import 'dart:math';
+
+import 'package:confetti/confetti.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/widgets.dart';
 import 'package:flutter/widgets.dart';
 import 'package:photos/ui/loading_widget.dart';
 import 'package:photos/ui/loading_widget.dart';
@@ -48,3 +51,47 @@ void showErrorDialog(BuildContext context, String title, String content) {
 void showGenericErrorDialog(BuildContext context) {
 void showGenericErrorDialog(BuildContext context) {
   showErrorDialog(context, "something went wrong", "please try again.");
   showErrorDialog(context, "something went wrong", "please try again.");
 }
 }
+
+Future<T> showConfettiDialog<T>({
+  @required BuildContext context,
+  WidgetBuilder builder,
+  bool barrierDismissible = true,
+  Color barrierColor,
+  bool useSafeArea = true,
+  bool useRootNavigator = true,
+  RouteSettings routeSettings,
+  Alignment confettiAlignment = Alignment.center,
+}) {
+  final pageBuilder = Builder(
+    builder: builder,
+  );
+  ConfettiController _confettiController =
+      ConfettiController(duration: const Duration(seconds: 1));
+  _confettiController.play();
+  return showDialog(
+    context: context,
+    builder: (BuildContext buildContext) {
+      return Stack(
+        children: [
+          pageBuilder,
+          Align(
+            alignment: confettiAlignment,
+            child: ConfettiWidget(
+              confettiController: _confettiController,
+              blastDirection: pi / 2,
+              emissionFrequency: 0,
+              numberOfParticles: 100, // a lot of particles at once
+              gravity: 1,
+              blastDirectionality: BlastDirectionality.explosive,
+            ),
+          ),
+        ],
+      );
+    },
+    barrierDismissible: barrierDismissible,
+    barrierColor: barrierColor,
+    useSafeArea: useSafeArea,
+    useRootNavigator: useRootNavigator,
+    routeSettings: routeSettings,
+  );
+}

+ 3 - 3
lib/utils/navigation_util.dart

@@ -1,7 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
 
 
-void routeToPage(BuildContext context, Widget page) {
-  Navigator.of(context).push(
+Future<T> routeToPage<T extends Object>(BuildContext context, Widget page) {
+  return Navigator.of(context).push(
     _buildPageRoute(page),
     _buildPageRoute(page),
   );
   );
 }
 }
@@ -12,7 +12,7 @@ void replacePage(BuildContext context, Widget page) {
   );
   );
 }
 }
 
 
-PageRouteBuilder<dynamic> _buildPageRoute(Widget page) {
+PageRouteBuilder<T> _buildPageRoute<T extends Object>(Widget page) {
   return PageRouteBuilder(
   return PageRouteBuilder(
     pageBuilder: (BuildContext context, Animation<double> animation,
     pageBuilder: (BuildContext context, Animation<double> animation,
         Animation<double> secondaryAnimation) {
         Animation<double> secondaryAnimation) {