浏览代码

Push to navigator without triggering a rebuild

Vishnu Mohandas 4 年之前
父节点
当前提交
96465a56fa

+ 3 - 15
lib/ui/collections_gallery_widget.dart

@@ -21,6 +21,7 @@ import 'package:photos/ui/common_elements.dart';
 import 'package:photos/ui/device_folder_page.dart';
 import 'package:photos/ui/device_folder_page.dart';
 import 'package:photos/ui/loading_widget.dart';
 import 'package:photos/ui/loading_widget.dart';
 import 'package:photos/ui/thumbnail_widget.dart';
 import 'package:photos/ui/thumbnail_widget.dart';
+import 'package:photos/utils/navigation_util.dart';
 import 'package:photos/utils/toast_util.dart';
 import 'package:photos/utils/toast_util.dart';
 
 
 class CollectionsGalleryWidget extends StatefulWidget {
 class CollectionsGalleryWidget extends StatefulWidget {
@@ -281,13 +282,7 @@ class DeviceFolderIcon extends StatelessWidget {
         ),
         ),
       ),
       ),
       onTap: () {
       onTap: () {
-        Navigator.of(context).push(
-          MaterialPageRoute(
-            builder: (BuildContext context) {
-              return DeviceFolderPage(folder);
-            },
-          ),
-        );
+        routeToPage(context, DeviceFolderPage(folder));
       },
       },
     );
     );
   }
   }
@@ -332,14 +327,7 @@ class CollectionItem extends StatelessWidget {
         ],
         ],
       ),
       ),
       onTap: () {
       onTap: () {
-        final page = CollectionPage(c.collection);
-        Navigator.of(context).push(
-          MaterialPageRoute(
-            builder: (BuildContext context) {
-              return page;
-            },
-          ),
-        );
+        routeToPage(context, CollectionPage(c.collection));
       },
       },
     );
     );
   }
   }

+ 2 - 19
lib/ui/huge_listview/lazy_loading_gallery.dart

@@ -13,6 +13,7 @@ import 'package:photos/ui/gallery.dart';
 import 'package:photos/ui/huge_listview/place_holder_widget.dart';
 import 'package:photos/ui/huge_listview/place_holder_widget.dart';
 import 'package:photos/ui/thumbnail_widget.dart';
 import 'package:photos/ui/thumbnail_widget.dart';
 import 'package:photos/utils/date_time_util.dart';
 import 'package:photos/utils/date_time_util.dart';
+import 'package:photos/utils/navigation_util.dart';
 import 'package:visibility_detector/visibility_detector.dart';
 import 'package:visibility_detector/visibility_detector.dart';
 
 
 class LazyLoadingGallery extends StatefulWidget {
 class LazyLoadingGallery extends StatefulWidget {
@@ -340,24 +341,6 @@ class _LazyLoadingGridViewState extends State<LazyLoadingGridView> {
       widget.files.indexOf(file),
       widget.files.indexOf(file),
       widget.tag,
       widget.tag,
     );
     );
-    Navigator.of(context).push(
-      PageRouteBuilder(
-        pageBuilder: (BuildContext context, Animation<double> animation,
-            Animation<double> secondaryAnimation) {
-          return page;
-        },
-        transitionsBuilder: (BuildContext context, Animation<double> animation,
-            Animation<double> secondaryAnimation, Widget child) {
-          return Align(
-            child: FadeTransition(
-              opacity: animation,
-              child: child,
-            ),
-          );
-        },
-        transitionDuration: Duration(milliseconds: 200),
-        opaque: false,
-      ),
-    );
+    routeToPage(context, page);
   }
   }
 }
 }

+ 2 - 7
lib/ui/memories_widget.dart

@@ -12,6 +12,7 @@ import 'package:photos/ui/video_widget.dart';
 import 'package:photos/ui/zoomable_image.dart';
 import 'package:photos/ui/zoomable_image.dart';
 import 'package:photos/utils/date_time_util.dart';
 import 'package:photos/utils/date_time_util.dart';
 import 'package:photos/utils/file_util.dart';
 import 'package:photos/utils/file_util.dart';
