[Feature] Replace go_router with auto_route

This commit is contained in:
PartyDonut 2024-10-05 16:29:51 +02:00
parent b31cc86ae8
commit 144c8faf70
42 changed files with 1181 additions and 980 deletions

View file

@ -1,4 +1,4 @@
import 'package:fladder/routes/build_routes/route_builder.dart';
import 'package:auto_route/auto_route.dart';
import 'package:fladder/widgets/navigation_scaffold/components/adaptive_fab.dart';
import 'package:fladder/widgets/navigation_scaffold/components/navigation_button.dart';
import 'package:flutter/material.dart';
@ -7,7 +7,7 @@ class DestinationModel {
final String label;
final Widget? icon;
final Widget? selectedIcon;
final CustomRoute? route;
final PageRouteInfo? route;
final Function()? action;
final String? tooltip;
final Badge? badge;

View file

@ -1,9 +1,9 @@
import 'package:auto_route/auto_route.dart';
import 'package:fladder/screens/shared/default_titlebar.dart';
import 'package:fladder/util/adaptive_layout.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart';
bool get _isDesktop {
if (kIsWeb) return false;
@ -29,7 +29,7 @@ class FladderAppbar extends StatelessWidget implements PreferredSize {
height: height,
child: Row(
children: [
if (automaticallyImplyLeading && context.canPop()) const BackButton(),
if (automaticallyImplyLeading && context.router.canPop()) const BackButton(),
Expanded(
child: DefaultTitleBar(
label: label,

View file

@ -5,7 +5,7 @@ import 'package:ficonsax/ficonsax.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:fladder/providers/views_provider.dart';
import 'package:fladder/routes/build_routes/settings_routes.dart';
import 'package:fladder/routes/auto_router.gr.dart';
import 'package:fladder/screens/shared/animated_fade_size.dart';
import 'package:fladder/util/adaptive_layout.dart';
import 'package:fladder/widgets/navigation_scaffold/components/adaptive_fab.dart';
@ -110,7 +110,10 @@ class _NavigationBodyState extends ConsumerState<NavigationBody> {
style: Theme.of(context).textTheme.titleSmall,
),
},
if (AdaptiveLayout.of(context).platform == TargetPlatform.macOS) const SizedBox(height: 32) else const SizedBox(height: 16),
if (AdaptiveLayout.of(context).platform == TargetPlatform.macOS)
const SizedBox(height: 32)
else
const SizedBox(height: 16),
IconButton(
onPressed: () {
if (AdaptiveLayout.layoutOf(context) != LayoutState.desktop) {
@ -152,7 +155,7 @@ class _NavigationBodyState extends ConsumerState<NavigationBody> {
height: 48,
child: AnimatedSwitcher(
duration: const Duration(milliseconds: 250),
child: widget.currentLocation.contains(SettingsRoute().route)
child: widget.currentLocation.contains(const SettingsRoute().routeName)
? Card(
color: Theme.of(context).colorScheme.primaryContainer,
child: const Padding(

View file

@ -1,14 +1,13 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:auto_route/auto_route.dart';
import 'package:ficonsax/ficonsax.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:fladder/models/collection_types.dart';
import 'package:fladder/models/view_model.dart';
import 'package:fladder/routes/build_routes/home_routes.dart';
import 'package:fladder/routes/build_routes/route_builder.dart';
import 'package:fladder/routes/build_routes/settings_routes.dart';
import 'package:fladder/routes/auto_router.gr.dart';
import 'package:fladder/screens/metadata/refresh_metadata.dart';
import 'package:fladder/screens/shared/animated_fade_size.dart';
import 'package:fladder/util/adaptive_layout.dart';
@ -74,7 +73,7 @@ class NestedNavigationDrawer extends ConsumerWidget {
),
...destinations.map((destination) => DrawerListButton(
label: destination.label,
selected: destination.route?.route == currentLocation,
selected: context.router.current.name == destination.route?.routeName,
selectedIcon: destination.selectedIcon!,
icon: destination.icon!,
onPressed: () {
@ -93,7 +92,8 @@ class NestedNavigationDrawer extends ConsumerWidget {
),
...views.map((library) => DrawerListButton(
label: library.name,
selected: currentLocation.contains(library.id),
selected: context.router.current.name == LibrarySearchRoute().routeName &&
context.routeData.queryParams.getString('parentId') == library.id,
actions: [
ItemActionButton(
label: Text(context.localized.scanLibrary),
@ -102,7 +102,7 @@ class NestedNavigationDrawer extends ConsumerWidget {
),
],
onPressed: () {
context.routePushOrGo(LibrarySearchRoute(id: library.id));
context.router.push(LibrarySearchRoute(viewModelId: library.id));
Scaffold.of(context).closeDrawer();
},
selectedIcon: Icon(library.collectionType.icon),
@ -115,15 +115,15 @@ class NestedNavigationDrawer extends ConsumerWidget {
child: DrawerListButton(
label: context.localized.settings,
selectedIcon: const Icon(IconsaxBold.setting_3),
selected: currentLocation.contains(SettingsRoute().basePath),
selected: currentLocation.contains(const SettingsRoute().routeName),
icon: const SizedBox(width: 35, height: 35, child: SettingsUserIcon()),
onPressed: () {
switch (AdaptiveLayout.of(context).size) {
case ScreenLayout.single:
context.routePush(SettingsRoute());
const SettingsRoute().push(context);
break;
case ScreenLayout.dual:
context.routeGo(ClientSettingsRoute());
context.router.push(const ClientSettingsRoute());
break;
}
Scaffold.of(context).closeDrawer();
@ -135,14 +135,14 @@ class NestedNavigationDrawer extends ConsumerWidget {
label: context.localized.settings,
selectedIcon: const Icon(IconsaxBold.setting_2),
icon: const Icon(IconsaxOutline.setting_2),
selected: currentLocation.contains(SettingsRoute().basePath),
selected: currentLocation.contains(const SettingsRoute().routeName),
onPressed: () {
switch (AdaptiveLayout.of(context).size) {
case ScreenLayout.single:
context.routePush(SettingsRoute());
const SettingsRoute().push(context);
break;
case ScreenLayout.dual:
context.routeGo(ClientSettingsRoute());
context.router.push(const ClientSettingsRoute());
break;
}
Scaffold.of(context).closeDrawer();

View file

@ -1,8 +1,7 @@
import 'package:auto_route/auto_route.dart';
import 'package:fladder/providers/user_provider.dart';
import 'package:fladder/routes/build_routes/route_builder.dart';
import 'package:fladder/routes/build_routes/settings_routes.dart';
import 'package:fladder/routes/auto_router.gr.dart';
import 'package:fladder/screens/shared/user_icon.dart';
import 'package:fladder/util/adaptive_layout.dart';
import 'package:fladder/util/localization_helper.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
@ -19,11 +18,8 @@ class SettingsUserIcon extends ConsumerWidget {
child: UserIcon(
user: users,
cornerRadius: 200,
onLongPress: () => context.routePush(LockScreenRoute()),
onTap: () => switch (AdaptiveLayout.of(context).size) {
ScreenLayout.single => context.routePush(SettingsRoute()),
ScreenLayout.dual => context.routePush(ClientSettingsRoute()),
},
onLongPress: () => context.router.push(const LockRoute()),
onTap: () => context.router.navigate(const SettingsRoute()),
),
);
}