From 1e07b4e7992439f4a43baf82e7d81fbdff493b6e Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Mon, 10 Oct 2022 14:17:42 +0200 Subject: [PATCH] Added enable disable filtering on filters appbar --- lib/l10n/app_en.arb | 7 ++- lib/l10n/app_es.arb | 7 ++- lib/providers/servers_provider.dart | 5 +++ lib/screens/filters/filters.dart | 66 +++++++++++++++++++++++++++++ 4 files changed, 83 insertions(+), 2 deletions(-) diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index a960b60..30c5f11 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -306,5 +306,10 @@ "addingRule": "Adding rule...", "deletingRule": "Deleting rule...", "enablingList": "Enabling list...", - "disablingList": "Disabling list..." + "disablingList": "Disabling list...", + "disableFiltering": "Disable filtering", + "enablingFiltering": "Enabling filtering...", + "disablingFiltering": "Disabling filtering...", + "filteringStatusUpdated": "Filtering status updated successfully", + "filteringStatusNotUpdated": "Filtering status couldn't be updated" } \ No newline at end of file diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 8e880f0..ece460d 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -306,5 +306,10 @@ "addingRule": "AƱadiendo regla...", "deletingRule": "Eliminando regla...", "enablingList": "Habilitando lista...", - "disablingList": "Deshabilitando lista..." + "disablingList": "Deshabilitando lista...", + "disableFiltering": "Deshabilitar filtrado", + "enablingFiltering": "Habilitando filtrado...", + "disablingFiltering": "Deshabilitando filtrado...", + "filteringStatusUpdated": "Estado de filtrado actualizado correctamente", + "filteringStatusNotUpdated": "El estado de filtrado no pudo ser actualizado" } \ No newline at end of file diff --git a/lib/providers/servers_provider.dart b/lib/providers/servers_provider.dart index 22fc2a7..6e666d0 100644 --- a/lib/providers/servers_provider.dart +++ b/lib/providers/servers_provider.dart @@ -118,6 +118,11 @@ class ServersProvider with ChangeNotifier { notifyListeners(); } } + + void setFilteringProtectionStatus(bool status) { + _serverStatus.data!.filteringEnabled = status; + notifyListeners(); + } Future createServer(Server server) async { final saved = await saveServerIntoDb(server); diff --git a/lib/screens/filters/filters.dart b/lib/screens/filters/filters.dart index eb4597d..2bca389 100644 --- a/lib/screens/filters/filters.dart +++ b/lib/screens/filters/filters.dart @@ -147,6 +147,38 @@ class _FiltersWidgetState extends State with TickerProviderStateM }); } + void enableDisableFiltering() async { + ProcessModal processModal = ProcessModal(context: context); + processModal.open( + serversProvider.serverStatus.data!.filteringEnabled == true + ? AppLocalizations.of(context)!.disableFiltering + : AppLocalizations.of(context)!.enableFiltering + ); + + final result = await updateFiltering(serversProvider.selectedServer!, !serversProvider.serverStatus.data!.filteringEnabled); + + processModal.close(); + + if (result['result'] == 'success') { + serversProvider.setFilteringProtectionStatus(!serversProvider.serverStatus.data!.filteringEnabled); + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.filteringStatusUpdated, + color: Colors.green + ); + } + else { + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.filteringStatusNotUpdated, + color: Colors.red + ); + } + } + return DefaultTabController( length: 3, child: NestedScrollView( @@ -163,6 +195,40 @@ class _FiltersWidgetState extends State with TickerProviderStateM floating: true, forceElevated: innerBoxIsScrolled, actions: [ + IconButton( + onPressed: enableDisableFiltering, + tooltip: serversProvider.serverStatus.data!.filteringEnabled == true + ? AppLocalizations.of(context)!.disableFiltering + : AppLocalizations.of(context)!.enableFiltering, + icon: Stack( + children: [ + const Icon(Icons.power_settings_new_rounded), + Positioned( + bottom: 0, + right: 0, + child: Stack( + children: [ + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(30), + color: Colors.white + ), + child: Icon( + serversProvider.serverStatus.data!.filteringEnabled == true + ? Icons.check_circle_rounded + : Icons.cancel, + size: 12, + color: serversProvider.serverStatus.data!.filteringEnabled == true + ? Colors.green + : Colors.red, + ), + ), + ], + ), + ) + ], + ) + ), PopupMenuButton( itemBuilder: (context) => [ PopupMenuItem(