From c391c76f5ab2c459d027144dc0f3e6fe7b1864d8 Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Sun, 29 Oct 2023 14:31:11 +0100 Subject: [PATCH] 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) ); },