From 66e41af7c8bf9a25e757bd2f21411f9cb464e0df Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Sun, 9 Oct 2022 20:03:17 +0200 Subject: [PATCH] Fixed issue snackbar --- lib/functions/snackbar.dart | 24 ++++++ lib/l10n/app_es.arb | 2 +- lib/providers/app_config_provider.dart | 7 +- lib/screens/clients/added_list.dart | 49 ++++++------ lib/screens/clients/fab.dart | 60 +++++++------- lib/screens/filters/custom_rules_list.dart | 25 +++--- lib/screens/filters/fab.dart | 86 ++++++++++----------- lib/screens/filters/filters_list.dart | 76 +++++++++--------- lib/screens/filters/list_details_modal.dart | 1 + lib/screens/settings/clients_list.dart | 53 ++++++------- pubspec.yaml | 2 +- 11 files changed, 201 insertions(+), 184 deletions(-) create mode 100644 lib/functions/snackbar.dart diff --git a/lib/functions/snackbar.dart b/lib/functions/snackbar.dart new file mode 100644 index 0000000..1f9e921 --- /dev/null +++ b/lib/functions/snackbar.dart @@ -0,0 +1,24 @@ +// ignore_for_file: use_build_context_synchronously + +import 'package:flutter/material.dart'; + +import 'package:adguard_home_manager/providers/app_config_provider.dart'; + +void showSnacbkar({ + required BuildContext context, + required AppConfigProvider appConfigProvider, + required String label, + required Color color +}) async { + if (appConfigProvider.showingSnackbar == true) { + ScaffoldMessenger.of(context).clearSnackBars(); + await Future.delayed(const Duration(milliseconds: 500)); + } + appConfigProvider.setShowingSnackbar(true); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(label), + backgroundColor: color, + ) + ).closed.then((value) => appConfigProvider.setShowingSnackbar(false)); +} \ No newline at end of file diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index d929a26..2011073 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -212,7 +212,7 @@ "addCustomRule": "Añadir regla personalizada", "removeCustomRule": "Eliminar regla personalizada", "removeCustomRuleMessage": "¿Estás seguro que deseas eliminar esta regla personalizada?", - "updatingRules": "Updating custom rules...", + "updatingRules": "Actualizando reglas personalizadas...", "ruleRemovedSuccessfully": "Regla eliminada correctamente", "ruleNotRemoved": "No se ha podido eliminar la regla", "ruleAddedSuccessfully": "Regla añadida correctamente", diff --git a/lib/providers/app_config_provider.dart b/lib/providers/app_config_provider.dart index fe26bee..1f4fb4a 100644 --- a/lib/providers/app_config_provider.dart +++ b/lib/providers/app_config_provider.dart @@ -126,11 +126,8 @@ class AppConfigProvider with ChangeNotifier { notifyListeners(); } - void setShowingSnackbar() async { - _showingSnackbar = true; - notifyListeners(); - await Future.delayed(const Duration(milliseconds: 4500)); - _showingSnackbar = false; + void setShowingSnackbar(bool status) async { + _showingSnackbar = status; notifyListeners(); } diff --git a/lib/screens/clients/added_list.dart b/lib/screens/clients/added_list.dart index 8ba3331..87c03e4 100644 --- a/lib/screens/clients/added_list.dart +++ b/lib/screens/clients/added_list.dart @@ -12,6 +12,7 @@ import 'package:adguard_home_manager/screens/clients/fab.dart'; import 'package:adguard_home_manager/screens/clients/options_modal.dart'; import 'package:adguard_home_manager/screens/clients/client_modal.dart'; +import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/classes/process_modal.dart'; import 'package:adguard_home_manager/services/http_requests.dart'; import 'package:adguard_home_manager/models/clients.dart'; @@ -87,22 +88,22 @@ class _AddedListState extends State { } }).toList(); serversProvider.setClientsData(clientsData); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.clientUpdatedSuccessfully), - backgroundColor: Colors.green, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.clientUpdatedSuccessfully, + color: Colors.green ); } else { appConfigProvider.addLog(result['log']); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.clientNotUpdated), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.clientNotUpdated, + color: Colors.red ); } } @@ -119,22 +120,22 @@ class _AddedListState extends State { ClientsData clientsData = serversProvider.clients.data!; clientsData.clients = clientsData.clients.where((c) => c.name != client.name).toList(); serversProvider.setClientsData(clientsData); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.clientDeletedSuccessfully), - backgroundColor: Colors.green, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.clientDeletedSuccessfully, + color: Colors.green ); } else { appConfigProvider.addLog(result['log']); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.clientNotDeleted), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.clientNotDeleted, + color: Colors.red ); } } diff --git a/lib/screens/clients/fab.dart b/lib/screens/clients/fab.dart index e34c0f1..64b984b 100644 --- a/lib/screens/clients/fab.dart +++ b/lib/screens/clients/fab.dart @@ -7,6 +7,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:adguard_home_manager/screens/clients/client_modal.dart'; +import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/models/clients.dart'; import 'package:adguard_home_manager/services/http_requests.dart'; import 'package:adguard_home_manager/models/clients_allowed_blocked.dart'; @@ -52,31 +53,30 @@ class ClientsFab extends StatelessWidget { blockedHosts: body['blocked_hosts'] ?? [], ) ); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.clientAddedSuccessfully), - backgroundColor: Colors.green, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.clientAddedSuccessfully, + color: Colors.green ); } else if (result['result'] == 'error' && result['message'] == 'client_another_list') { - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.clientAnotherList), - backgroundColor: Colors.red, - ) + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.clientAnotherList, + color: Colors.red ); } else { appConfigProvider.addLog(result['log']); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.clientNotAdded), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.clientNotAdded, + color: Colors.red ); } } @@ -93,22 +93,22 @@ class ClientsFab extends StatelessWidget { ClientsData clientsData = serversProvider.clients.data!; clientsData.clients.add(client); serversProvider.setClientsData(clientsData); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.clientAddedSuccessfully), - backgroundColor: Colors.green, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.clientAddedSuccessfully, + color: Colors.green ); } else { appConfigProvider.addLog(result['log']); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.clientNotAdded), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.clientNotAdded, + color: Colors.red ); } } diff --git a/lib/screens/filters/custom_rules_list.dart b/lib/screens/filters/custom_rules_list.dart index 245c4c2..77a11d5 100644 --- a/lib/screens/filters/custom_rules_list.dart +++ b/lib/screens/filters/custom_rules_list.dart @@ -8,6 +8,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:adguard_home_manager/screens/filters/fab.dart'; import 'package:adguard_home_manager/screens/filters/remove_custom_rule_modal.dart'; +import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/models/filtering.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; import 'package:adguard_home_manager/services/http_requests.dart'; @@ -75,22 +76,22 @@ class _CustomRulesListState extends State { FilteringData filteringData = serversProvider.filtering.data!; filteringData.userRules = newRules; serversProvider.setFilteringData(filteringData); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.ruleRemovedSuccessfully), - backgroundColor: Colors.green, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.ruleRemovedSuccessfully, + color: Colors.green ); } else { appConfigProvider.addLog(result['log']); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.ruleNotRemoved), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.ruleNotRemoved, + color: Colors.red ); } } diff --git a/lib/screens/filters/fab.dart b/lib/screens/filters/fab.dart index 6e5e485..aec4349 100644 --- a/lib/screens/filters/fab.dart +++ b/lib/screens/filters/fab.dart @@ -1,12 +1,13 @@ // ignore_for_file: use_build_context_synchronously -import 'package:adguard_home_manager/screens/filters/add_list_modal.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/filters/add_custom_rule.dart'; +import 'package:adguard_home_manager/screens/filters/add_list_modal.dart'; +import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/services/http_requests.dart'; import 'package:adguard_home_manager/classes/process_modal.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; @@ -41,22 +42,22 @@ class FiltersFab extends StatelessWidget { FilteringData filteringData = serversProvider.filtering.data!; filteringData.userRules = newRules; serversProvider.setFilteringData(filteringData); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.ruleAddedSuccessfully), - backgroundColor: Colors.green, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.ruleAddedSuccessfully, + color: Colors.green ); } else { appConfigProvider.addLog(result['log']); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.ruleNotAdded), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.ruleNotAdded, + color: Colors.red ); } } @@ -98,56 +99,55 @@ class FiltersFab extends StatelessWidget { processModal.close(); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text("${AppLocalizations.of(context)!.listAdded} $items."), - backgroundColor: Colors.green, - ) + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: "${AppLocalizations.of(context)!.listAdded} $items.", + color: Colors.green ); } else { processModal.close(); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.listNotAdded), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.listNotAdded, + color: Colors.red ); } } else if (result1['result'] == 'error' && result1['log'].statusCode == '400' && result1['log'].resBody.toString().contains("Couldn't fetch filter from url")) { processModal.close(); appConfigProvider.addLog(result1['log']); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.listUrlInvalid), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.listUrlInvalid, + color: Colors.red ); } else if (result1['result'] == 'error' && result1['log'].statusCode == '400' && result1['log'].resBody.toString().contains('Filter URL already added')) { processModal.close(); appConfigProvider.addLog(result1['log']); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.listAlreadyAdded), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.listAlreadyAdded, + color: Colors.red ); } else { processModal.close(); appConfigProvider.addLog(result1['log']); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.listNotAdded), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.listNotAdded, + color: Colors.red ); } } diff --git a/lib/screens/filters/filters_list.dart b/lib/screens/filters/filters_list.dart index 6e454e9..8aa1011 100644 --- a/lib/screens/filters/filters_list.dart +++ b/lib/screens/filters/filters_list.dart @@ -14,6 +14,7 @@ import 'package:adguard_home_manager/screens/filters/add_list_modal.dart'; import 'package:adguard_home_manager/screens/filters/delete_list_modal.dart'; import 'package:adguard_home_manager/services/http_requests.dart'; +import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/classes/process_modal.dart'; import 'package:adguard_home_manager/providers/servers_provider.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; @@ -97,24 +98,21 @@ class _FiltersListState extends State { serversProvider.setFilteringLoadStatus(2, true); } - processModal.close(); - - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.listDataUpdated), - backgroundColor: Colors.green, - ) + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.listDataUpdated, + color: Colors.green ); } else { appConfigProvider.addLog(result['log']); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.listDataNotUpdated), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.listDataNotUpdated, + color: Colors.red ); } } @@ -143,27 +141,26 @@ class _FiltersListState extends State { else { appConfigProvider.addLog(result2['log']); serversProvider.setFilteringLoadStatus(2, true); - } + } processModal.close(); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.listDataUpdated), - backgroundColor: Colors.green, - ) + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.listDataUpdated, + color: Colors.green ); } else { processModal.close(); appConfigProvider.addLog(result1['log']); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.listDataNotUpdated), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.listDataNotUpdated, + color: Colors.red ); } } @@ -187,27 +184,26 @@ class _FiltersListState extends State { else { appConfigProvider.addLog(result2['log']); serversProvider.setFilteringLoadStatus(2, true); - } + } processModal.close(); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.listDeleted), - backgroundColor: Colors.green, - ) + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.listDeleted, + color: Colors.green ); } else { processModal.close(); appConfigProvider.addLog(result1['log']); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.listNotDeleted), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.listNotDeleted, + color: Colors.red ); } } diff --git a/lib/screens/filters/list_details_modal.dart b/lib/screens/filters/list_details_modal.dart index 67c7c41..668fae1 100644 --- a/lib/screens/filters/list_details_modal.dart +++ b/lib/screens/filters/list_details_modal.dart @@ -72,6 +72,7 @@ class ListDetailsModal extends StatelessWidget { children: [ ElevatedButton.icon( onPressed: () { + Navigator.pop(context); onEnableDisable(list, !list.enabled); }, label: Text( diff --git a/lib/screens/settings/clients_list.dart b/lib/screens/settings/clients_list.dart index 29ba06c..222836a 100644 --- a/lib/screens/settings/clients_list.dart +++ b/lib/screens/settings/clients_list.dart @@ -8,6 +8,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:adguard_home_manager/screens/settings/add_client_modal.dart'; import 'package:adguard_home_manager/screens/clients/remove_client_modal.dart'; +import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/providers/app_config_provider.dart'; import 'package:adguard_home_manager/models/clients_allowed_blocked.dart'; import 'package:adguard_home_manager/providers/servers_provider.dart'; @@ -99,22 +100,21 @@ class _ClientsListState extends State { ); } else if (result['result'] == 'error' && result['message'] == 'client_another_list') { - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.clientAnotherList), - backgroundColor: Colors.red, - ) + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.clientAnotherList, + color: Colors.red ); } else { appConfigProvider.addLog(result['log']); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.clientNotRemoved), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.clientNotRemoved, + color: Colors.red ); } } @@ -153,26 +153,23 @@ class _ClientsListState extends State { ); } else if (result['result'] == 'error' && result['message'] == 'client_another_list') { - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(AppLocalizations.of(context)!.clientAnotherList), - backgroundColor: Colors.red, - ) + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.clientAnotherList, + color: Colors.red ); } else { appConfigProvider.addLog(result['log']); - appConfigProvider.setShowingSnackbar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - type == 'allowed' || type == 'blocked' - ? AppLocalizations.of(context)!.clientNotRemoved - : AppLocalizations.of(context)!.domainNotAdded - ), - backgroundColor: Colors.red, - ) + + showSnacbkar( + context: context, + appConfigProvider: appConfigProvider, + label: type == 'allowed' || type == 'blocked' + ? AppLocalizations.of(context)!.clientNotRemoved + : AppLocalizations.of(context)!.domainNotAdded, + color: Colors.red ); } } diff --git a/pubspec.yaml b/pubspec.yaml index 6d2c2a3..a240da8 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 0.6.0+11 +version: 0.6.1+12 environment: sdk: '>=2.18.1 <3.0.0'