1
0
mirror of https://github.com/immich-app/immich.git synced 2024-12-22 01:47:08 +02:00

fix(mobile): Prevents duplicate taps navigating to the same route twice (#1855)

This commit is contained in:
martyfuhry 2023-02-24 11:51:35 -05:00 committed by GitHub
parent 9323cc76d9
commit 4ed96cf1bd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 553 additions and 224 deletions

View File

@ -141,9 +141,8 @@ class ImmichAppState extends ConsumerState<ImmichApp>
ref.watch(releaseInfoProvider.notifier).checkGithubReleaseInfo(); ref.watch(releaseInfoProvider.notifier).checkGithubReleaseInfo();
ref ref.watch(notificationPermissionProvider.notifier)
.watch(notificationPermissionProvider.notifier) .getNotificationPermission();
.getNotificationPermission();
ref.read(iOSBackgroundSettingsProvider.notifier).refresh(); ref.read(iOSBackgroundSettingsProvider.notifier).refresh();

View File

@ -0,0 +1,17 @@
import 'package:auto_route/auto_route.dart';
import 'package:flutter/foundation.dart';
/// Guards against duplicate navigation to this route
class DuplicateGuard extends AutoRouteGuard {
DuplicateGuard();
@override
void onNavigation(NavigationResolver resolver, StackRouter router) async {
// Duplicate navigation
if (resolver.route.name == router.current.name) {
debugPrint('DuplicateGuard: Preventing duplicate route navigation for ${resolver.route.name}');
resolver.next(false);
} else {
resolver.next(true);
}
}
}

View File

@ -23,6 +23,7 @@ import 'package:immich_mobile/modules/search/views/search_page.dart';
import 'package:immich_mobile/modules/search/views/search_result_page.dart'; import 'package:immich_mobile/modules/search/views/search_result_page.dart';
import 'package:immich_mobile/modules/settings/views/settings_page.dart'; import 'package:immich_mobile/modules/settings/views/settings_page.dart';
import 'package:immich_mobile/routing/auth_guard.dart'; import 'package:immich_mobile/routing/auth_guard.dart';
import 'package:immich_mobile/routing/duplicate_guard.dart';
import 'package:immich_mobile/shared/models/asset.dart'; import 'package:immich_mobile/shared/models/asset.dart';
import 'package:immich_mobile/shared/models/album.dart'; import 'package:immich_mobile/shared/models/album.dart';
import 'package:immich_mobile/shared/providers/api.provider.dart'; import 'package:immich_mobile/shared/providers/api.provider.dart';
@ -38,49 +39,58 @@ part 'router.gr.dart';
replaceInRouteName: 'Page,Route', replaceInRouteName: 'Page,Route',
routes: <AutoRoute>[ routes: <AutoRoute>[
AutoRoute(page: SplashScreenPage, initial: true), AutoRoute(page: SplashScreenPage, initial: true),
AutoRoute(page: LoginPage), AutoRoute(page: LoginPage,
guards: [
DuplicateGuard,
],
),
AutoRoute(page: ChangePasswordPage), AutoRoute(page: ChangePasswordPage),
CustomRoute( CustomRoute(
page: TabControllerPage, page: TabControllerPage,
guards: [AuthGuard], guards: [AuthGuard, DuplicateGuard],
children: [ children: [
AutoRoute(page: HomePage, guards: [AuthGuard]), AutoRoute(page: HomePage, guards: [AuthGuard, DuplicateGuard]),
AutoRoute(page: SearchPage, guards: [AuthGuard]), AutoRoute(page: SearchPage, guards: [AuthGuard, DuplicateGuard]),
AutoRoute(page: SharingPage, guards: [AuthGuard]), AutoRoute(page: SharingPage, guards: [AuthGuard, DuplicateGuard]),
AutoRoute(page: LibraryPage, guards: [AuthGuard]) AutoRoute(page: LibraryPage, guards: [AuthGuard, DuplicateGuard])
], ],
transitionsBuilder: TransitionsBuilders.fadeIn, transitionsBuilder: TransitionsBuilders.fadeIn,
), ),
AutoRoute(page: GalleryViewerPage, guards: [AuthGuard]), AutoRoute(page: GalleryViewerPage, guards: [AuthGuard, DuplicateGuard]),
AutoRoute(page: VideoViewerPage, guards: [AuthGuard]), AutoRoute(page: VideoViewerPage, guards: [AuthGuard, DuplicateGuard]),
AutoRoute(page: BackupControllerPage, guards: [AuthGuard]), AutoRoute(page: BackupControllerPage, guards: [AuthGuard, DuplicateGuard]),
AutoRoute(page: SearchResultPage, guards: [AuthGuard]), AutoRoute(page: SearchResultPage, guards: [AuthGuard, DuplicateGuard]),
AutoRoute(page: CreateAlbumPage, guards: [AuthGuard]), AutoRoute(page: CreateAlbumPage, guards: [AuthGuard, DuplicateGuard]),
AutoRoute(page: FavoritesPage, guards: [AuthGuard]), AutoRoute(page: FavoritesPage, guards: [AuthGuard, DuplicateGuard]),
CustomRoute<AssetSelectionPageResult?>( CustomRoute<AssetSelectionPageResult?>(
page: AssetSelectionPage, page: AssetSelectionPage,
guards: [AuthGuard], guards: [AuthGuard, DuplicateGuard],
transitionsBuilder: TransitionsBuilders.slideBottom, transitionsBuilder: TransitionsBuilders.slideBottom,
), ),
CustomRoute<List<String>>( CustomRoute<List<String>>(
page: SelectUserForSharingPage, page: SelectUserForSharingPage,
guards: [AuthGuard], guards: [AuthGuard, DuplicateGuard],
transitionsBuilder: TransitionsBuilders.slideBottom, transitionsBuilder: TransitionsBuilders.slideBottom,
), ),
AutoRoute(page: AlbumViewerPage, guards: [AuthGuard]), AutoRoute(page: AlbumViewerPage, guards: [AuthGuard, DuplicateGuard]),
CustomRoute<List<String>?>( CustomRoute<List<String>?>(
page: SelectAdditionalUserForSharingPage, page: SelectAdditionalUserForSharingPage,
guards: [AuthGuard], guards: [AuthGuard, DuplicateGuard],
transitionsBuilder: TransitionsBuilders.slideBottom, transitionsBuilder: TransitionsBuilders.slideBottom,
), ),
AutoRoute(page: BackupAlbumSelectionPage, guards: [AuthGuard]), AutoRoute(page: BackupAlbumSelectionPage, guards: [AuthGuard, DuplicateGuard]),
AutoRoute(page: AlbumPreviewPage, guards: [AuthGuard]), AutoRoute(page: AlbumPreviewPage, guards: [AuthGuard, DuplicateGuard]),
CustomRoute( CustomRoute(
page: FailedBackupStatusPage, page: FailedBackupStatusPage,
guards: [AuthGuard], guards: [AuthGuard, DuplicateGuard],
transitionsBuilder: TransitionsBuilders.slideBottom, transitionsBuilder: TransitionsBuilders.slideBottom,
), ),
AutoRoute(page: SettingsPage, guards: [AuthGuard]), AutoRoute(page: SettingsPage,
guards: [
AuthGuard,
DuplicateGuard,
],
),
CustomRoute( CustomRoute(
page: AppLogPage, page: AppLogPage,
transitionsBuilder: TransitionsBuilders.slideBottom, transitionsBuilder: TransitionsBuilders.slideBottom,
@ -91,7 +101,11 @@ class AppRouter extends _$AppRouter {
// ignore: unused_field // ignore: unused_field
final ApiService _apiService; final ApiService _apiService;
AppRouter(this._apiService) : super(authGuard: AuthGuard(_apiService)); AppRouter(this._apiService)
: super(
authGuard: AuthGuard(_apiService),
duplicateGuard: DuplicateGuard(),
);
} }
final appRouterProvider = final appRouterProvider =

View File

@ -13,9 +13,13 @@
part of 'router.dart'; part of 'router.dart';
class _$AppRouter extends RootStackRouter { class _$AppRouter extends RootStackRouter {
_$AppRouter( _$AppRouter({
{GlobalKey<NavigatorState>? navigatorKey, required this.authGuard}) GlobalKey<NavigatorState>? navigatorKey,
: super(navigatorKey); required this.duplicateGuard,
required this.authGuard,
}) : super(navigatorKey);
final DuplicateGuard duplicateGuard;
final AuthGuard authGuard; final AuthGuard authGuard;
@ -23,211 +27,386 @@ class _$AppRouter extends RootStackRouter {
final Map<String, PageFactory> pagesMap = { final Map<String, PageFactory> pagesMap = {
SplashScreenRoute.name: (routeData) { SplashScreenRoute.name: (routeData) {
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, child: const SplashScreenPage()); routeData: routeData,
child: const SplashScreenPage(),
);
}, },
LoginRoute.name: (routeData) { LoginRoute.name: (routeData) {
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, child: const LoginPage()); routeData: routeData,
child: const LoginPage(),
);
}, },
ChangePasswordRoute.name: (routeData) { ChangePasswordRoute.name: (routeData) {
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, child: const ChangePasswordPage()); routeData: routeData,
child: const ChangePasswordPage(),
);
}, },
TabControllerRoute.name: (routeData) { TabControllerRoute.name: (routeData) {
return CustomPage<dynamic>( return CustomPage<dynamic>(
routeData: routeData, routeData: routeData,
child: const TabControllerPage(), child: const TabControllerPage(),
transitionsBuilder: TransitionsBuilders.fadeIn, transitionsBuilder: TransitionsBuilders.fadeIn,
opaque: true, opaque: true,
barrierDismissible: false); barrierDismissible: false,
);
}, },
GalleryViewerRoute.name: (routeData) { GalleryViewerRoute.name: (routeData) {
final args = routeData.argsAs<GalleryViewerRouteArgs>(); final args = routeData.argsAs<GalleryViewerRouteArgs>();
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, routeData: routeData,
child: GalleryViewerPage( child: GalleryViewerPage(
key: args.key, assetList: args.assetList, asset: args.asset)); key: args.key,
assetList: args.assetList,
asset: args.asset,
),
);
}, },
VideoViewerRoute.name: (routeData) { VideoViewerRoute.name: (routeData) {
final args = routeData.argsAs<VideoViewerRouteArgs>(); final args = routeData.argsAs<VideoViewerRouteArgs>();
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, routeData: routeData,
child: VideoViewerPage( child: VideoViewerPage(
key: args.key, key: args.key,
asset: args.asset, asset: args.asset,
isMotionVideo: args.isMotionVideo, isMotionVideo: args.isMotionVideo,
onVideoEnded: args.onVideoEnded)); onVideoEnded: args.onVideoEnded,
onPlaying: args.onPlaying,
onPaused: args.onPaused,
),
);
}, },
BackupControllerRoute.name: (routeData) { BackupControllerRoute.name: (routeData) {
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, child: const BackupControllerPage()); routeData: routeData,
child: const BackupControllerPage(),
);
}, },
SearchResultRoute.name: (routeData) { SearchResultRoute.name: (routeData) {
final args = routeData.argsAs<SearchResultRouteArgs>(); final args = routeData.argsAs<SearchResultRouteArgs>();
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, routeData: routeData,
child: SearchResultPage(key: args.key, searchTerm: args.searchTerm)); child: SearchResultPage(
key: args.key,
searchTerm: args.searchTerm,
),
);
}, },
CreateAlbumRoute.name: (routeData) { CreateAlbumRoute.name: (routeData) {
final args = routeData.argsAs<CreateAlbumRouteArgs>(); final args = routeData.argsAs<CreateAlbumRouteArgs>();
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, routeData: routeData,
child: CreateAlbumPage( child: CreateAlbumPage(
key: args.key, key: args.key,
isSharedAlbum: args.isSharedAlbum, isSharedAlbum: args.isSharedAlbum,
initialAssets: args.initialAssets)); initialAssets: args.initialAssets,
),
);
}, },
FavoritesRoute.name: (routeData) { FavoritesRoute.name: (routeData) {
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, child: const FavoritesPage()); routeData: routeData,
child: const FavoritesPage(),
);
}, },
AssetSelectionRoute.name: (routeData) { AssetSelectionRoute.name: (routeData) {
return CustomPage<AssetSelectionPageResult?>( return CustomPage<AssetSelectionPageResult?>(
routeData: routeData, routeData: routeData,
child: const AssetSelectionPage(), child: const AssetSelectionPage(),
transitionsBuilder: TransitionsBuilders.slideBottom, transitionsBuilder: TransitionsBuilders.slideBottom,
opaque: true, opaque: true,
barrierDismissible: false); barrierDismissible: false,
);
}, },
SelectUserForSharingRoute.name: (routeData) { SelectUserForSharingRoute.name: (routeData) {
return CustomPage<List<String>>( return CustomPage<List<String>>(
routeData: routeData, routeData: routeData,
child: const SelectUserForSharingPage(), child: const SelectUserForSharingPage(),
transitionsBuilder: TransitionsBuilders.slideBottom, transitionsBuilder: TransitionsBuilders.slideBottom,
opaque: true, opaque: true,
barrierDismissible: false); barrierDismissible: false,
);
}, },
AlbumViewerRoute.name: (routeData) { AlbumViewerRoute.name: (routeData) {
final args = routeData.argsAs<AlbumViewerRouteArgs>(); final args = routeData.argsAs<AlbumViewerRouteArgs>();
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, routeData: routeData,
child: AlbumViewerPage(key: args.key, albumId: args.albumId)); child: AlbumViewerPage(
key: args.key,
albumId: args.albumId,
),
);
}, },
SelectAdditionalUserForSharingRoute.name: (routeData) { SelectAdditionalUserForSharingRoute.name: (routeData) {
final args = routeData.argsAs<SelectAdditionalUserForSharingRouteArgs>(); final args = routeData.argsAs<SelectAdditionalUserForSharingRouteArgs>();
return CustomPage<List<String>?>( return CustomPage<List<String>?>(
routeData: routeData, routeData: routeData,
child: SelectAdditionalUserForSharingPage( child: SelectAdditionalUserForSharingPage(
key: args.key, album: args.album), key: args.key,
transitionsBuilder: TransitionsBuilders.slideBottom, album: args.album,
opaque: true, ),
barrierDismissible: false); transitionsBuilder: TransitionsBuilders.slideBottom,
opaque: true,
barrierDismissible: false,
);
}, },
BackupAlbumSelectionRoute.name: (routeData) { BackupAlbumSelectionRoute.name: (routeData) {
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, child: const BackupAlbumSelectionPage()); routeData: routeData,
child: const BackupAlbumSelectionPage(),
);
}, },
AlbumPreviewRoute.name: (routeData) { AlbumPreviewRoute.name: (routeData) {
final args = routeData.argsAs<AlbumPreviewRouteArgs>(); final args = routeData.argsAs<AlbumPreviewRouteArgs>();
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, routeData: routeData,
child: AlbumPreviewPage(key: args.key, album: args.album)); child: AlbumPreviewPage(
key: args.key,
album: args.album,
),
);
}, },
FailedBackupStatusRoute.name: (routeData) { FailedBackupStatusRoute.name: (routeData) {
return CustomPage<dynamic>( return CustomPage<dynamic>(
routeData: routeData, routeData: routeData,
child: const FailedBackupStatusPage(), child: const FailedBackupStatusPage(),
transitionsBuilder: TransitionsBuilders.slideBottom, transitionsBuilder: TransitionsBuilders.slideBottom,
opaque: true, opaque: true,
barrierDismissible: false); barrierDismissible: false,
);
}, },
SettingsRoute.name: (routeData) { SettingsRoute.name: (routeData) {
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, child: const SettingsPage()); routeData: routeData,
child: const SettingsPage(),
);
}, },
AppLogRoute.name: (routeData) { AppLogRoute.name: (routeData) {
return CustomPage<dynamic>( return CustomPage<dynamic>(
routeData: routeData, routeData: routeData,
child: const AppLogPage(), child: const AppLogPage(),
transitionsBuilder: TransitionsBuilders.slideBottom, transitionsBuilder: TransitionsBuilders.slideBottom,
opaque: true, opaque: true,
barrierDismissible: false); barrierDismissible: false,
);
}, },
HomeRoute.name: (routeData) { HomeRoute.name: (routeData) {
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, child: const HomePage()); routeData: routeData,
child: const HomePage(),
);
}, },
SearchRoute.name: (routeData) { SearchRoute.name: (routeData) {
final args = routeData.argsAs<SearchRouteArgs>( final args = routeData.argsAs<SearchRouteArgs>(
orElse: () => const SearchRouteArgs()); orElse: () => const SearchRouteArgs());
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, child: SearchPage(key: args.key)); routeData: routeData,
child: SearchPage(key: args.key),
);
}, },
SharingRoute.name: (routeData) { SharingRoute.name: (routeData) {
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, child: const SharingPage()); routeData: routeData,
child: const SharingPage(),
);
}, },
LibraryRoute.name: (routeData) { LibraryRoute.name: (routeData) {
return MaterialPageX<dynamic>( return MaterialPageX<dynamic>(
routeData: routeData, child: const LibraryPage()); routeData: routeData,
} child: const LibraryPage(),
);
},
}; };
@override @override
List<RouteConfig> get routes => [ List<RouteConfig> get routes => [
RouteConfig(SplashScreenRoute.name, path: '/'), RouteConfig(
RouteConfig(LoginRoute.name, path: '/login-page'), SplashScreenRoute.name,
RouteConfig(ChangePasswordRoute.name, path: '/change-password-page'), path: '/',
RouteConfig(TabControllerRoute.name, ),
path: '/tab-controller-page', RouteConfig(
guards: [ LoginRoute.name,
authGuard path: '/login-page',
], guards: [duplicateGuard],
children: [ ),
RouteConfig(HomeRoute.name, RouteConfig(
path: 'home-page', ChangePasswordRoute.name,
parent: TabControllerRoute.name, path: '/change-password-page',
guards: [authGuard]), ),
RouteConfig(SearchRoute.name, RouteConfig(
path: 'search-page', TabControllerRoute.name,
parent: TabControllerRoute.name, path: '/tab-controller-page',
guards: [authGuard]), guards: [
RouteConfig(SharingRoute.name, authGuard,
path: 'sharing-page', duplicateGuard,
parent: TabControllerRoute.name, ],
guards: [authGuard]), children: [
RouteConfig(LibraryRoute.name, RouteConfig(
path: 'library-page', HomeRoute.name,
parent: TabControllerRoute.name, path: 'home-page',
guards: [authGuard]) parent: TabControllerRoute.name,
]), guards: [
RouteConfig(GalleryViewerRoute.name, authGuard,
path: '/gallery-viewer-page', guards: [authGuard]), duplicateGuard,
RouteConfig(VideoViewerRoute.name, ],
path: '/video-viewer-page', guards: [authGuard]), ),
RouteConfig(BackupControllerRoute.name, RouteConfig(
path: '/backup-controller-page', guards: [authGuard]), SearchRoute.name,
RouteConfig(SearchResultRoute.name, path: 'search-page',
path: '/search-result-page', guards: [authGuard]), parent: TabControllerRoute.name,
RouteConfig(CreateAlbumRoute.name, guards: [
path: '/create-album-page', guards: [authGuard]), authGuard,
RouteConfig(FavoritesRoute.name, duplicateGuard,
path: '/favorites-page', guards: [authGuard]), ],
RouteConfig(AssetSelectionRoute.name, ),
path: '/asset-selection-page', guards: [authGuard]), RouteConfig(
RouteConfig(SelectUserForSharingRoute.name, SharingRoute.name,
path: '/select-user-for-sharing-page', guards: [authGuard]), path: 'sharing-page',
RouteConfig(AlbumViewerRoute.name, parent: TabControllerRoute.name,
path: '/album-viewer-page', guards: [authGuard]), guards: [
RouteConfig(SelectAdditionalUserForSharingRoute.name, authGuard,
path: '/select-additional-user-for-sharing-page', duplicateGuard,
guards: [authGuard]), ],
RouteConfig(BackupAlbumSelectionRoute.name, ),
path: '/backup-album-selection-page', guards: [authGuard]), RouteConfig(
RouteConfig(AlbumPreviewRoute.name, LibraryRoute.name,
path: '/album-preview-page', guards: [authGuard]), path: 'library-page',
RouteConfig(FailedBackupStatusRoute.name, parent: TabControllerRoute.name,
path: '/failed-backup-status-page', guards: [authGuard]), guards: [
RouteConfig(SettingsRoute.name, authGuard,
path: '/settings-page', guards: [authGuard]), duplicateGuard,
RouteConfig(AppLogRoute.name, path: '/app-log-page') ],
),
],
),
RouteConfig(
GalleryViewerRoute.name,
path: '/gallery-viewer-page',
guards: [
authGuard,
duplicateGuard,
],
),
RouteConfig(
VideoViewerRoute.name,
path: '/video-viewer-page',
guards: [
authGuard,
duplicateGuard,
],
),
RouteConfig(
BackupControllerRoute.name,
path: '/backup-controller-page',
guards: [
authGuard,
duplicateGuard,
],
),
RouteConfig(
SearchResultRoute.name,
path: '/search-result-page',
guards: [
authGuard,
duplicateGuard,
],
),
RouteConfig(
CreateAlbumRoute.name,
path: '/create-album-page',
guards: [
authGuard,
duplicateGuard,
],
),
RouteConfig(
FavoritesRoute.name,
path: '/favorites-page',
guards: [
authGuard,
duplicateGuard,
],
),
RouteConfig(
AssetSelectionRoute.name,
path: '/asset-selection-page',
guards: [
authGuard,
duplicateGuard,
],
),
RouteConfig(
SelectUserForSharingRoute.name,
path: '/select-user-for-sharing-page',
guards: [
authGuard,
duplicateGuard,
],
),
RouteConfig(
AlbumViewerRoute.name,
path: '/album-viewer-page',
guards: [
authGuard,
duplicateGuard,
],
),
RouteConfig(
SelectAdditionalUserForSharingRoute.name,
path: '/select-additional-user-for-sharing-page',
guards: [
authGuard,
duplicateGuard,
],
),
RouteConfig(
BackupAlbumSelectionRoute.name,
path: '/backup-album-selection-page',
guards: [
authGuard,
duplicateGuard,
],
),
RouteConfig(
AlbumPreviewRoute.name,
path: '/album-preview-page',
guards: [
authGuard,
duplicateGuard,
],
),
RouteConfig(
FailedBackupStatusRoute.name,
path: '/failed-backup-status-page',
guards: [
authGuard,
duplicateGuard,
],
),
RouteConfig(
SettingsRoute.name,
path: '/settings-page',
guards: [
authGuard,
duplicateGuard,
],
),
RouteConfig(
AppLogRoute.name,
path: '/app-log-page',
),
]; ];
} }
/// generated route for /// generated route for
/// [SplashScreenPage] /// [SplashScreenPage]
class SplashScreenRoute extends PageRouteInfo<void> { class SplashScreenRoute extends PageRouteInfo<void> {
const SplashScreenRoute() : super(SplashScreenRoute.name, path: '/'); const SplashScreenRoute()
: super(
SplashScreenRoute.name,
path: '/',
);
static const String name = 'SplashScreenRoute'; static const String name = 'SplashScreenRoute';
} }
@ -235,7 +414,11 @@ class SplashScreenRoute extends PageRouteInfo<void> {
/// generated route for /// generated route for
/// [LoginPage] /// [LoginPage]
class LoginRoute extends PageRouteInfo<void> { class LoginRoute extends PageRouteInfo<void> {
const LoginRoute() : super(LoginRoute.name, path: '/login-page'); const LoginRoute()
: super(
LoginRoute.name,
path: '/login-page',
);
static const String name = 'LoginRoute'; static const String name = 'LoginRoute';
} }
@ -244,7 +427,10 @@ class LoginRoute extends PageRouteInfo<void> {
/// [ChangePasswordPage] /// [ChangePasswordPage]
class ChangePasswordRoute extends PageRouteInfo<void> { class ChangePasswordRoute extends PageRouteInfo<void> {
const ChangePasswordRoute() const ChangePasswordRoute()
: super(ChangePasswordRoute.name, path: '/change-password-page'); : super(
ChangePasswordRoute.name,
path: '/change-password-page',
);
static const String name = 'ChangePasswordRoute'; static const String name = 'ChangePasswordRoute';
} }
@ -253,8 +439,11 @@ class ChangePasswordRoute extends PageRouteInfo<void> {
/// [TabControllerPage] /// [TabControllerPage]
class TabControllerRoute extends PageRouteInfo<void> { class TabControllerRoute extends PageRouteInfo<void> {
const TabControllerRoute({List<PageRouteInfo>? children}) const TabControllerRoute({List<PageRouteInfo>? children})
: super(TabControllerRoute.name, : super(
path: '/tab-controller-page', initialChildren: children); TabControllerRoute.name,
path: '/tab-controller-page',
initialChildren: children,
);
static const String name = 'TabControllerRoute'; static const String name = 'TabControllerRoute';
} }
@ -262,19 +451,29 @@ class TabControllerRoute extends PageRouteInfo<void> {
/// generated route for /// generated route for
/// [GalleryViewerPage] /// [GalleryViewerPage]
class GalleryViewerRoute extends PageRouteInfo<GalleryViewerRouteArgs> { class GalleryViewerRoute extends PageRouteInfo<GalleryViewerRouteArgs> {
GalleryViewerRoute( GalleryViewerRoute({
{Key? key, required List<Asset> assetList, required Asset asset}) Key? key,
: super(GalleryViewerRoute.name, required List<Asset> assetList,
path: '/gallery-viewer-page', required Asset asset,
args: GalleryViewerRouteArgs( }) : super(
key: key, assetList: assetList, asset: asset)); GalleryViewerRoute.name,
path: '/gallery-viewer-page',
args: GalleryViewerRouteArgs(
key: key,
assetList: assetList,
asset: asset,
),
);
static const String name = 'GalleryViewerRoute'; static const String name = 'GalleryViewerRoute';
} }
class GalleryViewerRouteArgs { class GalleryViewerRouteArgs {
const GalleryViewerRouteArgs( const GalleryViewerRouteArgs({
{this.key, required this.assetList, required this.asset}); this.key,
required this.assetList,
required this.asset,
});
final Key? key; final Key? key;
@ -291,28 +490,38 @@ class GalleryViewerRouteArgs {
/// generated route for /// generated route for
/// [VideoViewerPage] /// [VideoViewerPage]
class VideoViewerRoute extends PageRouteInfo<VideoViewerRouteArgs> { class VideoViewerRoute extends PageRouteInfo<VideoViewerRouteArgs> {
VideoViewerRoute( VideoViewerRoute({
{Key? key, Key? key,
required Asset asset, required Asset asset,
required bool isMotionVideo, required bool isMotionVideo,
required void Function() onVideoEnded}) required void Function() onVideoEnded,
: super(VideoViewerRoute.name, void Function()? onPlaying,
path: '/video-viewer-page', void Function()? onPaused,
args: VideoViewerRouteArgs( }) : super(
key: key, VideoViewerRoute.name,
asset: asset, path: '/video-viewer-page',
isMotionVideo: isMotionVideo, args: VideoViewerRouteArgs(
onVideoEnded: onVideoEnded)); key: key,
asset: asset,
isMotionVideo: isMotionVideo,
onVideoEnded: onVideoEnded,
onPlaying: onPlaying,
onPaused: onPaused,
),
);
static const String name = 'VideoViewerRoute'; static const String name = 'VideoViewerRoute';
} }
class VideoViewerRouteArgs { class VideoViewerRouteArgs {
const VideoViewerRouteArgs( const VideoViewerRouteArgs({
{this.key, this.key,
required this.asset, required this.asset,
required this.isMotionVideo, required this.isMotionVideo,
required this.onVideoEnded}); required this.onVideoEnded,
this.onPlaying,
this.onPaused,
});
final Key? key; final Key? key;
@ -322,9 +531,13 @@ class VideoViewerRouteArgs {
final void Function() onVideoEnded; final void Function() onVideoEnded;
final void Function()? onPlaying;
final void Function()? onPaused;
@override @override
String toString() { String toString() {
return 'VideoViewerRouteArgs{key: $key, asset: $asset, isMotionVideo: $isMotionVideo, onVideoEnded: $onVideoEnded}'; return 'VideoViewerRouteArgs{key: $key, asset: $asset, isMotionVideo: $isMotionVideo, onVideoEnded: $onVideoEnded, onPlaying: $onPlaying, onPaused: $onPaused}';
} }
} }
@ -332,7 +545,10 @@ class VideoViewerRouteArgs {
/// [BackupControllerPage] /// [BackupControllerPage]
class BackupControllerRoute extends PageRouteInfo<void> { class BackupControllerRoute extends PageRouteInfo<void> {
const BackupControllerRoute() const BackupControllerRoute()
: super(BackupControllerRoute.name, path: '/backup-controller-page'); : super(
BackupControllerRoute.name,
path: '/backup-controller-page',
);
static const String name = 'BackupControllerRoute'; static const String name = 'BackupControllerRoute';
} }
@ -340,16 +556,26 @@ class BackupControllerRoute extends PageRouteInfo<void> {
/// generated route for /// generated route for
/// [SearchResultPage] /// [SearchResultPage]
class SearchResultRoute extends PageRouteInfo<SearchResultRouteArgs> { class SearchResultRoute extends PageRouteInfo<SearchResultRouteArgs> {
SearchResultRoute({Key? key, required String searchTerm}) SearchResultRoute({
: super(SearchResultRoute.name, Key? key,
path: '/search-result-page', required String searchTerm,
args: SearchResultRouteArgs(key: key, searchTerm: searchTerm)); }) : super(
SearchResultRoute.name,
path: '/search-result-page',
args: SearchResultRouteArgs(
key: key,
searchTerm: searchTerm,
),
);
static const String name = 'SearchResultRoute'; static const String name = 'SearchResultRoute';
} }
class SearchResultRouteArgs { class SearchResultRouteArgs {
const SearchResultRouteArgs({this.key, required this.searchTerm}); const SearchResultRouteArgs({
this.key,
required this.searchTerm,
});
final Key? key; final Key? key;
@ -364,21 +590,29 @@ class SearchResultRouteArgs {
/// generated route for /// generated route for
/// [CreateAlbumPage] /// [CreateAlbumPage]
class CreateAlbumRoute extends PageRouteInfo<CreateAlbumRouteArgs> { class CreateAlbumRoute extends PageRouteInfo<CreateAlbumRouteArgs> {
CreateAlbumRoute( CreateAlbumRoute({
{Key? key, required bool isSharedAlbum, List<Asset>? initialAssets}) Key? key,
: super(CreateAlbumRoute.name, required bool isSharedAlbum,
path: '/create-album-page', List<Asset>? initialAssets,
args: CreateAlbumRouteArgs( }) : super(
key: key, CreateAlbumRoute.name,
isSharedAlbum: isSharedAlbum, path: '/create-album-page',
initialAssets: initialAssets)); args: CreateAlbumRouteArgs(
key: key,
isSharedAlbum: isSharedAlbum,
initialAssets: initialAssets,
),
);
static const String name = 'CreateAlbumRoute'; static const String name = 'CreateAlbumRoute';
} }
class CreateAlbumRouteArgs { class CreateAlbumRouteArgs {
const CreateAlbumRouteArgs( const CreateAlbumRouteArgs({
{this.key, required this.isSharedAlbum, this.initialAssets}); this.key,
required this.isSharedAlbum,
this.initialAssets,
});
final Key? key; final Key? key;
@ -395,7 +629,11 @@ class CreateAlbumRouteArgs {
/// generated route for /// generated route for
/// [FavoritesPage] /// [FavoritesPage]
class FavoritesRoute extends PageRouteInfo<void> { class FavoritesRoute extends PageRouteInfo<void> {
const FavoritesRoute() : super(FavoritesRoute.name, path: '/favorites-page'); const FavoritesRoute()
: super(
FavoritesRoute.name,
path: '/favorites-page',
);
static const String name = 'FavoritesRoute'; static const String name = 'FavoritesRoute';
} }
@ -404,7 +642,10 @@ class FavoritesRoute extends PageRouteInfo<void> {
/// [AssetSelectionPage] /// [AssetSelectionPage]
class AssetSelectionRoute extends PageRouteInfo<void> { class AssetSelectionRoute extends PageRouteInfo<void> {
const AssetSelectionRoute() const AssetSelectionRoute()
: super(AssetSelectionRoute.name, path: '/asset-selection-page'); : super(
AssetSelectionRoute.name,
path: '/asset-selection-page',
);
static const String name = 'AssetSelectionRoute'; static const String name = 'AssetSelectionRoute';
} }
@ -413,8 +654,10 @@ class AssetSelectionRoute extends PageRouteInfo<void> {
/// [SelectUserForSharingPage] /// [SelectUserForSharingPage]
class SelectUserForSharingRoute extends PageRouteInfo<void> { class SelectUserForSharingRoute extends PageRouteInfo<void> {
const SelectUserForSharingRoute() const SelectUserForSharingRoute()
: super(SelectUserForSharingRoute.name, : super(
path: '/select-user-for-sharing-page'); SelectUserForSharingRoute.name,
path: '/select-user-for-sharing-page',
);
static const String name = 'SelectUserForSharingRoute'; static const String name = 'SelectUserForSharingRoute';
} }
@ -422,16 +665,26 @@ class SelectUserForSharingRoute extends PageRouteInfo<void> {
/// generated route for /// generated route for
/// [AlbumViewerPage] /// [AlbumViewerPage]
class AlbumViewerRoute extends PageRouteInfo<AlbumViewerRouteArgs> { class AlbumViewerRoute extends PageRouteInfo<AlbumViewerRouteArgs> {
AlbumViewerRoute({Key? key, required String albumId}) AlbumViewerRoute({
: super(AlbumViewerRoute.name, Key? key,
path: '/album-viewer-page', required String albumId,
args: AlbumViewerRouteArgs(key: key, albumId: albumId)); }) : super(
AlbumViewerRoute.name,
path: '/album-viewer-page',
args: AlbumViewerRouteArgs(
key: key,
albumId: albumId,
),
);
static const String name = 'AlbumViewerRoute'; static const String name = 'AlbumViewerRoute';
} }
class AlbumViewerRouteArgs { class AlbumViewerRouteArgs {
const AlbumViewerRouteArgs({this.key, required this.albumId}); const AlbumViewerRouteArgs({
this.key,
required this.albumId,
});
final Key? key; final Key? key;
@ -447,18 +700,26 @@ class AlbumViewerRouteArgs {
/// [SelectAdditionalUserForSharingPage] /// [SelectAdditionalUserForSharingPage]
class SelectAdditionalUserForSharingRoute class SelectAdditionalUserForSharingRoute
extends PageRouteInfo<SelectAdditionalUserForSharingRouteArgs> { extends PageRouteInfo<SelectAdditionalUserForSharingRouteArgs> {
SelectAdditionalUserForSharingRoute({Key? key, required Album album}) SelectAdditionalUserForSharingRoute({
: super(SelectAdditionalUserForSharingRoute.name, Key? key,
path: '/select-additional-user-for-sharing-page', required Album album,
args: SelectAdditionalUserForSharingRouteArgs( }) : super(
key: key, album: album)); SelectAdditionalUserForSharingRoute.name,
path: '/select-additional-user-for-sharing-page',
args: SelectAdditionalUserForSharingRouteArgs(
key: key,
album: album,
),
);
static const String name = 'SelectAdditionalUserForSharingRoute'; static const String name = 'SelectAdditionalUserForSharingRoute';
} }
class SelectAdditionalUserForSharingRouteArgs { class SelectAdditionalUserForSharingRouteArgs {
const SelectAdditionalUserForSharingRouteArgs( const SelectAdditionalUserForSharingRouteArgs({
{this.key, required this.album}); this.key,
required this.album,
});
final Key? key; final Key? key;
@ -474,8 +735,10 @@ class SelectAdditionalUserForSharingRouteArgs {
/// [BackupAlbumSelectionPage] /// [BackupAlbumSelectionPage]
class BackupAlbumSelectionRoute extends PageRouteInfo<void> { class BackupAlbumSelectionRoute extends PageRouteInfo<void> {
const BackupAlbumSelectionRoute() const BackupAlbumSelectionRoute()
: super(BackupAlbumSelectionRoute.name, : super(
path: '/backup-album-selection-page'); BackupAlbumSelectionRoute.name,
path: '/backup-album-selection-page',
);
static const String name = 'BackupAlbumSelectionRoute'; static const String name = 'BackupAlbumSelectionRoute';
} }
@ -483,16 +746,26 @@ class BackupAlbumSelectionRoute extends PageRouteInfo<void> {
/// generated route for /// generated route for
/// [AlbumPreviewPage] /// [AlbumPreviewPage]
class AlbumPreviewRoute extends PageRouteInfo<AlbumPreviewRouteArgs> { class AlbumPreviewRoute extends PageRouteInfo<AlbumPreviewRouteArgs> {
AlbumPreviewRoute({Key? key, required AssetPathEntity album}) AlbumPreviewRoute({
: super(AlbumPreviewRoute.name, Key? key,
path: '/album-preview-page', required AssetPathEntity album,
args: AlbumPreviewRouteArgs(key: key, album: album)); }) : super(
AlbumPreviewRoute.name,
path: '/album-preview-page',
args: AlbumPreviewRouteArgs(
key: key,
album: album,
),
);
static const String name = 'AlbumPreviewRoute'; static const String name = 'AlbumPreviewRoute';
} }
class AlbumPreviewRouteArgs { class AlbumPreviewRouteArgs {
const AlbumPreviewRouteArgs({this.key, required this.album}); const AlbumPreviewRouteArgs({
this.key,
required this.album,
});
final Key? key; final Key? key;
@ -508,7 +781,10 @@ class AlbumPreviewRouteArgs {
/// [FailedBackupStatusPage] /// [FailedBackupStatusPage]
class FailedBackupStatusRoute extends PageRouteInfo<void> { class FailedBackupStatusRoute extends PageRouteInfo<void> {
const FailedBackupStatusRoute() const FailedBackupStatusRoute()
: super(FailedBackupStatusRoute.name, path: '/failed-backup-status-page'); : super(
FailedBackupStatusRoute.name,
path: '/failed-backup-status-page',
);
static const String name = 'FailedBackupStatusRoute'; static const String name = 'FailedBackupStatusRoute';
} }
@ -516,7 +792,11 @@ class FailedBackupStatusRoute extends PageRouteInfo<void> {
/// generated route for /// generated route for
/// [SettingsPage] /// [SettingsPage]
class SettingsRoute extends PageRouteInfo<void> { class SettingsRoute extends PageRouteInfo<void> {
const SettingsRoute() : super(SettingsRoute.name, path: '/settings-page'); const SettingsRoute()
: super(
SettingsRoute.name,
path: '/settings-page',
);
static const String name = 'SettingsRoute'; static const String name = 'SettingsRoute';
} }
@ -524,7 +804,11 @@ class SettingsRoute extends PageRouteInfo<void> {
/// generated route for /// generated route for
/// [AppLogPage] /// [AppLogPage]
class AppLogRoute extends PageRouteInfo<void> { class AppLogRoute extends PageRouteInfo<void> {
const AppLogRoute() : super(AppLogRoute.name, path: '/app-log-page'); const AppLogRoute()
: super(
AppLogRoute.name,
path: '/app-log-page',
);
static const String name = 'AppLogRoute'; static const String name = 'AppLogRoute';
} }
@ -532,7 +816,11 @@ class AppLogRoute extends PageRouteInfo<void> {
/// generated route for /// generated route for
/// [HomePage] /// [HomePage]
class HomeRoute extends PageRouteInfo<void> { class HomeRoute extends PageRouteInfo<void> {
const HomeRoute() : super(HomeRoute.name, path: 'home-page'); const HomeRoute()
: super(
HomeRoute.name,
path: 'home-page',
);
static const String name = 'HomeRoute'; static const String name = 'HomeRoute';
} }
@ -541,8 +829,11 @@ class HomeRoute extends PageRouteInfo<void> {
/// [SearchPage] /// [SearchPage]
class SearchRoute extends PageRouteInfo<SearchRouteArgs> { class SearchRoute extends PageRouteInfo<SearchRouteArgs> {
SearchRoute({Key? key}) SearchRoute({Key? key})
: super(SearchRoute.name, : super(
path: 'search-page', args: SearchRouteArgs(key: key)); SearchRoute.name,
path: 'search-page',
args: SearchRouteArgs(key: key),
);
static const String name = 'SearchRoute'; static const String name = 'SearchRoute';
} }
@ -561,7 +852,11 @@ class SearchRouteArgs {
/// generated route for /// generated route for
/// [SharingPage] /// [SharingPage]
class SharingRoute extends PageRouteInfo<void> { class SharingRoute extends PageRouteInfo<void> {
const SharingRoute() : super(SharingRoute.name, path: 'sharing-page'); const SharingRoute()
: super(
SharingRoute.name,
path: 'sharing-page',
);
static const String name = 'SharingRoute'; static const String name = 'SharingRoute';
} }
@ -569,7 +864,11 @@ class SharingRoute extends PageRouteInfo<void> {
/// generated route for /// generated route for
/// [LibraryPage] /// [LibraryPage]
class LibraryRoute extends PageRouteInfo<void> { class LibraryRoute extends PageRouteInfo<void> {
const LibraryRoute() : super(LibraryRoute.name, path: 'library-page'); const LibraryRoute()
: super(
LibraryRoute.name,
path: 'library-page',
);
static const String name = 'LibraryRoute'; static const String name = 'LibraryRoute';
} }