diff --git a/lib/logic/app_logic.dart b/lib/logic/app_logic.dart index 48900654..fcdedcc5 100644 --- a/lib/logic/app_logic.dart +++ b/lib/logic/app_logic.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:desktop_window/desktop_window.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter_displaymode/flutter_displaymode.dart'; import 'package:wonders/common_libs.dart'; import 'package:wonders/logic/common/platform_info.dart'; diff --git a/lib/ui/common/utils/page_routes.dart b/lib/ui/common/utils/page_routes.dart index ecb3b5f7..cd3d23ec 100644 --- a/lib/ui/common/utils/page_routes.dart +++ b/lib/ui/common/utils/page_routes.dart @@ -1,17 +1,21 @@ -import 'package:flutter/material.dart'; +import 'package:flutter/cupertino.dart'; class PageRoutes { static const Duration kDefaultDuration = Duration(milliseconds: 300); static Route dialog(Widget child, [Duration duration = kDefaultDuration, bool opaque = false]) { - return PageRouteBuilder( - transitionDuration: duration, - reverseTransitionDuration: duration, - pageBuilder: (context, animation, secondaryAnimation) => child, - opaque: opaque, - fullscreenDialog: true, - transitionsBuilder: (context, animation, secondaryAnimation, child) => - FadeTransition(opacity: animation, child: child), - ); + // Use cupertino routes for all dialogs so we get the 'swipe right to go back' behavior + return CupertinoPageRoute(builder: (_) => child); + + // SB: Removed this in favor of Cupertino routes, we could restor with a `useFade` option + // return PageRouteBuilder( + // transitionDuration: duration, + // reverseTransitionDuration: duration, + // pageBuilder: (context, animation, secondaryAnimation) => child, + // opaque: opaque, + // fullscreenDialog: true, + // transitionsBuilder: (context, animation, secondaryAnimation, child) => + // FadeTransition(opacity: animation, child: child), + // ); } } diff --git a/lib/ui/screens/artifact/artifact_details/artifact_details_screen.dart b/lib/ui/screens/artifact/artifact_details/artifact_details_screen.dart index 2e430c1f..a94006a0 100644 --- a/lib/ui/screens/artifact/artifact_details/artifact_details_screen.dart +++ b/lib/ui/screens/artifact/artifact_details/artifact_details_screen.dart @@ -5,8 +5,8 @@ import 'package:wonders/ui/common/controls/app_loading_indicator.dart'; import 'package:wonders/ui/common/gradient_container.dart'; import 'package:wonders/ui/common/modals/fullscreen_url_img_viewer.dart'; -part 'widgets/_content.dart'; -part 'widgets/_header.dart'; +part 'widgets/_info_column.dart'; +part 'widgets/_image_btn.dart'; class ArtifactDetailsScreen extends StatefulWidget { const ArtifactDetailsScreen({Key? key, required this.artifactId}) : super(key: key); @@ -36,8 +36,8 @@ class _ArtifactDetailsScreenState extends State { } else { content = hzMode ? Row(children: [ - Expanded(child: _Header(data: data!)), - Expanded(child: Center(child: SizedBox(width: 600, child: _Content(data: data)))), + Expanded(child: _ImageBtn(data: data!)), + Expanded(child: Center(child: SizedBox(width: 600, child: _InfoColumn(data: data)))), ]) : CustomScrollView( slivers: [ @@ -47,9 +47,9 @@ class _ArtifactDetailsScreenState extends State { leading: SizedBox.shrink(), expandedHeight: context.heightPx * .5, collapsedHeight: context.heightPx * .35, - flexibleSpace: _Header(data: data!), + flexibleSpace: _ImageBtn(data: data!), ), - SliverToBoxAdapter(child: _Content(data: data)), + SliverToBoxAdapter(child: _InfoColumn(data: data)), ], ); } diff --git a/lib/ui/screens/artifact/artifact_details/widgets/_header.dart b/lib/ui/screens/artifact/artifact_details/widgets/_image_btn.dart similarity index 92% rename from lib/ui/screens/artifact/artifact_details/widgets/_header.dart rename to lib/ui/screens/artifact/artifact_details/widgets/_image_btn.dart index e30cd837..2ae8f924 100644 --- a/lib/ui/screens/artifact/artifact_details/widgets/_header.dart +++ b/lib/ui/screens/artifact/artifact_details/widgets/_image_btn.dart @@ -1,7 +1,7 @@ part of '../artifact_details_screen.dart'; -class _Header extends StatelessWidget { - const _Header({Key? key, required this.data}) : super(key: key); +class _ImageBtn extends StatelessWidget { + const _ImageBtn({Key? key, required this.data}) : super(key: key); final ArtifactData data; @override diff --git a/lib/ui/screens/artifact/artifact_details/widgets/_content.dart b/lib/ui/screens/artifact/artifact_details/widgets/_info_column.dart similarity index 96% rename from lib/ui/screens/artifact/artifact_details/widgets/_content.dart rename to lib/ui/screens/artifact/artifact_details/widgets/_info_column.dart index 78104017..20e62568 100644 --- a/lib/ui/screens/artifact/artifact_details/widgets/_content.dart +++ b/lib/ui/screens/artifact/artifact_details/widgets/_info_column.dart @@ -1,7 +1,7 @@ part of '../artifact_details_screen.dart'; -class _Content extends StatelessWidget { - const _Content({Key? key, required this.data}) : super(key: key); +class _InfoColumn extends StatelessWidget { + const _InfoColumn({Key? key, required this.data}) : super(key: key); final ArtifactData data; @override diff --git a/lib/ui/screens/photo_gallery/photo_gallery.dart b/lib/ui/screens/photo_gallery/photo_gallery.dart index 571d38d2..3b593654 100644 --- a/lib/ui/screens/photo_gallery/photo_gallery.dart +++ b/lib/ui/screens/photo_gallery/photo_gallery.dart @@ -107,15 +107,14 @@ class _PhotoGalleryState extends State { Future _handleImageTapped(int index) async { if (_index == index) { - int? newIndex = await Navigator.push( + final urls = _photoIds.value.map((e) { + return UnsplashPhotoData.getSelfHostedUrl(e, UnsplashPhotoSize.med); + }).toList(); + int? newIndex = await appLogic.showFullscreenDialogRoute( context, - CupertinoPageRoute(builder: (_) { - final urls = _photoIds.value.map((e) { - return UnsplashPhotoData.getSelfHostedUrl(e, UnsplashPhotoSize.med); - }).toList(); - return FullscreenUrlImgViewer(urls: urls, index: _index); - }), + FullscreenUrlImgViewer(urls: urls, index: _index), ); + if (newIndex != null) { _setIndex(newIndex, skipAnimation: true); } @@ -148,7 +147,7 @@ class _PhotoGalleryState extends State { gridOffset += Offset(0, -context.mq.padding.top / 2); final offsetTweenDuration = _skipNextOffsetTween ? Duration.zero : swipeDuration; final cutoutTweenDuration = _skipNextOffsetTween ? Duration.zero : swipeDuration * .5; - return _AnimatedCutoutOverlay( + return _AnimatedCutoutOverlay( animationKey: ValueKey(_index), cutoutSize: imgSize, swipeDir: _lastSwipeDir,