Removed go router

This commit is contained in:
Juan Gilsanz Polo 2023-10-29 15:38:17 +01:00
parent c391c76f5a
commit af14484a95
19 changed files with 85 additions and 221 deletions

View file

@ -1,15 +1,24 @@
import 'package:flutter/material.dart'; 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'; import 'package:adguard_home_manager/models/app_screen.dart';
List<AppScreen> screensSelectServer = [ List<AppScreen> screensSelectServer = [
const AppScreen( const AppScreen(
name: "connect", name: "connect",
icon: Icons.link_rounded, icon: Icons.link_rounded,
child: Connect()
), ),
const AppScreen( const AppScreen(
name: "settings", name: "settings",
icon: Icons.settings_rounded, icon: Icons.settings_rounded,
child: Settings()
) )
]; ];
@ -17,21 +26,26 @@ List<AppScreen> screensServerConnected = [
const AppScreen( const AppScreen(
name: "home", name: "home",
icon: Icons.home_rounded, icon: Icons.home_rounded,
child: Home()
), ),
const AppScreen( const AppScreen(
name: "clients", name: "clients",
icon: Icons.devices, icon: Icons.devices,
child: Clients()
), ),
const AppScreen( const AppScreen(
name: "logs", name: "logs",
icon: Icons.list_alt_rounded, icon: Icons.list_alt_rounded,
child: Logs()
), ),
const AppScreen( const AppScreen(
name: "filters", name: "filters",
icon: Icons.shield_rounded, icon: Icons.shield_rounded,
child: Filters()
), ),
const AppScreen( const AppScreen(
name: "settings", name: "settings",
icon: Icons.settings_rounded, icon: Icons.settings_rounded,
child: Settings()
) )
]; ];

View file

@ -16,11 +16,12 @@ import 'package:window_size/window_size.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:flutter_gen/gen_l10n/app_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/widgets/menu_bar.dart';
import 'package:adguard_home_manager/functions/check_app_updates.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/functions/open_url.dart';
import 'package:adguard_home_manager/widgets/update_modal.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/logs_provider.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/providers/clients_provider.dart'; import 'package:adguard_home_manager/providers/clients_provider.dart';
@ -244,7 +245,7 @@ class _MainState extends State<Main> with WidgetsBindingObserver {
: Brightness.light, : Brightness.light,
), ),
child: DynamicColorBuilder( child: DynamicColorBuilder(
builder: (lightDynamic, darkDynamic) => MaterialApp.router( builder: (lightDynamic, darkDynamic) => MaterialApp(
title: 'AdGuard Home Manager', title: 'AdGuard Home Manager',
theme: appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31 theme: appConfigProvider.androidDeviceInfo != null && appConfigProvider.androidDeviceInfo!.version.sdkInt >= 31
? appConfigProvider.useDynamicColor == true ? appConfigProvider.useDynamicColor == true
@ -285,7 +286,7 @@ class _MainState extends State<Main> with WidgetsBindingObserver {
), ),
); );
}, },
routerConfig: goRouter, home: Layout(),
), ),
), ),
); );

View file

@ -5,11 +5,13 @@ class AppScreen {
final IconData icon; final IconData icon;
final PreferredSizeWidget? appBar; final PreferredSizeWidget? appBar;
final Widget? fab; final Widget? fab;
final Widget child;
const AppScreen({ const AppScreen({
required this.name, required this.name,
required this.icon, required this.icon,
this.appBar, this.appBar,
this.fab this.fab,
required this.child,
}); });
} }

View file

@ -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<ServersProvider>(context, listen: false);
if (serversProvider.selectedServer == null) {
return RoutesNames.connect;
}
return null;
},
initialLocation: RoutesNames.home,
routes: routes,
);

View file

