From c391c76f5ab2c459d027144dc0f3e6fe7b1864d8 Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Sun, 29 Oct 2023 14:31:11 +0100 Subject: [PATCH 1/2] Navigate with root key --- lib/routes/routes.dart | 92 +++++++++---------- .../clients/client/logs_list_client.dart | 13 ++- lib/screens/clients/clients_lists.dart | 17 ++-- lib/screens/filters/filters.dart | 3 +- lib/screens/home/appbar.dart | 5 +- lib/screens/home/top_items.dart | 3 +- lib/screens/logs/logs_list.dart | 13 ++- lib/screens/settings/dhcp/dhcp.dart | 49 ++++++---- lib/screens/settings/dns/dns.dart | 9 +- .../general_settings/general_settings.dart | 9 +- lib/screens/settings/settings.dart | 3 +- 11 files changed, 121 insertions(+), 95 deletions(-) diff --git a/lib/routes/routes.dart b/lib/routes/routes.dart index 9a79603..351906a 100644 --- a/lib/routes/routes.dart +++ b/lib/routes/routes.dart @@ -13,6 +13,26 @@ import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/constants/routes_names.dart'; +Page routePage({ + required BuildContext context, + required Widget child +}) { + if (isDesktop(MediaQuery.of(context).size.width)) { + return NoTransitionPage(child: child); + } + else { + return CustomTransitionPage( + child: child, + transitionsBuilder: (context, anim1, anim2, child) { + return FadeTransition( + opacity: anim1, + child: child, + ); + }, + ); + } +} + final List routes = [ GoRoute( path: "/", @@ -29,14 +49,10 @@ final List routes = [ GoRoute( parentNavigatorKey: homeNavigatorKey, path: RoutesNames.home, - pageBuilder: (context, state) { - if (isDesktop(MediaQuery.of(context).size.width)) { - return const NoTransitionPage(child: Home()); - } - else { - return const MaterialPage(child: Home()); - } - }, + pageBuilder: (context, state) => routePage( + context: context, + child: const Home() + ) ), ] ), @@ -46,14 +62,10 @@ final List routes = [ GoRoute( parentNavigatorKey: clientsNavigatorKey, path: RoutesNames.clients, - pageBuilder: (context, state) { - if (isDesktop(MediaQuery.of(context).size.width)) { - return const NoTransitionPage(child: Clients()); - } - else { - return const MaterialPage(child: Clients()); - } - }, + pageBuilder: (context, state) => routePage( + context: context, + child: const Clients() + ) ) ] ), @@ -63,14 +75,10 @@ final List routes = [ GoRoute( parentNavigatorKey: logsNavigatorKey, path: RoutesNames.logs, - pageBuilder: (context, state) { - if (isDesktop(MediaQuery.of(context).size.width)) { - return const NoTransitionPage(child: Logs()); - } - else { - return const MaterialPage(child: Logs()); - } - }, + pageBuilder: (context, state) => routePage( + context: context, + child: const Logs() + ) ) ] ), @@ -80,14 +88,10 @@ final List routes = [ GoRoute( parentNavigatorKey: filtersNavigatorKey, path: RoutesNames.filters, - pageBuilder: (context, state) { - if (isDesktop(MediaQuery.of(context).size.width)) { - return const NoTransitionPage(child: Filters()); - } - else { - return const MaterialPage(child: Filters()); - } - }, + pageBuilder: (context, state) => routePage( + context: context, + child: const Filters() + ) ) ] ), @@ -97,14 +101,10 @@ final List routes = [ GoRoute( parentNavigatorKey: settingsNavigatorKey, path: RoutesNames.settings, - pageBuilder: (context, state) { - if (isDesktop(MediaQuery.of(context).size.width)) { - return const NoTransitionPage(child: Settings()); - } - else { - return const MaterialPage(child: Settings()); - } - }, + pageBuilder: (context, state) => routePage( + context: context, + child: const Settings() + ) ) ] ), @@ -113,14 +113,10 @@ final List routes = [ routes: [ GoRoute( path: RoutesNames.connect, - pageBuilder: (context, state) { - if (isDesktop(MediaQuery.of(context).size.width)) { - return const NoTransitionPage(child: Connect()); - } - else { - return const MaterialPage(child: Connect()); - } - }, + pageBuilder: (context, state) => routePage( + context: context, + child: const Connect() + ) ) ] ), diff --git a/lib/screens/clients/client/logs_list_client.dart b/lib/screens/clients/client/logs_list_client.dart index 5d8f6ed..fa95e60 100644 --- a/lib/screens/clients/client/logs_list_client.dart +++ b/lib/screens/clients/client/logs_list_client.dart @@ -8,6 +8,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:adguard_home_manager/screens/logs/log_tile.dart'; import 'package:adguard_home_manager/screens/logs/log_details_screen.dart'; +import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/models/logs.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; @@ -212,12 +213,14 @@ class _LogsListClientState extends State { ) } else { - Navigator.push(context, MaterialPageRoute( - builder: (context) => LogDetailsScreen( - log: log, - dialog: false + rootNavigatorKey.currentState!.push( + MaterialPageRoute( + builder: (context) => LogDetailsScreen( + log: log, + dialog: false + ) ) - )) + ) } }, twoColumns: widget.splitView, diff --git a/lib/screens/clients/clients_lists.dart b/lib/screens/clients/clients_lists.dart index ec451bc..47e7d12 100644 --- a/lib/screens/clients/clients_lists.dart +++ b/lib/screens/clients/clients_lists.dart @@ -8,6 +8,7 @@ import 'package:adguard_home_manager/screens/clients/client/logs_list_client.dar import 'package:adguard_home_manager/screens/clients/clients_list.dart'; import 'package:adguard_home_manager/constants/enums.dart'; +import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/models/clients.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; @@ -71,9 +72,11 @@ class _ClientsListsState extends State with TickerProviderStateMix SplitView.of(context).push(w); } else { - Navigator.push(context, MaterialPageRoute( - builder: (context) => w, - )); + rootNavigatorKey.currentState!.push( + MaterialPageRoute( + builder: (context) => w, + ) + ); } } @@ -89,9 +92,11 @@ class _ClientsListsState extends State with TickerProviderStateMix SplitView.of(context).push(w); } else { - Navigator.push(context, MaterialPageRoute( - builder: (context) => w, - )); + rootNavigatorKey.currentState!.push( + MaterialPageRoute( + builder: (context) => w, + ) + ); } } diff --git a/lib/screens/filters/filters.dart b/lib/screens/filters/filters.dart index 5975cf6..919f22c 100644 --- a/lib/screens/filters/filters.dart +++ b/lib/screens/filters/filters.dart @@ -14,6 +14,7 @@ import 'package:adguard_home_manager/screens/filters/remove_custom_rule_modal.da import 'package:adguard_home_manager/screens/filters/blocked_services_screen.dart'; import 'package:adguard_home_manager/screens/filters/update_interval_lists_modal.dart'; +import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/providers/status_provider.dart'; import 'package:adguard_home_manager/classes/process_modal.dart'; @@ -202,7 +203,7 @@ class _FiltersState extends State { ); } else { - Navigator.of(context).push( + rootNavigatorKey.currentState!.push( MaterialPageRoute( builder: (context) => ListDetailsScreen( listId: filter.id, diff --git a/lib/screens/home/appbar.dart b/lib/screens/home/appbar.dart index 34893b6..2bccc66 100644 --- a/lib/screens/home/appbar.dart +++ b/lib/screens/home/appbar.dart @@ -1,10 +1,11 @@ -import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:adguard_home_manager/screens/servers/servers.dart'; +import 'package:adguard_home_manager/functions/desktop_mode.dart'; +import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/constants/enums.dart'; import 'package:adguard_home_manager/providers/status_provider.dart'; import 'package:adguard_home_manager/functions/open_url.dart'; @@ -32,7 +33,7 @@ class HomeAppBar extends StatelessWidget { void navigateServers() { Future.delayed(const Duration(milliseconds: 0), (() { - Navigator.of(context).push( + rootNavigatorKey.currentState!.push( MaterialPageRoute(builder: (context) => const Servers()) ); })); diff --git a/lib/screens/home/top_items.dart b/lib/screens/home/top_items.dart index 06ef00e..dce0f52 100644 --- a/lib/screens/home/top_items.dart +++ b/lib/screens/home/top_items.dart @@ -11,6 +11,7 @@ import 'package:adguard_home_manager/widgets/domain_options.dart'; import 'package:adguard_home_manager/screens/top_items/top_items_modal.dart'; import 'package:adguard_home_manager/screens/top_items/top_items.dart'; +import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/models/applied_filters.dart'; import 'package:adguard_home_manager/providers/status_provider.dart'; import 'package:adguard_home_manager/providers/logs_provider.dart'; @@ -217,7 +218,7 @@ class _TopItemsState extends State { ) } else { - Navigator.of(context).push( + rootNavigatorKey.currentState!.push( MaterialPageRoute( builder: (context) => TopItemsScreen( type: widget.type, diff --git a/lib/screens/logs/logs_list.dart b/lib/screens/logs/logs_list.dart index 6fd80e6..fa1aed2 100644 --- a/lib/screens/logs/logs_list.dart +++ b/lib/screens/logs/logs_list.dart @@ -12,6 +12,7 @@ import 'package:adguard_home_manager/screens/logs/logs_config_modal.dart'; import 'package:adguard_home_manager/screens/logs/logs_filters_modal.dart'; import 'package:adguard_home_manager/classes/process_modal.dart'; +import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/constants/enums.dart'; import 'package:adguard_home_manager/functions/compare_versions.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; @@ -463,12 +464,14 @@ class _LogsListWidgetState extends State { isLogSelected: widget.selectedLog != null && widget.selectedLog == logsProvider.logsData!.data[index], onLogTap: (log) { if (!widget.twoColumns) { - Navigator.push(context, MaterialPageRoute( - builder: (context) => LogDetailsScreen( - log: log, - dialog: false, + rootNavigatorKey.currentState!.push( + MaterialPageRoute( + builder: (context) => LogDetailsScreen( + log: log, + dialog: false, + ) ) - )); + ); } widget.onLogSelected(log); }, diff --git a/lib/screens/settings/dhcp/dhcp.dart b/lib/screens/settings/dhcp/dhcp.dart index aa44414..ccd50e7 100644 --- a/lib/screens/settings/dhcp/dhcp.dart +++ b/lib/screens/settings/dhcp/dhcp.dart @@ -12,6 +12,7 @@ import 'package:adguard_home_manager/widgets/confirm_action_modal.dart'; import 'package:adguard_home_manager/screens/settings/dhcp/dhcp_leases.dart'; import 'package:adguard_home_manager/screens/settings/dhcp/select_interface_modal.dart'; +import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/constants/enums.dart'; @@ -705,12 +706,14 @@ class _DhcpScreenState extends State { color: Colors.transparent, child: InkWell( onTap: () { - Navigator.push(context, MaterialPageRoute( - builder: (context) => DhcpLeases( - items: dhcpProvider.dhcp!.dhcpStatus.leases, - staticLeases: false, + rootNavigatorKey.currentState!.push( + MaterialPageRoute( + builder: (context) => DhcpLeases( + items: dhcpProvider.dhcp!.dhcpStatus.leases, + staticLeases: false, + ) ) - )); + ); }, child: Container( padding: const EdgeInsets.all(16), @@ -738,12 +741,14 @@ class _DhcpScreenState extends State { color: Colors.transparent, child: InkWell( onTap: () { - Navigator.push(context, MaterialPageRoute( - builder: (context) => DhcpLeases( - items: dhcpProvider.dhcp!.dhcpStatus.staticLeases, - staticLeases: true, + rootNavigatorKey.currentState!.push( + MaterialPageRoute( + builder: (context) => DhcpLeases( + items: dhcpProvider.dhcp!.dhcpStatus.staticLeases, + staticLeases: true, + ) ) - )); + ); }, child: Container( padding: const EdgeInsets.all(16), @@ -781,12 +786,14 @@ class _DhcpScreenState extends State { ); } else { - Navigator.push(context, MaterialPageRoute( - builder: (context) => DhcpLeases( - items: dhcpProvider.dhcp!.dhcpStatus.leases, - staticLeases: false, + rootNavigatorKey.currentState!.push( + MaterialPageRoute( + builder: (context) => DhcpLeases( + items: dhcpProvider.dhcp!.dhcpStatus.leases, + staticLeases: false, + ) ) - )); + ); } }, child: Row( @@ -808,12 +815,14 @@ class _DhcpScreenState extends State { ); } else { - Navigator.push(context, MaterialPageRoute( - builder: (context) => DhcpLeases( - items: dhcpProvider.dhcp!.dhcpStatus.staticLeases, - staticLeases: true, + rootNavigatorKey.currentState!.push( + MaterialPageRoute( + builder: (context) => DhcpLeases( + items: dhcpProvider.dhcp!.dhcpStatus.staticLeases, + staticLeases: true, + ) ) - )); + ); } }, child: Row( diff --git a/lib/screens/settings/dns/dns.dart b/lib/screens/settings/dns/dns.dart index 7d0760b..063b9a3 100644 --- a/lib/screens/settings/dns/dns.dart +++ b/lib/screens/settings/dns/dns.dart @@ -14,6 +14,7 @@ import 'package:adguard_home_manager/screens/settings/dns/upstream_dns.dart'; import 'package:adguard_home_manager/widgets/custom_list_tile.dart'; import 'package:adguard_home_manager/constants/enums.dart'; +import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/providers/dns_provider.dart'; import 'package:adguard_home_manager/functions/clear_dns_cache.dart'; @@ -53,9 +54,11 @@ class _DnsSettingsState extends State { SplitView.of(context).push(w); } else { - Navigator.push(context, MaterialPageRoute( - builder: (context) => w - )); + rootNavigatorKey.currentState!.push( + MaterialPageRoute( + builder: (context) => w + ) + ); } } diff --git a/lib/screens/settings/general_settings/general_settings.dart b/lib/screens/settings/general_settings/general_settings.dart index cef6a8f..e91156b 100644 --- a/lib/screens/settings/general_settings/general_settings.dart +++ b/lib/screens/settings/general_settings/general_settings.dart @@ -12,6 +12,7 @@ import 'package:adguard_home_manager/screens/settings/general_settings/reorderab import 'package:adguard_home_manager/widgets/custom_list_tile.dart'; import 'package:adguard_home_manager/widgets/section_label.dart'; +import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/functions/check_app_updates.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/functions/snackbar.dart'; @@ -191,9 +192,11 @@ class _GeneralSettingsState extends State { icon: Icons.reorder_rounded, title: AppLocalizations.of(context)!.topItemsOrder, subtitle: AppLocalizations.of(context)!.topItemsOrderDescription, - onTap: () => Navigator.push(context, MaterialPageRoute( - builder: (context) => const ReorderableTopItemsHome() - )), + onTap: () => rootNavigatorKey.currentState!.push( + MaterialPageRoute( + builder: (context) => const ReorderableTopItemsHome() + ) + ) ), CustomListTile( icon: Icons.donut_large_rounded, diff --git a/lib/screens/settings/settings.dart b/lib/screens/settings/settings.dart index 0f01b44..ce6ea5f 100644 --- a/lib/screens/settings/settings.dart +++ b/lib/screens/settings/settings.dart @@ -23,6 +23,7 @@ import 'package:adguard_home_manager/widgets/custom_settings_tile.dart'; import 'package:adguard_home_manager/widgets/section_label.dart'; import 'package:adguard_home_manager/widgets/custom_list_tile.dart'; +import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/constants/strings.dart'; import 'package:adguard_home_manager/functions/open_url.dart'; @@ -119,7 +120,7 @@ class SettingsWidget extends StatelessWidget { icon: icon, trailing: trailing, onTap: () { - Navigator.of(context).push( + rootNavigatorKey.currentState!.push( MaterialPageRoute(builder: (context) => screenToNavigate) ); }, From af14484a9512fc6f7c9c349cad269f093d040b28 Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Sun, 29 Oct 2023 15:38:17 +0100 Subject: [PATCH 2/2] Removed go router --- lib/config/app_screens.dart | 14 ++ lib/main.dart | 7 +- lib/models/app_screen.dart | 4 +- lib/routes/router.dart | 20 --- lib/routes/router_globals.dart | 10 -- lib/routes/routes.dart | 125 ------------------ .../clients/client/logs_list_client.dart | 3 +- lib/screens/clients/clients_lists.dart | 5 +- lib/screens/filters/filters.dart | 3 +- lib/screens/home/appbar.dart | 3 +- lib/screens/home/top_items.dart | 3 +- lib/screens/logs/logs_list.dart | 3 +- lib/screens/settings/dhcp/dhcp.dart | 9 +- lib/screens/settings/dns/dns.dart | 3 +- .../general_settings/general_settings.dart | 3 +- lib/screens/settings/settings.dart | 22 ++- lib/widgets/layout.dart | 52 +++++--- pubspec.lock | 16 --- pubspec.yaml | 1 - 19 files changed, 85 insertions(+), 221 deletions(-) delete mode 100644 lib/routes/router.dart delete mode 100644 lib/routes/router_globals.dart delete mode 100644 lib/routes/routes.dart diff --git a/lib/config/app_screens.dart b/lib/config/app_screens.dart index 4f9a97d..2326e31 100644 --- a/lib/config/app_screens.dart +++ b/lib/config/app_screens.dart @@ -1,15 +1,24 @@ import 'package:flutter/material.dart'; +import 'package:adguard_home_manager/screens/clients/clients.dart'; +import 'package:adguard_home_manager/screens/connect/connect.dart'; +import 'package:adguard_home_manager/screens/filters/filters.dart'; +import 'package:adguard_home_manager/screens/home/home.dart'; +import 'package:adguard_home_manager/screens/logs/logs.dart'; +import 'package:adguard_home_manager/screens/settings/settings.dart'; + import 'package:adguard_home_manager/models/app_screen.dart'; List screensSelectServer = [ const AppScreen( name: "connect", icon: Icons.link_rounded, + child: Connect() ), const AppScreen( name: "settings", icon: Icons.settings_rounded, + child: Settings() ) ]; @@ -17,21 +26,26 @@ List screensServerConnected = [ const AppScreen( name: "home", icon: Icons.home_rounded, + child: Home() ), const AppScreen( name: "clients", icon: Icons.devices, + child: Clients() ), const AppScreen( name: "logs", icon: Icons.list_alt_rounded, + child: Logs() ), const AppScreen( name: "filters", icon: Icons.shield_rounded, + child: Filters() ), const AppScreen( name: "settings", icon: Icons.settings_rounded, + child: Settings() ) ]; \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 1548e4a..f34459f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -16,11 +16,12 @@ import 'package:window_size/window_size.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:adguard_home_manager/widgets/layout.dart'; import 'package:adguard_home_manager/widgets/menu_bar.dart'; + import 'package:adguard_home_manager/functions/check_app_updates.dart'; import 'package:adguard_home_manager/functions/open_url.dart'; import 'package:adguard_home_manager/widgets/update_modal.dart'; -import 'package:adguard_home_manager/routes/router.dart'; import 'package:adguard_home_manager/providers/logs_provider.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; import 'package:adguard_home_manager/providers/clients_provider.dart'; @@ -244,7 +245,7 @@ class _MainState extends State
with WidgetsBindingObserver { : Brightness.light, ), child: DynamicColorBuilder( - builder: (lightDynamic, darkDynamic) => MaterialApp.router( + builder: (lightDynamic, darkDynamic) => MaterialApp( title: 'AdGuard Home Manager', theme: appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31 ? appConfigProvider.useDynamicColor == true @@ -285,7 +286,7 @@ class _MainState extends State
with WidgetsBindingObserver { ), ); }, - routerConfig: goRouter, + home: Layout(), ), ), ); diff --git a/lib/models/app_screen.dart b/lib/models/app_screen.dart index 1e377eb..4412022 100644 --- a/lib/models/app_screen.dart +++ b/lib/models/app_screen.dart @@ -5,11 +5,13 @@ class AppScreen { final IconData icon; final PreferredSizeWidget? appBar; final Widget? fab; + final Widget child; const AppScreen({ required this.name, required this.icon, this.appBar, - this.fab + this.fab, + required this.child, }); } \ No newline at end of file diff --git a/lib/routes/router.dart b/lib/routes/router.dart deleted file mode 100644 index 9b1cfba..0000000 --- a/lib/routes/router.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:go_router/go_router.dart'; -import 'package:provider/provider.dart'; - -import 'package:adguard_home_manager/routes/router_globals.dart'; -import 'package:adguard_home_manager/routes/routes.dart'; -import 'package:adguard_home_manager/providers/servers_provider.dart'; -import 'package:adguard_home_manager/constants/routes_names.dart'; - -final goRouter = GoRouter( - navigatorKey: rootNavigatorKey, - redirect: (context, state) { - final serversProvider = Provider.of(context, listen: false); - if (serversProvider.selectedServer == null) { - return RoutesNames.connect; - } - return null; - }, - initialLocation: RoutesNames.home, - routes: routes, -); \ No newline at end of file diff --git a/lib/routes/router_globals.dart b/lib/routes/router_globals.dart deleted file mode 100644 index f78c1a7..0000000 --- a/lib/routes/router_globals.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'package:flutter/widgets.dart'; - -final GlobalKey rootNavigatorKey = GlobalKey(); -final GlobalKey connectNavigatorKey = GlobalKey(); -final GlobalKey homeNavigatorKey = GlobalKey(); -final GlobalKey clientsNavigatorKey = GlobalKey(); -final GlobalKey logsNavigatorKey = GlobalKey(); -final GlobalKey filtersNavigatorKey = GlobalKey(); -final GlobalKey settingsNavigatorKey = GlobalKey(); -final GlobalKey settingsListNavigatorKey = GlobalKey(); \ No newline at end of file diff --git a/lib/routes/routes.dart b/lib/routes/routes.dart deleted file mode 100644 index 351906a..0000000 --- a/lib/routes/routes.dart +++ /dev/null @@ -1,125 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:go_router/go_router.dart'; - -import 'package:adguard_home_manager/screens/home/home.dart'; -import 'package:adguard_home_manager/screens/clients/clients.dart'; -import 'package:adguard_home_manager/screens/connect/connect.dart'; -import 'package:adguard_home_manager/screens/filters/filters.dart'; -import 'package:adguard_home_manager/screens/logs/logs.dart'; -import 'package:adguard_home_manager/screens/settings/settings.dart'; -import 'package:adguard_home_manager/widgets/layout.dart'; - -import 'package:adguard_home_manager/functions/desktop_mode.dart'; -import 'package:adguard_home_manager/routes/router_globals.dart'; -import 'package:adguard_home_manager/constants/routes_names.dart'; - -Page routePage({ - required BuildContext context, - required Widget child -}) { - if (isDesktop(MediaQuery.of(context).size.width)) { - return NoTransitionPage(child: child); - } - else { - return CustomTransitionPage( - child: child, - transitionsBuilder: (context, anim1, anim2, child) { - return FadeTransition( - opacity: anim1, - child: child, - ); - }, - ); - } -} - -final List routes = [ - GoRoute( - path: "/", - redirect: (context, state) => RoutesNames.home, - ), - StatefulShellRoute.indexedStack( - builder: (context, state, navigationShell) => Layout( - navigationShell: navigationShell - ), - branches: [ - StatefulShellBranch( - navigatorKey: homeNavigatorKey, - routes: [ - GoRoute( - parentNavigatorKey: homeNavigatorKey, - path: RoutesNames.home, - pageBuilder: (context, state) => routePage( - context: context, - child: const Home() - ) - ), - ] - ), - StatefulShellBranch( - navigatorKey: clientsNavigatorKey, - routes: [ - GoRoute( - parentNavigatorKey: clientsNavigatorKey, - path: RoutesNames.clients, - pageBuilder: (context, state) => routePage( - context: context, - child: const Clients() - ) - ) - ] - ), - StatefulShellBranch( - navigatorKey: logsNavigatorKey, - routes: [ - GoRoute( - parentNavigatorKey: logsNavigatorKey, - path: RoutesNames.logs, - pageBuilder: (context, state) => routePage( - context: context, - child: const Logs() - ) - ) - ] - ), - StatefulShellBranch( - navigatorKey: filtersNavigatorKey, - routes: [ - GoRoute( - parentNavigatorKey: filtersNavigatorKey, - path: RoutesNames.filters, - pageBuilder: (context, state) => routePage( - context: context, - child: const Filters() - ) - ) - ] - ), - StatefulShellBranch( - navigatorKey: settingsNavigatorKey, - routes: [ - GoRoute( - parentNavigatorKey: settingsNavigatorKey, - path: RoutesNames.settings, - pageBuilder: (context, state) => routePage( - context: context, - child: const Settings() - ) - ) - ] - ), - StatefulShellBranch( - navigatorKey: connectNavigatorKey, - routes: [ - GoRoute( - path: RoutesNames.connect, - pageBuilder: (context, state) => routePage( - context: context, - child: const Connect() - ) - ) - ] - ), - ] - ) -]; \ No newline at end of file diff --git a/lib/screens/clients/client/logs_list_client.dart b/lib/screens/clients/client/logs_list_client.dart index fa95e60..9761e3f 100644 --- a/lib/screens/clients/client/logs_list_client.dart +++ b/lib/screens/clients/client/logs_list_client.dart @@ -8,7 +8,6 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:adguard_home_manager/screens/logs/log_tile.dart'; import 'package:adguard_home_manager/screens/logs/log_details_screen.dart'; -import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/models/logs.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; @@ -213,7 +212,7 @@ class _LogsListClientState extends State { ) } else { - rootNavigatorKey.currentState!.push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) => LogDetailsScreen( log: log, diff --git a/lib/screens/clients/clients_lists.dart b/lib/screens/clients/clients_lists.dart index 47e7d12..0e518ce 100644 --- a/lib/screens/clients/clients_lists.dart +++ b/lib/screens/clients/clients_lists.dart @@ -8,7 +8,6 @@ import 'package:adguard_home_manager/screens/clients/client/logs_list_client.dar import 'package:adguard_home_manager/screens/clients/clients_list.dart'; import 'package:adguard_home_manager/constants/enums.dart'; -import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/models/clients.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; @@ -72,7 +71,7 @@ class _ClientsListsState extends State with TickerProviderStateMix SplitView.of(context).push(w); } else { - rootNavigatorKey.currentState!.push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) => w, ) @@ -92,7 +91,7 @@ class _ClientsListsState extends State with TickerProviderStateMix SplitView.of(context).push(w); } else { - rootNavigatorKey.currentState!.push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) => w, ) diff --git a/lib/screens/filters/filters.dart b/lib/screens/filters/filters.dart index 919f22c..5975cf6 100644 --- a/lib/screens/filters/filters.dart +++ b/lib/screens/filters/filters.dart @@ -14,7 +14,6 @@ import 'package:adguard_home_manager/screens/filters/remove_custom_rule_modal.da import 'package:adguard_home_manager/screens/filters/blocked_services_screen.dart'; import 'package:adguard_home_manager/screens/filters/update_interval_lists_modal.dart'; -import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/providers/status_provider.dart'; import 'package:adguard_home_manager/classes/process_modal.dart'; @@ -203,7 +202,7 @@ class _FiltersState extends State { ); } else { - rootNavigatorKey.currentState!.push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) => ListDetailsScreen( listId: filter.id, diff --git a/lib/screens/home/appbar.dart b/lib/screens/home/appbar.dart index 2bccc66..365e606 100644 --- a/lib/screens/home/appbar.dart +++ b/lib/screens/home/appbar.dart @@ -5,7 +5,6 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:adguard_home_manager/screens/servers/servers.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; -import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/constants/enums.dart'; import 'package:adguard_home_manager/providers/status_provider.dart'; import 'package:adguard_home_manager/functions/open_url.dart'; @@ -33,7 +32,7 @@ class HomeAppBar extends StatelessWidget { void navigateServers() { Future.delayed(const Duration(milliseconds: 0), (() { - rootNavigatorKey.currentState!.push( + Navigator.of(context).push( MaterialPageRoute(builder: (context) => const Servers()) ); })); diff --git a/lib/screens/home/top_items.dart b/lib/screens/home/top_items.dart index dce0f52..06ef00e 100644 --- a/lib/screens/home/top_items.dart +++ b/lib/screens/home/top_items.dart @@ -11,7 +11,6 @@ import 'package:adguard_home_manager/widgets/domain_options.dart'; import 'package:adguard_home_manager/screens/top_items/top_items_modal.dart'; import 'package:adguard_home_manager/screens/top_items/top_items.dart'; -import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/models/applied_filters.dart'; import 'package:adguard_home_manager/providers/status_provider.dart'; import 'package:adguard_home_manager/providers/logs_provider.dart'; @@ -218,7 +217,7 @@ class _TopItemsState extends State { ) } else { - rootNavigatorKey.currentState!.push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) => TopItemsScreen( type: widget.type, diff --git a/lib/screens/logs/logs_list.dart b/lib/screens/logs/logs_list.dart index fa1aed2..b04fe74 100644 --- a/lib/screens/logs/logs_list.dart +++ b/lib/screens/logs/logs_list.dart @@ -12,7 +12,6 @@ import 'package:adguard_home_manager/screens/logs/logs_config_modal.dart'; import 'package:adguard_home_manager/screens/logs/logs_filters_modal.dart'; import 'package:adguard_home_manager/classes/process_modal.dart'; -import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/constants/enums.dart'; import 'package:adguard_home_manager/functions/compare_versions.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; @@ -464,7 +463,7 @@ class _LogsListWidgetState extends State { isLogSelected: widget.selectedLog != null && widget.selectedLog == logsProvider.logsData!.data[index], onLogTap: (log) { if (!widget.twoColumns) { - rootNavigatorKey.currentState!.push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) => LogDetailsScreen( log: log, diff --git a/lib/screens/settings/dhcp/dhcp.dart b/lib/screens/settings/dhcp/dhcp.dart index ccd50e7..c003ea2 100644 --- a/lib/screens/settings/dhcp/dhcp.dart +++ b/lib/screens/settings/dhcp/dhcp.dart @@ -12,7 +12,6 @@ import 'package:adguard_home_manager/widgets/confirm_action_modal.dart'; import 'package:adguard_home_manager/screens/settings/dhcp/dhcp_leases.dart'; import 'package:adguard_home_manager/screens/settings/dhcp/select_interface_modal.dart'; -import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/constants/enums.dart'; @@ -706,7 +705,7 @@ class _DhcpScreenState extends State { color: Colors.transparent, child: InkWell( onTap: () { - rootNavigatorKey.currentState!.push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) => DhcpLeases( items: dhcpProvider.dhcp!.dhcpStatus.leases, @@ -741,7 +740,7 @@ class _DhcpScreenState extends State { color: Colors.transparent, child: InkWell( onTap: () { - rootNavigatorKey.currentState!.push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) => DhcpLeases( items: dhcpProvider.dhcp!.dhcpStatus.staticLeases, @@ -786,7 +785,7 @@ class _DhcpScreenState extends State { ); } else { - rootNavigatorKey.currentState!.push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) => DhcpLeases( items: dhcpProvider.dhcp!.dhcpStatus.leases, @@ -815,7 +814,7 @@ class _DhcpScreenState extends State { ); } else { - rootNavigatorKey.currentState!.push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) => DhcpLeases( items: dhcpProvider.dhcp!.dhcpStatus.staticLeases, diff --git a/lib/screens/settings/dns/dns.dart b/lib/screens/settings/dns/dns.dart index 063b9a3..1f74669 100644 --- a/lib/screens/settings/dns/dns.dart +++ b/lib/screens/settings/dns/dns.dart @@ -14,7 +14,6 @@ import 'package:adguard_home_manager/screens/settings/dns/upstream_dns.dart'; import 'package:adguard_home_manager/widgets/custom_list_tile.dart'; import 'package:adguard_home_manager/constants/enums.dart'; -import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/providers/dns_provider.dart'; import 'package:adguard_home_manager/functions/clear_dns_cache.dart'; @@ -54,7 +53,7 @@ class _DnsSettingsState extends State { SplitView.of(context).push(w); } else { - rootNavigatorKey.currentState!.push( + Navigator.of(context).push( MaterialPageRoute( builder: (context) => w ) diff --git a/lib/screens/settings/general_settings/general_settings.dart b/lib/screens/settings/general_settings/general_settings.dart index e91156b..4625136 100644 --- a/lib/screens/settings/general_settings/general_settings.dart +++ b/lib/screens/settings/general_settings/general_settings.dart @@ -12,7 +12,6 @@ import 'package:adguard_home_manager/screens/settings/general_settings/reorderab import 'package:adguard_home_manager/widgets/custom_list_tile.dart'; import 'package:adguard_home_manager/widgets/section_label.dart'; -import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/functions/check_app_updates.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/functions/snackbar.dart'; @@ -192,7 +191,7 @@ class _GeneralSettingsState extends State { icon: Icons.reorder_rounded, title: AppLocalizations.of(context)!.topItemsOrder, subtitle: AppLocalizations.of(context)!.topItemsOrderDescription, - onTap: () => rootNavigatorKey.currentState!.push( + onTap: () => Navigator.of(context).push( MaterialPageRoute( builder: (context) => const ReorderableTopItemsHome() ) diff --git a/lib/screens/settings/settings.dart b/lib/screens/settings/settings.dart index ce6ea5f..6a67d28 100644 --- a/lib/screens/settings/settings.dart +++ b/lib/screens/settings/settings.dart @@ -23,7 +23,6 @@ import 'package:adguard_home_manager/widgets/custom_settings_tile.dart'; import 'package:adguard_home_manager/widgets/section_label.dart'; import 'package:adguard_home_manager/widgets/custom_list_tile.dart'; -import 'package:adguard_home_manager/routes/router_globals.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/constants/strings.dart'; import 'package:adguard_home_manager/functions/open_url.dart'; @@ -71,7 +70,7 @@ class Settings extends StatelessWidget { ); } } -class SettingsWidget extends StatelessWidget { +class SettingsWidget extends StatefulWidget { final bool twoColumns; const SettingsWidget({ @@ -79,6 +78,17 @@ class SettingsWidget extends StatelessWidget { required this.twoColumns, }) : super(key: key); + @override + State createState() => _SettingsWidgetState(); +} + +class _SettingsWidgetState extends State { + @override + void initState() { + Provider.of(context, listen: false).setSelectedSettingsScreen(screen: null); + super.initState(); + } + @override Widget build(BuildContext context) { final serversProvider = Provider.of(context); @@ -87,7 +97,7 @@ class SettingsWidget extends StatelessWidget { final width = MediaQuery.of(context).size.width; - if (!twoColumns && appConfigProvider.selectedSettingsScreen != null) { + if (!widget.twoColumns && appConfigProvider.selectedSettingsScreen != null) { appConfigProvider.setSelectedSettingsScreen(screen: null); } @@ -99,7 +109,7 @@ class SettingsWidget extends StatelessWidget { required Widget screenToNavigate, required int thisItem }) { - if (twoColumns) { + if (widget.twoColumns) { return CustomSettingsTile( title: title, subtitle: subtitle, @@ -120,7 +130,7 @@ class SettingsWidget extends StatelessWidget { icon: icon, trailing: trailing, onTap: () { - rootNavigatorKey.currentState!.push( + Navigator.of(context).push( MaterialPageRoute(builder: (context) => screenToNavigate) ); }, @@ -191,7 +201,7 @@ class SettingsWidget extends StatelessWidget { subtitle: AppLocalizations.of(context)!.dnsSettingsDescription, thisItem: 3, screenToNavigate: DnsSettings( - splitView: twoColumns, + splitView: widget.twoColumns, ), ), settingsTile( diff --git a/lib/widgets/layout.dart b/lib/widgets/layout.dart index 6104b6f..a7da996 100644 --- a/lib/widgets/layout.dart +++ b/lib/widgets/layout.dart @@ -1,18 +1,16 @@ import 'package:flutter/material.dart'; +import 'package:animations/animations.dart'; import 'package:provider/provider.dart'; -import 'package:go_router/go_router.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:adguard_home_manager/providers/app_config_provider.dart'; import 'package:adguard_home_manager/config/app_screens.dart'; import 'package:adguard_home_manager/config/sizes.dart'; import 'package:adguard_home_manager/providers/servers_provider.dart'; class Layout extends StatefulWidget { - final StatefulNavigationShell navigationShell; - const Layout({ Key? key, - required this.navigationShell, }) : super(key: key); @override @@ -23,10 +21,7 @@ class _LayoutState extends State { bool _drawerExpanded = true; void _goBranch(int index) { - widget.navigationShell.goBranch( - index, - initialLocation: index == widget.navigationShell.currentIndex, - ); + Provider.of(context, listen: false).setSelectedScreen(index); } @override @@ -34,6 +29,11 @@ class _LayoutState extends State { final width = MediaQuery.of(context).size.width; final serversProvider = Provider.of(context); + final appConfigProvider = Provider.of(context); + + final screens = serversProvider.selectedServer != null + ? screensServerConnected + : screensSelectServer; String translatedName(String key) { switch (key) { @@ -93,8 +93,7 @@ class _LayoutState extends State { (s) => DrawerTile( icon: s.value.icon, title: translatedName(s.value.name), - isSelected: - widget.navigationShell.currentIndex == s.key, + isSelected: appConfigProvider.selectedScreen == s.key, onSelect: () => _goBranch(s.key), withoutTitle: !_drawerExpanded, ), @@ -104,8 +103,7 @@ class _LayoutState extends State { (s) => DrawerTile( icon: s.value.icon, title: translatedName(s.value.name), - isSelected: - widget.navigationShell.currentIndex == s.key, + isSelected: appConfigProvider.selectedScreen == s.key, onSelect: () => _goBranch(s.key), withoutTitle: !_drawerExpanded, ), @@ -114,7 +112,17 @@ class _LayoutState extends State { ), ), Expanded( - child: widget.navigationShell + child: PageTransitionSwitcher( + duration: const Duration(milliseconds: 200), + transitionBuilder: ( + (child, primaryAnimation, secondaryAnimation) => FadeThroughTransition( + animation: primaryAnimation, + secondaryAnimation: secondaryAnimation, + child: child, + ) + ), + child: screens[appConfigProvider.selectedScreen].child, + ), ), ], ), @@ -126,18 +134,28 @@ class _LayoutState extends State { : screensSelectServer; return Scaffold( - body: widget.navigationShell, + body: PageTransitionSwitcher( + duration: const Duration(milliseconds: 200), + transitionBuilder: ( + (child, primaryAnimation, secondaryAnimation) => FadeThroughTransition( + animation: primaryAnimation, + secondaryAnimation: secondaryAnimation, + child: child, + ) + ), + child: screens[appConfigProvider.selectedScreen].child, + ), bottomNavigationBar: NavigationBar( - selectedIndex: (serversProvider.selectedServer == null || serversProvider.apiClient == null) && widget.navigationShell.currentIndex > 1 + selectedIndex: (serversProvider.selectedServer == null || serversProvider.apiClient == null) && appConfigProvider.selectedScreen > 1 ? 0 - : widget.navigationShell.currentIndex, + : appConfigProvider.selectedScreen, onDestinationSelected: (s) => _goBranch(s), destinations: screens.asMap().entries.map((screen) => NavigationDestination( icon: Stack( children: [ Icon( screen.value.icon, - color: widget.navigationShell.currentIndex == screen.key + color: appConfigProvider.selectedScreen == screen.key ? Theme.of(context).colorScheme.onSecondaryContainer : Theme.of(context).colorScheme.onSurfaceVariant, ), diff --git a/pubspec.lock b/pubspec.lock index a194327..cb2cff6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -318,14 +318,6 @@ packages: description: flutter source: sdk version: "0.0.0" - go_router: - dependency: "direct main" - description: - name: go_router - sha256: e156bc1b2088eb5ece9351bccd48c3e1719a4858eacbd44e59162e98a68205d1 - url: "https://pub.dev" - source: hosted - version: "12.0.1" html: dependency: "direct main" description: @@ -398,14 +390,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.2" - logging: - dependency: transitive - description: - name: logging - sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" - url: "https://pub.dev" - source: hosted - version: "1.2.0" markdown: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 06ae67d..778459c 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -74,7 +74,6 @@ dependencies: flutter_dotenv: ^5.0.2 flutter_reorderable_list: ^1.3.1 pie_chart: ^5.3.2 - go_router: ^12.0.1 flutter_hooks: ^0.20.3 dev_dependencies: