Allow multiple map routes to share the Map widget and transition between each other

This commit is contained in:
2022-09-12 15:24:14 -04:00
parent c6090a307a
commit 10826e79b2
13 changed files with 715 additions and 265 deletions

View File

@@ -1,13 +1,33 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/material.dart';
import 'package:furman_now/src/screens/events/index.dart';
import 'package:furman_now/src/screens/home/home_header.dart';
import 'package:furman_now/src/screens/home/index.dart';
import 'package:furman_now/src/screens/info/index.dart';
import 'package:furman_now/src/screens/map/index.dart';
import 'package:furman_now/src/screens/map/map_category.dart';
import 'package:furman_now/src/screens/map/map_home.dart';
import 'package:furman_now/src/screens/student_id/index.dart';
import 'package:furman_now/src/utils/translucent_route.dart';
import '../layouts/main/index.dart';
Route<T> mapRouteBuilder<T>(BuildContext context, Widget child, CustomPage<T> page){
return TranslucentRoute(
settings: page,
transitionDuration: const Duration(milliseconds: 200),
transitionBuilder: (context, animation, secondaryAnimation, child) =>
FadeTransition(
opacity: animation,
child: FadeTransition(
opacity: secondaryAnimation.drive(Tween<double>(begin: 1, end: 0)),
child: child,
),
),
pageBuilder: (context) => child,
);
}
@MaterialAutoRouter(
replaceInRouteName: 'Screen,Route',
routes: <AutoRoute>[
@@ -25,7 +45,18 @@ import '../layouts/main/index.dart';
transitionsBuilder: TransitionsBuilders.fadeIn,
),
]),
AutoRoute(path: "map", page: MapScreen),
AutoRoute(path: "map", page: MapScreen, children: [
CustomRoute(
path: "",
page: MapHomeScreen,
customRouteBuilder: mapRouteBuilder,
),
CustomRoute(
path: "category/:id",
page: MapCategoryScreen,
customRouteBuilder: mapRouteBuilder,
),
]),
AutoRoute(path: "events", page: EventsScreen),
AutoRoute(path: "info", page: InfoScreen),
]),

View File