+import 'package:photos/utils/navigation_util.dart';
 import 'package:photos/utils/share_util.dart';
 import 'package:photos/utils/share_util.dart';
 
 
 class MemoriesWidget extends StatefulWidget {
 class MemoriesWidget extends StatefulWidget {
@@ -123,13 +124,7 @@ class MemoryWidget extends StatelessWidget {
     final title = _getTitle(memories[index]);
     final title = _getTitle(memories[index]);
     return GestureDetector(
     return GestureDetector(
       onTap: () {
       onTap: () {
-        Navigator.of(context).push(
-          MaterialPageRoute(
-            builder: (BuildContext context) {
-              return FullScreenMemory(title, memories, index);
-            },
-          ),
-        );
+        routeToPage(context, FullScreenMemory(title, memories, index));
       },
       },
       child: Container(
       child: Container(
         width: 100,
         width: 100,

+ 2 - 7
lib/ui/settings_button.dart

@@ -1,6 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter/widgets.dart';
 import 'package:flutter/widgets.dart';
 import 'package:photos/ui/settings_page.dart';
 import 'package:photos/ui/settings_page.dart';
+import 'package:photos/utils/navigation_util.dart';
 
 
 class SettingsButton extends StatelessWidget {
 class SettingsButton extends StatelessWidget {
   const SettingsButton({Key key}) : super(key: key);
   const SettingsButton({Key key}) : super(key: key);
@@ -16,13 +17,7 @@ class SettingsButton extends StatelessWidget {
         ),
         ),
         padding: EdgeInsets.fromLTRB(16, 4, 16, 18),
         padding: EdgeInsets.fromLTRB(16, 4, 16, 18),
         onPressed: () async {
         onPressed: () async {
-          Navigator.of(context).push(
-            MaterialPageRoute(
-              builder: (BuildContext context) {
-                return SettingsPage();
-              },
-            ),
-          );
+          routeToPage(context, SettingsPage());
         },
         },
       ),
       ),
     );
     );

+ 3 - 15
lib/ui/shared_collections_gallery.dart

@@ -17,6 +17,7 @@ import 'package:photos/ui/collections_gallery_widget.dart';
 import 'package:photos/ui/loading_widget.dart';
 import 'package:photos/ui/loading_widget.dart';
 import 'package:photos/ui/shared_collection_page.dart';
 import 'package:photos/ui/shared_collection_page.dart';
 import 'package:photos/ui/thumbnail_widget.dart';
 import 'package:photos/ui/thumbnail_widget.dart';
+import 'package:photos/utils/navigation_util.dart';
 import 'package:photos/utils/share_util.dart';
 import 'package:photos/utils/share_util.dart';
 import 'package:photos/utils/toast_util.dart';
 import 'package:photos/utils/toast_util.dart';
 
 
@@ -348,13 +349,7 @@ class OutgoingCollectionItem extends StatelessWidget {
           c.collection,
           c.collection,
           tagPrefix: "outgoing_collection",
           tagPrefix: "outgoing_collection",
         );
         );
-        Navigator.of(context).push(
-          MaterialPageRoute(
-            builder: (BuildContext context) {
-              return page;
-            },
-          ),
-        );
+        routeToPage(context, page);
       },
       },
     );
     );
   }
   }
@@ -424,14 +419,7 @@ class IncomingCollectionItem extends StatelessWidget {
         ],
         ],
       ),
       ),
       onTap: () {
       onTap: () {
-        final page = SharedCollectionPage(c.collection);
-        Navigator.of(context).push(
-          MaterialPageRoute(
-            builder: (BuildContext context) {
-              return page;
-            },
-          ),
-        );
+        routeToPage(context, SharedCollectionPage(c.collection));
       },
       },
     );
     );
   }
   }

+ 23 - 0
lib/utils/navigation_util.dart

@@ -0,0 +1,23 @@
+import 'package:flutter/material.dart';
+
+void routeToPage(BuildContext context, Widget page) {
+  Navigator.of(context).push(
+    PageRouteBuilder(
+      pageBuilder: (BuildContext context, Animation<double> animation,
+          Animation<double> secondaryAnimation) {
+        return page;
+      },
+      transitionsBuilder: (BuildContext context, Animation<double> animation,
+          Animation<double> secondaryAnimation, Widget child) {
+        return Align(
+          child: FadeTransition(
+            opacity: animation,
+            child: child,
+          ),
+        );
+      },
+      transitionDuration: Duration(milliseconds: 200),
+      opaque: false,
+    ),
+  );
+}