mirror of
https://github.com/gabehf/Fladder.git
synced 2026-03-08 23:18:16 -07:00
[Feature] Replace go_router with auto_route
This commit is contained in:
parent
b31cc86ae8
commit
144c8faf70
42 changed files with 1181 additions and 980 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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()),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,11 @@
|
|||
import 'package:fladder/models/media_playback_model.dart';
|
||||
import 'package:fladder/providers/video_player_provider.dart';
|
||||
import 'package:fladder/providers/views_provider.dart';
|
||||
import 'package:fladder/routes/app_routes.dart';
|
||||
import 'package:fladder/screens/shared/nested_bottom_appbar.dart';
|
||||
import 'package:fladder/util/adaptive_layout.dart';
|
||||
import 'package:fladder/widgets/navigation_scaffold/components/floating_player_bar.dart';
|
||||
import 'package:fladder/widgets/navigation_scaffold/components/destination_model.dart';
|
||||
import 'package:fladder/widgets/navigation_scaffold/components/fladder_appbar.dart';
|
||||
import 'package:fladder/widgets/navigation_scaffold/components/floating_player_bar.dart';
|
||||
import 'package:fladder/widgets/navigation_scaffold/components/navigation_body.dart';
|
||||
import 'package:fladder/widgets/navigation_scaffold/components/navigation_drawer.dart';
|
||||
import 'package:fladder/widgets/shared/hide_on_scroll.dart';
|
||||
|
|
@ -14,14 +13,12 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
class NavigationScaffold extends ConsumerStatefulWidget {
|
||||
final int? currentIndex;
|
||||
final String? location;
|
||||
final String? currentRouteName;
|
||||
final Widget? nestedChild;
|
||||
final List<DestinationModel> destinations;
|
||||
final GlobalKey<NavigatorState>? nestedNavigatorKey;
|
||||
const NavigationScaffold({
|
||||
this.currentIndex,
|
||||
this.location,
|
||||
this.currentRouteName,
|
||||
this.nestedChild,
|
||||
required this.destinations,
|
||||
this.nestedNavigatorKey,
|
||||
|
|
@ -35,8 +32,9 @@ class NavigationScaffold extends ConsumerStatefulWidget {
|
|||
class _NavigationScaffoldState extends ConsumerState<NavigationScaffold> {
|
||||
final GlobalKey<ScaffoldState> _key = GlobalKey();
|
||||
|
||||
int get currentIndex => widget.destinations.indexWhere((element) => element.route?.route == widget.location);
|
||||
String get currentLocation => widget.location ?? "Nothing";
|
||||
int get currentIndex =>
|
||||
widget.destinations.indexWhere((element) => element.route?.routeName == widget.currentRouteName);
|
||||
String get currentLocation => widget.currentRouteName ?? "Nothing";
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
|
|
@ -50,6 +48,7 @@ class _NavigationScaffoldState extends ConsumerState<NavigationScaffold> {
|
|||
Widget build(BuildContext context) {
|
||||
final playerState = ref.watch(mediaPlaybackProvider.select((value) => value.state));
|
||||
final views = ref.watch(viewsProvider.select((value) => value.views));
|
||||
|
||||
return PopScope(
|
||||
canPop: currentIndex == 0,
|
||||
onPopInvokedWithResult: (didPop, result) {
|
||||
|
|
@ -70,21 +69,21 @@ class _NavigationScaffoldState extends ConsumerState<NavigationScaffold> {
|
|||
padding: EdgeInsets.symmetric(horizontal: 8),
|
||||
child: FloatingPlayerBar(),
|
||||
),
|
||||
_ => widget.destinations.elementAtOrNull(currentIndex)?.floatingActionButton?.normal,
|
||||
_ => currentIndex != -1
|
||||
? widget.destinations.elementAtOrNull(currentIndex)?.floatingActionButton?.normal
|
||||
: null,
|
||||
}
|
||||
: null,
|
||||
drawer: NestedNavigationDrawer(
|
||||
actionButton: null,
|
||||
toggleExpanded: (value) {
|
||||
_key.currentState?.closeDrawer();
|
||||
},
|
||||
toggleExpanded: (value) => _key.currentState?.closeDrawer(),
|
||||
views: views,
|
||||
destinations: widget.destinations,
|
||||
currentLocation: currentLocation,
|
||||
),
|
||||
bottomNavigationBar: AdaptiveLayout.of(context).layout == LayoutState.phone
|
||||
? HideOnScroll(
|
||||
controller: AppRoutes.scrollController,
|
||||
controller: AdaptiveLayout.scrollOf(context),
|
||||
child: NestedBottomAppBar(
|
||||
child: Transform.translate(
|
||||
offset: const Offset(0, 8),
|
||||
|
|
@ -93,8 +92,8 @@ class _NavigationScaffoldState extends ConsumerState<NavigationScaffold> {
|
|||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: widget.destinations
|
||||
.map(
|
||||
(destination) =>
|
||||
destination.toNavigationButton(widget.location == destination.route?.route, false),
|
||||
(destination) => destination.toNavigationButton(
|
||||
widget.currentRouteName == destination.route?.routeName, false),
|
||||
)
|
||||
.toList(),
|
||||
),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue