Browse Source

Setup a separate page to deal with the first load

Vishnu Mohandas 4 years ago
parent
commit
899e2cf26a

+ 10 - 43
lib/ui/grant_permissions_widget.dart → lib/ui/grant_permissions_page.dart

@@ -1,48 +1,9 @@
-import 'dart:async';
-
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
-import 'package:logging/logging.dart';
 import 'package:photo_manager/photo_manager.dart';
 import 'package:photo_manager/photo_manager.dart';
-import 'package:photos/core/event_bus.dart';
-import 'package:photos/events/sync_status_update_event.dart';
 import 'package:photos/services/sync_service.dart';
 import 'package:photos/services/sync_service.dart';
-import 'package:photos/ui/backup_folder_selection_widget.dart';
-import 'package:photos/ui/progress_dialog.dart';
-import 'package:photos/utils/dialog_util.dart';
-
-class GrantPermissionsWidget extends StatefulWidget {
-  @override
-  _GrantPermissionsWidgetState createState() => _GrantPermissionsWidgetState();
-}
-
-class _GrantPermissionsWidgetState extends State<GrantPermissionsWidget> {
-  final _logger = Logger("GrantPermissionsWidget");
-
-  ProgressDialog _dialog;
-  StreamSubscription<SyncStatusUpdate> _firstImportEvent;
-
-  @override
-  void initState() {
-    super.initState();
-    _dialog = createProgressDialog(
-        context, "hang on tight, your photos will be loaded in a jiffy! 🐣");
-
-    _firstImportEvent =
-        Bus.instance.on<SyncStatusUpdate>().listen((event) async {
-      if (mounted &&
-          event.status == SyncStatus.completed_first_gallery_import) {
-        await _dialog.hide();
-        showBackupFolderSelectionDialog(context);
-      }
-    });
-  }
-
-  @override
-  void dispose() {
-    super.dispose();
-    _firstImportEvent.cancel();
-  }
+import 'package:photos/ui/loading_photos_page.dart';
 
 
+class GrantPermissionsPage extends StatelessWidget {
   @override
   @override
   Widget build(BuildContext context) {
   Widget build(BuildContext context) {
     return Center(
     return Center(
@@ -78,8 +39,14 @@ class _GrantPermissionsWidgetState extends State<GrantPermissionsWidget> {
               onPressed: () async {
               onPressed: () async {
                 final granted = await PhotoManager.requestPermission();
                 final granted = await PhotoManager.requestPermission();
                 if (granted) {
                 if (granted) {
-                  await _dialog.show();
-                  SyncService.instance.onPermissionGranted();
+                  await SyncService.instance.onPermissionGranted();
+                  Navigator.of(context).pushReplacement(
+                    MaterialPageRoute(
+                      builder: (BuildContext context) {
+                        return LoadingPhotosPage();
+                      },
+                    ),
+                  );
                 }
                 }
               },
               },
               shape: RoundedRectangleBorder(
               shape: RoundedRectangleBorder(

+ 4 - 4
lib/ui/home_widget.dart

@@ -23,7 +23,7 @@ import 'package:photos/ui/collections_gallery_widget.dart';
 import 'package:photos/ui/extents_page_view.dart';
 import 'package:photos/ui/extents_page_view.dart';
 import 'package:photos/ui/gallery.dart';
 import 'package:photos/ui/gallery.dart';
 import 'package:photos/ui/gallery_app_bar_widget.dart';
 import 'package:photos/ui/gallery_app_bar_widget.dart';
-import 'package:photos/ui/grant_permissions_widget.dart';
+import 'package:photos/ui/grant_permissions_page.dart';
 import 'package:photos/ui/memories_widget.dart';
 import 'package:photos/ui/memories_widget.dart';
 import 'package:photos/services/user_service.dart';
 import 'package:photos/services/user_service.dart';
 import 'package:photos/ui/nav_bar.dart';
 import 'package:photos/ui/nav_bar.dart';
@@ -162,12 +162,12 @@ class _HomeWidgetState extends State<HomeWidget> {
   }
   }
 
 
   Widget _getBody() {
   Widget _getBody() {
+    if (!SyncService.instance.hasGrantedPermissions()) {
+      return GrantPermissionsPage();
+    }
     if (!Configuration.instance.hasConfiguredAccount()) {
     if (!Configuration.instance.hasConfiguredAccount()) {
       return SignInHeader();
       return SignInHeader();
     }
     }
-    if (!SyncService.instance.hasGrantedPermissions()) {
-      return GrantPermissionsWidget();
-    }
 
 
     return Stack(
     return Stack(
       children: [
       children: [

+ 61 - 0
lib/ui/loading_photos_page.dart

@@ -0,0 +1,61 @@
+import 'dart:async';
+
+import 'package:flutter/material.dart';
+import 'package:loading_animations/loading_animations.dart';
+import 'package:photos/core/event_bus.dart';
+import 'package:photos/events/sync_status_update_event.dart';
+import 'package:photos/ui/backup_folder_selection_widget.dart';
+
+class LoadingPhotosPage extends StatefulWidget {
+  const LoadingPhotosPage({Key key}) : super(key: key);
+
+  @override
+  _LoadingPhotosPageState createState() => _LoadingPhotosPageState();
+}
+
+class _LoadingPhotosPageState extends State<LoadingPhotosPage> {
+  StreamSubscription<SyncStatusUpdate> _firstImportEvent;
+
+  @override
+  void initState() {
+    super.initState();
+    _firstImportEvent =
+        Bus.instance.on<SyncStatusUpdate>().listen((event) async {
+      if (mounted &&
+          event.status == SyncStatus.completed_first_gallery_import) {
+        showBackupFolderSelectionDialog(context);
+      }
+    });
+  }
+
+  @override
+  void dispose() {
+    _firstImportEvent.cancel();
+    super.dispose();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      body: Center(
+        child: Column(
+          mainAxisAlignment: MainAxisAlignment.center,
+          crossAxisAlignment: CrossAxisAlignment.center,
+          children: [
+            LoadingBouncingGrid.square(
+              inverted: true,
+              backgroundColor: Theme.of(context).buttonColor,
+            ),
+            Padding(
+              padding: const EdgeInsets.all(16.0),
+              child: Text(
+                "hang on tight, your photos will appear in a jiffy! 🐣",
+                textAlign: TextAlign.center,
+              ),
+            ),
+          ],
+        ),
+      ),
+    );
+  }
+}

+ 0 - 26
lib/ui/loading_photos_widget.dart

@@ -1,26 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:photos/ui/loading_widget.dart';
-
-class LoadingPhotosWidget extends StatelessWidget {
-  const LoadingPhotosWidget({Key key}) : super(key: key);
-
-  @override
-  Widget build(BuildContext context) {
-    return Center(
-      child: Column(
-        mainAxisAlignment: MainAxisAlignment.center,
-        crossAxisAlignment: CrossAxisAlignment.center,
-        children: [
-          loadWidget,
-          Padding(
-            padding: const EdgeInsets.all(16.0),
-            child: Text(
-              "hang on tight, your photos will appear in a jiffy! 🐣",
-              textAlign: TextAlign.center,
-            ),
-          ),
-        ],
-      ),
-    );
-  }
-}

+ 7 - 0
pubspec.lock

@@ -401,6 +401,13 @@ packages:
       url: "https://pub.dartlang.org"
       url: "https://pub.dartlang.org"
     source: hosted
     source: hosted
     version: "2.0.2"
     version: "2.0.2"
+  loading_animations:
+    dependency: "direct main"
+    description:
+      name: loading_animations
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.2.0"
   local_auth:
   local_auth:
     dependency: "direct main"
     dependency: "direct main"
     description:
     description:

+ 1 - 0
pubspec.yaml

@@ -76,6 +76,7 @@ dependencies:
   flutter_user_agent: ^1.2.2
   flutter_user_agent: ^1.2.2
   quiver: ^3.0.1
   quiver: ^3.0.1
   move_to_background: ^1.0.2
   move_to_background: ^1.0.2
+  loading_animations: ^2.1.0
 
 
 dev_dependencies:
 dev_dependencies:
   flutter_test:
   flutter_test: