From 74e857ddbf903eb34fb6c95610bd2fabf99f5544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20B=C3=BChler?= Date: Mon, 13 May 2024 14:46:21 +0200 Subject: [PATCH 1/2] add page route builder for platform --- .../src/navigation/page_route_builder.dart | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/fluorflow/lib/src/navigation/page_route_builder.dart b/packages/fluorflow/lib/src/navigation/page_route_builder.dart index f11aee9..8b8399c 100644 --- a/packages/fluorflow/lib/src/navigation/page_route_builder.dart +++ b/packages/fluorflow/lib/src/navigation/page_route_builder.dart @@ -1,10 +1,31 @@ -import 'package:flutter/widgets.dart'; +import 'dart:io'; + +import 'package:flutter/material.dart'; /// A custom page route builder that provides a page transition without any animation. class NoTransitionPageRouteBuilder extends PageRouteBuilder { NoTransitionPageRouteBuilder({super.settings, required super.pageBuilder}); } +/// A custom page route builder that provides transitions +/// that should match the defaults of the underlying platform. +class PlatformPageRouteBuilder extends PageRouteBuilder { + static const _ios = CupertinoPageTransitionsBuilder(); + static const _other = FadeUpwardsPageTransitionsBuilder(); + + PlatformPageRouteBuilder({super.settings, required super.pageBuilder}); + + @override + Widget buildTransitions(BuildContext context, Animation animation, + Animation secondaryAnimation, Widget child) => + switch (Platform.operatingSystem) { + 'ios' || 'macos' => _ios.buildTransitions( + this, context, animation, secondaryAnimation, child), + _ => _other.buildTransitions( + this, context, animation, secondaryAnimation, child), + }; +} + /// A custom page route builder that provides a fade-in transition effect. class FadeInPageRouteBuilder extends PageRouteBuilder { FadeInPageRouteBuilder({super.settings, required super.pageBuilder}) From cb2e00bdf827f91a05b067218bfbc17fda9c310a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20B=C3=BChler?= Date: Mon, 13 May 2024 15:03:59 +0200 Subject: [PATCH 2/2] add new builder to generator --- packages/fluorflow/example/lib/views/detail/detail_view.dart | 2 +- packages/fluorflow/example/lib/views/home/home_view.dart | 5 ++++- packages/fluorflow/lib/src/navigation/route_builder.dart | 5 +++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/fluorflow/example/lib/views/detail/detail_view.dart b/packages/fluorflow/example/lib/views/detail/detail_view.dart index 7b418df..b4e22a2 100644 --- a/packages/fluorflow/example/lib/views/detail/detail_view.dart +++ b/packages/fluorflow/example/lib/views/detail/detail_view.dart @@ -7,7 +7,7 @@ import 'detail_viewmodel.dart'; @Routable( replaceWithExtension: false, rootToExtension: false, - routeBuilder: RouteBuilder.leftToRight) + routeBuilder: RouteBuilder.platform) final class DetailView extends FluorFlowView { const DetailView({super.key}); diff --git a/packages/fluorflow/example/lib/views/home/home_view.dart b/packages/fluorflow/example/lib/views/home/home_view.dart index 8e0d32f..2a44bef 100644 --- a/packages/fluorflow/example/lib/views/home/home_view.dart +++ b/packages/fluorflow/example/lib/views/home/home_view.dart @@ -4,7 +4,10 @@ import 'package:flutter/material.dart'; import 'home_viewmodel.dart'; -@Routable(navigateToExtension: false, replaceWithExtension: false) +@Routable( + navigateToExtension: false, + replaceWithExtension: false, + routeBuilder: RouteBuilder.fadeIn) final class HomeView extends FluorFlowView { const HomeView({super.key}); diff --git a/packages/fluorflow/lib/src/navigation/route_builder.dart b/packages/fluorflow/lib/src/navigation/route_builder.dart index fbfd353..f5beec7 100644 --- a/packages/fluorflow/lib/src/navigation/route_builder.dart +++ b/packages/fluorflow/lib/src/navigation/route_builder.dart @@ -3,6 +3,11 @@ enum RouteBuilder { /// No transition. noTransition, + /// Platform default transition. + /// For iOS / macOS devices, this uses the cuperino transition which supports + /// the swipe back gesture. All other devices use the fade upwards transition. + platform, + /// Fade in transition. fadeIn,