From d69da88b01ba7bc2c312001976cd6bf4888a0ec0 Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Sun, 10 Sep 2023 00:05:04 +0200 Subject: [PATCH] Change order home and fixes --- lib/config/home_top_items_default_order.dart | 4 +- lib/screens/home/home.dart | 175 ++++++++++-------- .../reorderable_top_items_home.dart | 23 ++- 3 files changed, 122 insertions(+), 80 deletions(-) diff --git a/lib/config/home_top_items_default_order.dart b/lib/config/home_top_items_default_order.dart index 1f49093..5220987 100644 --- a/lib/config/home_top_items_default_order.dart +++ b/lib/config/home_top_items_default_order.dart @@ -8,4 +8,6 @@ final List homeTopItemsDefaultOrder = [ HomeTopItems.recurrentClients ]; -final String homeTopItemsDefaultOrderString = jsonEncode(homeTopItemsDefaultOrder); \ No newline at end of file +final String homeTopItemsDefaultOrderString = jsonEncode( + List.from(homeTopItemsDefaultOrder.map((e) => e.name)) +); \ No newline at end of file diff --git a/lib/screens/home/home.dart b/lib/screens/home/home.dart index 41f8b26..107b680 100644 --- a/lib/screens/home/home.dart +++ b/lib/screens/home/home.dart @@ -175,88 +175,107 @@ class _HomeState extends State { child: CombinedHomeChart(), ), - if (width <= 700) ...[ - TopItems( - label: AppLocalizations.of(context)!.topQueriedDomains, - data: statusProvider.serverStatus!.stats.topQueriedDomains, - type: 'topQueriedDomains', - ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16), - child: Divider( - thickness: 1, - color: Theme.of(context).colorScheme.onSurface.withOpacity(0.2), - ), - ), - - const SizedBox(height: 16), - - TopItems( - label: AppLocalizations.of(context)!.topBlockedDomains, - data: statusProvider.serverStatus!.stats.topBlockedDomains, - type: 'topBlockedDomains', - ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16), - child: Divider( - thickness: 1, - color: Theme.of(context).colorScheme.onSurface.withOpacity(0.2), - ), - ), - const SizedBox(height: 16), - - TopItems( - label: AppLocalizations.of(context)!.topClients, - data: statusProvider.serverStatus!.stats.topClients, - type: 'topClients', - clients: true, - ), - ], + if (width <= 700) ...appConfigProvider.homeTopItemsOrder.asMap().entries.map((item) { + Widget list() { + switch (item.value) { + case HomeTopItems.queriedDomains: + return TopItems( + label: AppLocalizations.of(context)!.topQueriedDomains, + data: statusProvider.serverStatus!.stats.topQueriedDomains, + type: 'topQueriedDomains', + ); + + case HomeTopItems.blockedDomains: + return TopItems( + label: AppLocalizations.of(context)!.topBlockedDomains, + data: statusProvider.serverStatus!.stats.topBlockedDomains, + type: 'topBlockedDomains', + ); + + case HomeTopItems.recurrentClients: + return TopItems( + label: AppLocalizations.of(context)!.topClients, + data: statusProvider.serverStatus!.stats.topClients, + type: 'topClients', + clients: true, + ); + + default: + return const SizedBox(); + } + } + + return Column( + children: [ + list(), + if (item.key < appConfigProvider.homeTopItemsOrder.length - 1) ...[ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Divider( + thickness: 1, + color: Theme.of(context).colorScheme.onSurface.withOpacity(0.2), + ), + ), + const SizedBox(height: 16), + ] + ], + ); + }), if (width > 700) Column( children: [ Wrap( alignment: WrapAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.only(bottom: 16), - child: ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 500 - ), - child: TopItems( - label: AppLocalizations.of(context)!.topQueriedDomains, - data: statusProvider.serverStatus!.stats.topQueriedDomains, - type: 'topQueriedDomains', - ), - ), - ), - Padding( - padding: const EdgeInsets.only(bottom: 16), - child: ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 500 - ), - child: TopItems( - label: AppLocalizations.of(context)!.topBlockedDomains, - data: statusProvider.serverStatus!.stats.topBlockedDomains, - type: 'topBlockedDomains', - ), - ), - ), - Padding( - padding: const EdgeInsets.only(bottom: 16), - child: ConstrainedBox( - constraints: const BoxConstraints( - maxWidth: 500 - ), - child: TopItems( - label: AppLocalizations.of(context)!.topClients, - data: statusProvider.serverStatus!.stats.topClients, - type: 'topClients', - ), - ), - ), - ], + children: appConfigProvider.homeTopItemsOrder.map((item) { + switch (item) { + case HomeTopItems.queriedDomains: + return Padding( + padding: const EdgeInsets.only(bottom: 16), + child: ConstrainedBox( + constraints: const BoxConstraints( + maxWidth: 500 + ), + child: TopItems( + label: AppLocalizations.of(context)!.topQueriedDomains, + data: statusProvider.serverStatus!.stats.topQueriedDomains, + type: 'topQueriedDomains', + ), + ), + ); + + case HomeTopItems.blockedDomains: + return Padding( + padding: const EdgeInsets.only(bottom: 16), + child: ConstrainedBox( + constraints: const BoxConstraints( + maxWidth: 500 + ), + child: TopItems( + label: AppLocalizations.of(context)!.topBlockedDomains, + data: statusProvider.serverStatus!.stats.topBlockedDomains, + type: 'topBlockedDomains', + ), + ), + ); + + case HomeTopItems.recurrentClients: + return Padding( + padding: const EdgeInsets.only(bottom: 16), + child: ConstrainedBox( + constraints: const BoxConstraints( + maxWidth: 500 + ), + child: TopItems( + label: AppLocalizations.of(context)!.topClients, + data: statusProvider.serverStatus!.stats.topClients, + type: 'topClients', + ), + ), + ); + + default: + return const SizedBox(); + } + }).toList(), ), ], ) diff --git a/lib/screens/settings/general_settings/reorderable_top_items_home.dart b/lib/screens/settings/general_settings/reorderable_top_items_home.dart index 17e8a34..75ad9cc 100644 --- a/lib/screens/settings/general_settings/reorderable_top_items_home.dart +++ b/lib/screens/settings/general_settings/reorderable_top_items_home.dart @@ -1,3 +1,5 @@ +// ignore_for_file: use_build_context_synchronously + import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -6,6 +8,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:adguard_home_manager/widgets/custom_list_tile.dart'; +import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/constants/enums.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; @@ -151,6 +154,24 @@ class _ReorderableTopItemsHomeState extends State { } } + void saveSettings() async { + final result = await appConfigProvider.setHomeTopItemsOrder(homeTopItemsList); + if (result == true) { + showSnacbkar( + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.settingsSaved, + color: Colors.green + ); + } + else { + showSnacbkar( + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.settingsNotSaved, + color: Colors.red + ); + } + } + return WillPopScope( onWillPop: onWillPopScope, child: Scaffold( @@ -159,7 +180,7 @@ class _ReorderableTopItemsHomeState extends State { actions: [ IconButton( onPressed: !listEquals(appConfigProvider.homeTopItemsOrder, persistHomeTopItemsList) - ? () => appConfigProvider.setHomeTopItemsOrder(homeTopItemsList) + ? () => saveSettings() : null, icon: const Icon(Icons.save_rounded), tooltip: AppLocalizations.of(context)!.save,