Navigate with root key

This commit is contained in:
Juan Gilsanz Polo 2023-10-29 14:31:11 +01:00
parent 5c50a486c4
commit c391c76f5a
11 changed files with 121 additions and 95 deletions

View file

@ -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<dynamic> 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<RouteBase> routes = [
GoRoute(
path: "/",
@ -29,14 +49,10 @@ final List<RouteBase> 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<RouteBase> 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<RouteBase> 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<RouteBase> 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<RouteBase> 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<RouteBase> 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()
)
)
]
),

View file

@ -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<LogsListClient> {
)
}
else {
Navigator.push(context, MaterialPageRoute(
rootNavigatorKey.currentState!.push(
MaterialPageRoute(
builder: (context) => LogDetailsScreen(
log: log,
dialog: false
)
))
)
)
}
},
twoColumns: widget.splitView,

View file

@ -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<ClientsLists> with TickerProviderStateMix
SplitView.of(context).push(w);
}
else {
Navigator.push(context, MaterialPageRoute(
rootNavigatorKey.currentState!.push(
MaterialPageRoute(
builder: (context) => w,
));
)
);
}
}
@ -89,9 +92,11 @@ class _ClientsListsState extends State<ClientsLists> with TickerProviderStateMix
SplitView.of(context).push(w);
}
else {
Navigator.push(context, MaterialPageRoute(
rootNavigatorKey.currentState!.push(
MaterialPageRoute(
builder: (context) => w,
));
)
);
}
}

View file

@ -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<Filters> {
);
}
else {
Navigator.of(context).push(
rootNavigatorKey.currentState!.push(
MaterialPageRoute(
builder: (context) => ListDetailsScreen(
listId: filter.id,

View file

@ -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())
);
}));

View file

@ -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<TopItems> {
)
}
else {
Navigator.of(context).push(
rootNavigatorKey.currentState!.push(
MaterialPageRoute(
builder: (context) => TopItemsScreen(
type: widget.type,

View file

@ -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<LogsListWidget> {
isLogSelected: widget.selectedLog != null && widget.selectedLog == logsProvider.logsData!.data[index],
onLogTap: (log) {
if (!widget.twoColumns) {
Navigator.push(context, MaterialPageRoute(
rootNavigatorKey.currentState!.push(
MaterialPageRoute(
builder: (context) => LogDetailsScreen(
log: log,
dialog: false,
)
));
)
);
}
widget.onLogSelected(log);
},

View file

@ -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<DhcpScreen> {
color: Colors.transparent,
child: InkWell(
onTap: () {
Navigator.push(context, MaterialPageRoute(
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<DhcpScreen> {
color: Colors.transparent,
child: InkWell(
onTap: () {
Navigator.push(context, MaterialPageRoute(
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<DhcpScreen> {
);
}
else {
Navigator.push(context, MaterialPageRoute(
rootNavigatorKey.currentState!.push(
MaterialPageRoute(
builder: (context) => DhcpLeases(
items: dhcpProvider.dhcp!.dhcpStatus.leases,
staticLeases: false,
)
));
)
);
}
},
child: Row(
@ -808,12 +815,14 @@ class _DhcpScreenState extends State<DhcpScreen> {
);
}
else {
Navigator.push(context, MaterialPageRoute(
rootNavigatorKey.currentState!.push(
MaterialPageRoute(
builder: (context) => DhcpLeases(
items: dhcpProvider.dhcp!.dhcpStatus.staticLeases,
staticLeases: true,
)
));
)
);
}
},
child: Row(

View file

@ -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<DnsSettings> {
SplitView.of(context).push(w);
}
else {
Navigator.push(context, MaterialPageRoute(
rootNavigatorKey.currentState!.push(
MaterialPageRoute(
builder: (context) => w
));
)
);
}
}

View file

@ -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<GeneralSettings> {
icon: Icons.reorder_rounded,
title: AppLocalizations.of(context)!.topItemsOrder,
subtitle: AppLocalizations.of(context)!.topItemsOrderDescription,
onTap: () => Navigator.push(context, MaterialPageRoute(
onTap: () => rootNavigatorKey.currentState!.push(
MaterialPageRoute(
builder: (context) => const ReorderableTopItemsHome()
)),
)
)
),
CustomListTile(
icon: Icons.donut_large_rounded,

View file

@ -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)
);
},