@ -1,10 +0,0 @@
import 'package:flutter/widgets.dart';
final GlobalKey<NavigatorState> rootNavigatorKey = GlobalKey<NavigatorState>();
final GlobalKey<NavigatorState> connectNavigatorKey = GlobalKey<NavigatorState>();
final GlobalKey<NavigatorState> homeNavigatorKey = GlobalKey<NavigatorState>();
final GlobalKey<NavigatorState> clientsNavigatorKey = GlobalKey<NavigatorState>();
final GlobalKey<NavigatorState> logsNavigatorKey = GlobalKey<NavigatorState>();
final GlobalKey<NavigatorState> filtersNavigatorKey = GlobalKey<NavigatorState>();
final GlobalKey<NavigatorState> settingsNavigatorKey = GlobalKey<NavigatorState>();
final GlobalKey<NavigatorState> settingsListNavigatorKey = GlobalKey<NavigatorState>();

View file

@ -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<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: "/",
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()
)
)
]
),
]
)
];

View file

@ -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_tile.dart';
import 'package:adguard_home_manager/screens/logs/log_details_screen.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/functions/desktop_mode.dart';
import 'package:adguard_home_manager/models/logs.dart'; import 'package:adguard_home_manager/models/logs.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart';
@ -213,7 +212,7 @@ class _LogsListClientState extends State<LogsListClient> {
) )
} }
else { else {
rootNavigatorKey.currentState!.push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => LogDetailsScreen( builder: (context) => LogDetailsScreen(
log: log, log: log,

View file

@ -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/screens/clients/clients_list.dart';
import 'package:adguard_home_manager/constants/enums.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/functions/desktop_mode.dart';
import 'package:adguard_home_manager/models/clients.dart'; import 'package:adguard_home_manager/models/clients.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart';
@ -72,7 +71,7 @@ class _ClientsListsState extends State<ClientsLists> with TickerProviderStateMix
SplitView.of(context).push(w); SplitView.of(context).push(w);
} }
else { else {
rootNavigatorKey.currentState!.push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => w, builder: (context) => w,
) )
@ -92,7 +91,7 @@ class _ClientsListsState extends State<ClientsLists> with TickerProviderStateMix
SplitView.of(context).push(w); SplitView.of(context).push(w);
} }
else { else {
rootNavigatorKey.currentState!.push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => w, builder: (context) => w,
) )

View file