@@ -11,8 +11,8 @@
// ignore_for_file: type=lint
// ignore_for_file: no_leading_underscores_for_library_prefixes
import 'package:auto_route/auto_route.dart' as _i8;
import 'package:flutter/material.dart' as _i9;
import 'package:auto_route/auto_route.dart' as _i10;
import 'package:flutter/material.dart' as _i11;
import '../layouts/main/index.dart' as _i1;
import '../screens/events/index.dart' as _i4;
@@ -20,76 +20,106 @@ import '../screens/home/home_header.dart' as _i6;
import '../screens/home/index.dart' as _i2;
import '../screens/info/index.dart' as _i5;
import '../screens/map/index.dart' as _i3;
import '../screens/map/map_category.dart' as _i9;
import '../screens/map/map_home.dart' as _i8;
import '../screens/map/state.dart' as _i13;
import '../screens/student_id/index.dart' as _i7;
import 'index.dart' as _i12;
class AppRouter extends _i8.RootStackRouter {
AppRouter([_i9.GlobalKey<_i9.NavigatorState>? navigatorKey])
class AppRouter extends _i10.RootStackRouter {
AppRouter([_i11.GlobalKey<_i11.NavigatorState>? navigatorKey])
: super(navigatorKey);
@override
final Map<String, _i8.PageFactory> pagesMap = {
final Map<String, _i10.PageFactory> pagesMap = {
MainLayout.name: (routeData) {
return _i8.MaterialPageX<dynamic>(
return _i10.MaterialPageX<dynamic>(
routeData: routeData, child: const _i1.MainLayout());
},
HomePageRouter.name: (routeData) {
return _i8.MaterialPageX<dynamic>(
return _i10.MaterialPageX<dynamic>(
routeData: routeData, child: const _i2.HomeScreen());
},
MapRoute.name: (routeData) {
return _i8.MaterialPageX<dynamic>(
return _i10.MaterialPageX<dynamic>(
routeData: routeData, child: const _i3.MapScreen());
},
EventsRoute.name: (routeData) {
return _i8.MaterialPageX<dynamic>(
return _i10.MaterialPageX<dynamic>(
routeData: routeData, child: const _i4.EventsScreen());
},
InfoRoute.name: (routeData) {
return _i8.MaterialPageX<dynamic>(
return _i10.MaterialPageX<dynamic>(
routeData: routeData, child: const _i5.InfoScreen());
},
HomeRoute.name: (routeData) {
return _i8.CustomPage<dynamic>(
return _i10.CustomPage<dynamic>(
routeData: routeData,
child: const _i6.HomePageHeader(),
transitionsBuilder: _i8.TransitionsBuilders.fadeIn,
transitionsBuilder: _i10.TransitionsBuilders.fadeIn,
opaque: true,
barrierDismissible: false);
},
StudentIdRoute.name: (routeData) {
return _i8.CustomPage<dynamic>(
return _i10.CustomPage<dynamic>(
routeData: routeData,
child: const _i7.StudentIdScreen(),
transitionsBuilder: _i8.TransitionsBuilders.fadeIn,
transitionsBuilder: _i10.TransitionsBuilders.fadeIn,
opaque: true,
barrierDismissible: false);
},
MapHomeRoute.name: (routeData) {
return _i10.CustomPage<dynamic>(
routeData: routeData,
child: const _i8.MapHomeScreen(),
customRouteBuilder: _i12.mapRouteBuilder,
opaque: true,
barrierDismissible: false);
},
MapCategoryRoute.name: (routeData) {
final args = routeData.argsAs<MapCategoryRouteArgs>();
return _i10.CustomPage<dynamic>(
routeData: routeData,
child: _i9.MapCategoryScreen(category: args.category, key: args.key),
customRouteBuilder: _i12.mapRouteBuilder,
opaque: true,
barrierDismissible: false);
}
};
@override
List<_i8.RouteConfig> get routes => [
_i8.RouteConfig(MainLayout.name, path: '/', children: [
_i8.RouteConfig(HomePageRouter.name,
List<_i10.RouteConfig> get routes => [
_i10.RouteConfig(MainLayout.name, path: '/', children: [
_i10.RouteConfig(HomePageRouter.name,
path: 'home',
parent: MainLayout.name,
children: [
_i8.RouteConfig(HomeRoute.name,
_i10.RouteConfig(HomeRoute.name,
path: '', parent: HomePageRouter.name),
_i8.RouteConfig(StudentIdRoute.name,
_i10.RouteConfig(StudentIdRoute.name,
path: 'student-id', parent: HomePageRouter.name)
]),
_i8.RouteConfig(MapRoute.name, path: 'map', parent: MainLayout.name),
_i8.RouteConfig(EventsRoute.name,
_i10.RouteConfig(MapRoute.name,
path: 'map',
parent: MainLayout.name,
children: [
_i10.RouteConfig(MapHomeRoute.name,
path: '', parent: MapRoute.name),
_i10.RouteConfig(MapCategoryRoute.name,
path: 'category/:id', parent: MapRoute.name)
]),
_i10.RouteConfig(EventsRoute.name,
path: 'events', parent: MainLayout.name),
_i8.RouteConfig(InfoRoute.name, path: 'info', parent: MainLayout.name)
_i10.RouteConfig(InfoRoute.name,
path: 'info', parent: MainLayout.name)
])
];
}
/// generated route for
/// [_i1.MainLayout]
class MainLayout extends _i8.PageRouteInfo<void> {
const MainLayout({List<_i8.PageRouteInfo>? children})
class MainLayout extends _i10.PageRouteInfo<void> {
const MainLayout({List<_i10.PageRouteInfo>? children})
: super(MainLayout.name, path: '/', initialChildren: children);
static const String name = 'MainLayout';
@@ -97,8 +127,8 @@ class MainLayout extends _i8.PageRouteInfo<void> {
/// generated route for
/// [_i2.HomeScreen]
class HomePageRouter extends _i8.PageRouteInfo<void> {
const HomePageRouter({List<_i8.PageRouteInfo>? children})
class HomePageRouter extends _i10.PageRouteInfo<void> {
const HomePageRouter({List<_i10.PageRouteInfo>? children})
: super(HomePageRouter.name, path: 'home', initialChildren: children);
static const String name = 'HomePageRouter';
@@ -106,15 +136,16 @@ class HomePageRouter extends _i8.PageRouteInfo<void> {
/// generated route for
/// [_i3.MapScreen]
class MapRoute extends _i8.PageRouteInfo<void> {
const MapRoute() : super(MapRoute.name, path: 'map');
class MapRoute extends _i10.PageRouteInfo<void> {
const MapRoute({List<_i10.PageRouteInfo>? children})
: super(MapRoute.name, path: 'map', initialChildren: children);
static const String name = 'MapRoute';
}
/// generated route for
/// [_i4.EventsScreen]
class EventsRoute extends _i8.PageRouteInfo<void> {
class EventsRoute extends _i10.PageRouteInfo<void> {
const EventsRoute() : super(EventsRoute.name, path: 'events');
static const String name = 'EventsRoute';
@@ -122,7 +153,7 @@ class EventsRoute extends _i8.PageRouteInfo<void> {
/// generated route for
/// [_i5.InfoScreen]
class InfoRoute extends _i8.PageRouteInfo<void> {
class InfoRoute extends _i10.PageRouteInfo<void> {
const InfoRoute() : super(InfoRoute.name, path: 'info');
static const String name = 'InfoRoute';
@@ -130,7 +161,7 @@ class InfoRoute extends _i8.PageRouteInfo<void> {
/// generated route for
/// [_i6.HomePageHeader]
class HomeRoute extends _i8.PageRouteInfo<void> {
class HomeRoute extends _i10.PageRouteInfo<void> {
const HomeRoute() : super(HomeRoute.name, path: '');
static const String name = 'HomeRoute';
@@ -138,8 +169,40 @@ class HomeRoute extends _i8.PageRouteInfo<void> {
/// generated route for
/// [_i7.StudentIdScreen]
class StudentIdRoute extends _i8.PageRouteInfo<void> {
class StudentIdRoute extends _i10.PageRouteInfo<void> {
const StudentIdRoute() : super(StudentIdRoute.name, path: 'student-id');
static const String name = 'StudentIdRoute';
}
/// generated route for
/// [_i8.MapHomeScreen]
class MapHomeRoute extends _i10.PageRouteInfo<void> {
const MapHomeRoute() : super(MapHomeRoute.name, path: '');
static const String name = 'MapHomeRoute';
}
/// generated route for
/// [_i9.MapCategoryScreen]
class MapCategoryRoute extends _i10.PageRouteInfo<MapCategoryRouteArgs> {
MapCategoryRoute({required _i13.MapCategory category, _i11.Key? key})
: super(MapCategoryRoute.name,
path: 'category/:id',
args: MapCategoryRouteArgs(category: category, key: key));
static const String name = 'MapCategoryRoute';
}
class MapCategoryRouteArgs {
const MapCategoryRouteArgs({required this.category, this.key});
final _i13.MapCategory category;
final _i11.Key? key;
@override
String toString() {
return 'MapCategoryRouteArgs{category: $category, key: $key}';
}
}