@ -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/blocked_services_screen.dart';
import 'package:adguard_home_manager/screens/filters/update_interval_lists_modal.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/functions/snackbar.dart';
import 'package:adguard_home_manager/providers/status_provider.dart'; import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/classes/process_modal.dart'; import 'package:adguard_home_manager/classes/process_modal.dart';
@ -203,7 +202,7 @@ class _FiltersState extends State<Filters> {
); );
} }
else { else {
rootNavigatorKey.currentState!.push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => ListDetailsScreen( builder: (context) => ListDetailsScreen(
listId: filter.id, listId: filter.id,

View file

@ -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/screens/servers/servers.dart';
import 'package:adguard_home_manager/functions/desktop_mode.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/constants/enums.dart';
import 'package:adguard_home_manager/providers/status_provider.dart'; import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/functions/open_url.dart'; import 'package:adguard_home_manager/functions/open_url.dart';
@ -33,7 +32,7 @@ class HomeAppBar extends StatelessWidget {
void navigateServers() { void navigateServers() {
Future.delayed(const Duration(milliseconds: 0), (() { Future.delayed(const Duration(milliseconds: 0), (() {
rootNavigatorKey.currentState!.push( Navigator.of(context).push(
MaterialPageRoute(builder: (context) => const Servers()) MaterialPageRoute(builder: (context) => const Servers())
); );
})); }));

View file

@ -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_modal.dart';
import 'package:adguard_home_manager/screens/top_items/top_items.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/models/applied_filters.dart';
import 'package:adguard_home_manager/providers/status_provider.dart'; import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/providers/logs_provider.dart'; import 'package:adguard_home_manager/providers/logs_provider.dart';
@ -218,7 +217,7 @@ class _TopItemsState extends State<TopItems> {
) )
} }
else { else {
rootNavigatorKey.currentState!.push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => TopItemsScreen( builder: (context) => TopItemsScreen(
type: widget.type, type: widget.type,

View file

@ -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/screens/logs/logs_filters_modal.dart';
import 'package:adguard_home_manager/classes/process_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/constants/enums.dart';
import 'package:adguard_home_manager/functions/compare_versions.dart'; import 'package:adguard_home_manager/functions/compare_versions.dart';
import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart';
@ -464,7 +463,7 @@ class _LogsListWidgetState extends State<LogsListWidget> {
isLogSelected: widget.selectedLog != null && widget.selectedLog == logsProvider.logsData!.data[index], isLogSelected: widget.selectedLog != null && widget.selectedLog == logsProvider.logsData!.data[index],
onLogTap: (log) { onLogTap: (log) {
if (!widget.twoColumns) { if (!widget.twoColumns) {
rootNavigatorKey.currentState!.push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => LogDetailsScreen( builder: (context) => LogDetailsScreen(
log: log, log: log,

View file

@ -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/dhcp_leases.dart';
import 'package:adguard_home_manager/screens/settings/dhcp/select_interface_modal.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/desktop_mode.dart';
import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/constants/enums.dart'; import 'package:adguard_home_manager/constants/enums.dart';
@ -706,7 +705,7 @@ class _DhcpScreenState extends State<DhcpScreen> {
color: Colors.transparent, color: Colors.transparent,
child: InkWell( child: InkWell(
onTap: () { onTap: () {
rootNavigatorKey.currentState!.push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => DhcpLeases( builder: (context) => DhcpLeases(
items: dhcpProvider.dhcp!.dhcpStatus.leases, items: dhcpProvider.dhcp!.dhcpStatus.leases,
@ -741,7 +740,7 @@ class _DhcpScreenState extends State<DhcpScreen> {
color: Colors.transparent, color: Colors.transparent,
child: InkWell( child: InkWell(
onTap: () { onTap: () {
rootNavigatorKey.currentState!.push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => DhcpLeases( builder: (context) => DhcpLeases(
items: dhcpProvider.dhcp!.dhcpStatus.staticLeases, items: dhcpProvider.dhcp!.dhcpStatus.staticLeases,
@ -786,7 +785,7 @@ class _DhcpScreenState extends State<DhcpScreen> {
); );
} }
else { else {
rootNavigatorKey.currentState!.push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => DhcpLeases( builder: (context) => DhcpLeases(
items: dhcpProvider.dhcp!.dhcpStatus.leases, items: dhcpProvider.dhcp!.dhcpStatus.leases,
@ -815,7 +814,7 @@ class _DhcpScreenState extends State<DhcpScreen> {
); );
} }
else { else {
rootNavigatorKey.currentState!.push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => DhcpLeases( builder: (context) => DhcpLeases(
items: dhcpProvider.dhcp!.dhcpStatus.staticLeases, items: dhcpProvider.dhcp!.dhcpStatus.staticLeases,

View file

@ -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/widgets/custom_list_tile.dart';
import 'package:adguard_home_manager/constants/enums.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/functions/desktop_mode.dart';
import 'package:adguard_home_manager/providers/dns_provider.dart'; import 'package:adguard_home_manager/providers/dns_provider.dart';
import 'package:adguard_home_manager/functions/clear_dns_cache.dart'; import 'package:adguard_home_manager/functions/clear_dns_cache.dart';
@ -54,7 +53,7 @@ class _DnsSettingsState extends State<DnsSettings> {
SplitView.of(context).push(w); SplitView.of(context).push(w);
} }
else { else {
rootNavigatorKey.currentState!.push( Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => w builder: (context) => w
) )

View file

@ -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/custom_list_tile.dart';
import 'package:adguard_home_manager/widgets/section_label.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/check_app_updates.dart';
import 'package:adguard_home_manager/functions/desktop_mode.dart'; import 'package:adguard_home_manager/functions/desktop_mode.dart';
import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/functions/snackbar.dart';
@ -192,7 +191,7 @@ class _GeneralSettingsState extends State<GeneralSettings> {
icon: Icons.reorder_rounded, icon: Icons.reorder_rounded,
title: AppLocalizations.of(context)!.topItemsOrder, title: AppLocalizations.of(context)!.topItemsOrder,
subtitle: AppLocalizations.of(context)!.topItemsOrderDescription, subtitle: AppLocalizations.of(context)!.topItemsOrderDescription,
onTap: () => rootNavigatorKey.currentState!.push( onTap: () => Navigator.of(context).push(
MaterialPageRoute( MaterialPageRoute(
builder: (context) => const ReorderableTopItemsHome() builder: (context) => const ReorderableTopItemsHome()
) )

View file

@ -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/section_label.dart';
import 'package:adguard_home_manager/widgets/custom_list_tile.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/functions/desktop_mode.dart';
import 'package:adguard_home_manager/constants/strings.dart'; import 'package:adguard_home_manager/constants/strings.dart';
import 'package:adguard_home_manager/functions/open_url.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; final bool twoColumns;
const SettingsWidget({ const SettingsWidget({
@ -79,6 +78,17 @@ class SettingsWidget extends StatelessWidget {
required this.twoColumns, required this.twoColumns,
}) : super(key: key); }) : super(key: key);
@override
State<SettingsWidget> createState() => _SettingsWidgetState();
}
class _SettingsWidgetState extends State<SettingsWidget> {
@override
void initState() {
Provider.of<AppConfigProvider>(context, listen: false).setSelectedSettingsScreen(screen: null);
super.initState();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context); final serversProvider = Provider.of<ServersProvider>(context);
@ -87,7 +97,7 @@ class SettingsWidget extends StatelessWidget {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
if (!twoColumns && appConfigProvider.selectedSettingsScreen != null) { if (!widget.twoColumns && appConfigProvider.selectedSettingsScreen != null) {
appConfigProvider.setSelectedSettingsScreen(screen: null); appConfigProvider.setSelectedSettingsScreen(screen: null);
} }
@ -99,7 +109,7 @@ class SettingsWidget extends StatelessWidget {
required Widget screenToNavigate, required Widget screenToNavigate,
required int thisItem required int thisItem
}) { }) {
if (twoColumns) { if (widget.twoColumns) {
return CustomSettingsTile( return CustomSettingsTile(
title: title, title: title,
subtitle: subtitle, subtitle: subtitle,
@ -120,7 +130,7 @@ class SettingsWidget extends StatelessWidget {
icon: icon, icon: icon,
trailing: trailing, trailing: trailing,
onTap: () { onTap: () {
rootNavigatorKey.currentState!.push( Navigator.of(context).push(
MaterialPageRoute(builder: (context) => screenToNavigate) MaterialPageRoute(builder: (context) => screenToNavigate)
); );
}, },
@ -191,7 +201,7 @@ class SettingsWidget extends StatelessWidget {
subtitle: AppLocalizations.of(context)!.dnsSettingsDescription, subtitle: AppLocalizations.of(context)!.dnsSettingsDescription,
thisItem: 3, thisItem: 3,
screenToNavigate: DnsSettings( screenToNavigate: DnsSettings(
splitView: twoColumns, splitView: widget.twoColumns,
), ),
), ),
settingsTile( settingsTile(

View file

@ -1,18 +1,16 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:animations/animations.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:go_router/go_router.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.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/app_screens.dart';
import 'package:adguard_home_manager/config/sizes.dart'; import 'package:adguard_home_manager/config/sizes.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart'; import 'package:adguard_home_manager/providers/servers_provider.dart';
class Layout extends StatefulWidget { class Layout extends StatefulWidget {
final StatefulNavigationShell navigationShell;
const Layout({ const Layout({
Key? key, Key? key,
required this.navigationShell,
}) : super(key: key); }) : super(key: key);
@override @override
@ -23,10 +21,7 @@ class _LayoutState extends State<Layout> {
bool _drawerExpanded = true; bool _drawerExpanded = true;
void _goBranch(int index) { void _goBranch(int index) {
widget.navigationShell.goBranch( Provider.of<AppConfigProvider>(context, listen: false).setSelectedScreen(index);
index,
initialLocation: index == widget.navigationShell.currentIndex,
);
} }
@override @override
@ -34,6 +29,11 @@ class _LayoutState extends State<Layout> {
final width = MediaQuery.of(context).size.width; final width = MediaQuery.of(context).size.width;
final serversProvider = Provider.of<ServersProvider>(context); final serversProvider = Provider.of<ServersProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
final screens = serversProvider.selectedServer != null
? screensServerConnected
: screensSelectServer;
String translatedName(String key) { String translatedName(String key) {
switch (key) { switch (key) {
@ -93,8 +93,7 @@ class _LayoutState extends State<Layout> {
(s) => DrawerTile( (s) => DrawerTile(
icon: s.value.icon, icon: s.value.icon,
title: translatedName(s.value.name), title: translatedName(s.value.name),
isSelected: isSelected: appConfigProvider.selectedScreen == s.key,
widget.navigationShell.currentIndex == s.key,
onSelect: () => _goBranch(s.key), onSelect: () => _goBranch(s.key),
withoutTitle: !_drawerExpanded, withoutTitle: !_drawerExpanded,
), ),
@ -104,8 +103,7 @@ class _LayoutState extends State<Layout> {
(s) => DrawerTile( (s) => DrawerTile(
icon: s.value.icon, icon: s.value.icon,
title: translatedName(s.value.name), title: translatedName(s.value.name),
isSelected: isSelected: appConfigProvider.selectedScreen == s.key,
widget.navigationShell.currentIndex == s.key,
onSelect: () => _goBranch(s.key), onSelect: () => _goBranch(s.key),
withoutTitle: !_drawerExpanded, withoutTitle: !_drawerExpanded,
), ),
@ -114,7 +112,17 @@ class _LayoutState extends State<Layout> {
), ),
), ),
Expanded( 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<Layout> {
: screensSelectServer; : screensSelectServer;
return Scaffold( 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( bottomNavigationBar: NavigationBar(
selectedIndex: (serversProvider.selectedServer == null || serversProvider.apiClient == null) && widget.navigationShell.currentIndex > 1 selectedIndex: (serversProvider.selectedServer == null || serversProvider.apiClient == null) && appConfigProvider.selectedScreen > 1
? 0 ? 0
: widget.navigationShell.currentIndex, : appConfigProvider.selectedScreen,
onDestinationSelected: (s) => _goBranch(s), onDestinationSelected: (s) => _goBranch(s),
destinations: screens.asMap().entries.map((screen) => NavigationDestination( destinations: screens.asMap().entries.map((screen) => NavigationDestination(
icon: Stack( icon: Stack(
children: [ children: [
Icon( Icon(
screen.value.icon, screen.value.icon,
color: widget.navigationShell.currentIndex == screen.key color: appConfigProvider.selectedScreen == screen.key
? Theme.of(context).colorScheme.onSecondaryContainer ? Theme.of(context).colorScheme.onSecondaryContainer
: Theme.of(context).colorScheme.onSurfaceVariant, : Theme.of(context).colorScheme.onSurfaceVariant,
), ),

View file

@ -318,14 +318,6 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" 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: html:
dependency: "direct main" dependency: "direct main"
description: description:
@ -398,14 +390,6 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.2" version: "1.0.2"
logging:
dependency: transitive
description:
name: logging
sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
markdown: markdown:
dependency: "direct main" dependency: "direct main"
description: description:

View file

@ -74,7 +74,6 @@ dependencies:
flutter_dotenv: ^5.0.2 flutter_dotenv: ^5.0.2
flutter_reorderable_list: ^1.3.1 flutter_reorderable_list: ^1.3.1
pie_chart: ^5.3.2 pie_chart: ^5.3.2
go_router: ^12.0.1
flutter_hooks: ^0.20.3 flutter_hooks: ^0.20.3
dev_dependencies: dev_dependencies: