From 8a97304ff5e0bc3de294e82a675502aa6278fa36 Mon Sep 17 00:00:00 2001 From: JulianAlcala Date: Wed, 15 Apr 2026 17:04:28 +0200 Subject: [PATCH] feat(design_system): add shared contacts permission dialog --- packages/design_system/lib/design_system.dart | 1 + .../dialogs/contacts_permission_dialog.dart | 27 +++++++++++++++++++ packages/design_system/pubspec.yaml | 2 ++ packages/sf_localizations/assets/l10n/de.json | 4 ++- packages/sf_localizations/assets/l10n/en.json | 4 ++- packages/sf_localizations/assets/l10n/es.json | 4 ++- packages/sf_localizations/assets/l10n/fr.json | 4 ++- packages/sf_localizations/assets/l10n/it.json | 4 ++- packages/sf_localizations/assets/l10n/pt.json | 4 ++- .../lib/src/generated/i18n.dart | 2 ++ 10 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 packages/design_system/lib/src/dialogs/contacts_permission_dialog.dart diff --git a/packages/design_system/lib/design_system.dart b/packages/design_system/lib/design_system.dart index 790012a0..dde5f8ca 100644 --- a/packages/design_system/lib/design_system.dart +++ b/packages/design_system/lib/design_system.dart @@ -16,3 +16,4 @@ export 'src/containers/footer_container.dart'; export 'src/rows/editable_row.dart'; export 'src/loading/app_loading_indicator.dart'; export 'src/confetti/confetti_overlay.dart'; +export 'src/dialogs/contacts_permission_dialog.dart'; diff --git a/packages/design_system/lib/src/dialogs/contacts_permission_dialog.dart b/packages/design_system/lib/src/dialogs/contacts_permission_dialog.dart new file mode 100644 index 00000000..aa61c2fd --- /dev/null +++ b/packages/design_system/lib/src/dialogs/contacts_permission_dialog.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:sf_localizations/sf_localizations.dart'; + +Future showContactsPermissionDialog( + BuildContext context, { + required Future Function() onOpenSettings, +}) { + return showDialog( + context: context, + builder: (dialogContext) => AlertDialog( + content: Text(context.translate(I18n.contactsPermissionBlocked)), + actions: [ + TextButton( + onPressed: () => Navigator.pop(dialogContext), + child: Text(context.translate(I18n.cancel)), + ), + TextButton( + onPressed: () async { + Navigator.pop(dialogContext); + await onOpenSettings(); + }, + child: Text(context.translate(I18n.openSettings)), + ), + ], + ), + ); +} diff --git a/packages/design_system/pubspec.yaml b/packages/design_system/pubspec.yaml index bcc7072f..8b381afd 100644 --- a/packages/design_system/pubspec.yaml +++ b/packages/design_system/pubspec.yaml @@ -14,6 +14,8 @@ dependencies: utils: path: ../utils + sf_localizations: + path: ../sf_localizations flutter_riverpod: ^3.0.3 get_it: ^9.0.5 country_code_picker: ^3.4.1 diff --git a/packages/sf_localizations/assets/l10n/de.json b/packages/sf_localizations/assets/l10n/de.json index 3c4d192c..bca4eded 100644 --- a/packages/sf_localizations/assets/l10n/de.json +++ b/packages/sf_localizations/assets/l10n/de.json @@ -863,5 +863,7 @@ "appUpdateRequiredTitle": "Update erforderlich", "appUpdateRequiredMessage": "Du musst SaveFamily aktualisieren, um die App weiterhin zu nutzen.", "appUpdateLater": "Später", - "appUpdateNow": "Jetzt aktualisieren" + "appUpdateNow": "Jetzt aktualisieren", + "contactsPermissionBlocked": "Aktiviere die Kontakte-Berechtigung in den Systemeinstellungen, um zu importieren.", + "openSettings": "Einstellungen öffnen" } diff --git a/packages/sf_localizations/assets/l10n/en.json b/packages/sf_localizations/assets/l10n/en.json index b006f297..756c5cf8 100755 --- a/packages/sf_localizations/assets/l10n/en.json +++ b/packages/sf_localizations/assets/l10n/en.json @@ -863,5 +863,7 @@ "appUpdateRequiredTitle": "Update required", "appUpdateRequiredMessage": "You need to update SaveFamily to keep using the app.", "appUpdateLater": "Later", - "appUpdateNow": "Update now" + "appUpdateNow": "Update now", + "contactsPermissionBlocked": "Enable the contacts permission in system settings to import.", + "openSettings": "Open settings" } diff --git a/packages/sf_localizations/assets/l10n/es.json b/packages/sf_localizations/assets/l10n/es.json index 182e8c0f..47bfcf35 100644 --- a/packages/sf_localizations/assets/l10n/es.json +++ b/packages/sf_localizations/assets/l10n/es.json @@ -863,5 +863,7 @@ "appUpdateRequiredTitle": "Actualización requerida", "appUpdateRequiredMessage": "Necesitas actualizar SaveFamily para seguir usando la app.", "appUpdateLater": "Más tarde", - "appUpdateNow": "Actualizar ahora" + "appUpdateNow": "Actualizar ahora", + "contactsPermissionBlocked": "Activa el permiso de contactos en los ajustes del sistema para importar.", + "openSettings": "Abrir ajustes" } diff --git a/packages/sf_localizations/assets/l10n/fr.json b/packages/sf_localizations/assets/l10n/fr.json index ca169677..f84a0f93 100644 --- a/packages/sf_localizations/assets/l10n/fr.json +++ b/packages/sf_localizations/assets/l10n/fr.json @@ -863,5 +863,7 @@ "appUpdateRequiredTitle": "Mise à jour requise", "appUpdateRequiredMessage": "Vous devez mettre à jour SaveFamily pour continuer à utiliser l'application.", "appUpdateLater": "Plus tard", - "appUpdateNow": "Mettre à jour maintenant" + "appUpdateNow": "Mettre à jour maintenant", + "contactsPermissionBlocked": "Active la permission des contacts dans les paramètres pour importer.", + "openSettings": "Ouvrir les paramètres" } diff --git a/packages/sf_localizations/assets/l10n/it.json b/packages/sf_localizations/assets/l10n/it.json index baa40b67..0dfd60ac 100644 --- a/packages/sf_localizations/assets/l10n/it.json +++ b/packages/sf_localizations/assets/l10n/it.json @@ -863,5 +863,7 @@ "appUpdateRequiredTitle": "Aggiornamento richiesto", "appUpdateRequiredMessage": "Devi aggiornare SaveFamily per continuare a usare l'app.", "appUpdateLater": "Più tardi", - "appUpdateNow": "Aggiorna ora" + "appUpdateNow": "Aggiorna ora", + "contactsPermissionBlocked": "Attiva il permesso dei contatti nelle impostazioni per importare.", + "openSettings": "Apri impostazioni" } diff --git a/packages/sf_localizations/assets/l10n/pt.json b/packages/sf_localizations/assets/l10n/pt.json index 408f5482..d63818c9 100644 --- a/packages/sf_localizations/assets/l10n/pt.json +++ b/packages/sf_localizations/assets/l10n/pt.json @@ -863,5 +863,7 @@ "appUpdateRequiredTitle": "Atualização necessária", "appUpdateRequiredMessage": "Precisas atualizar o SaveFamily para continuar a usar a app.", "appUpdateLater": "Mais tarde", - "appUpdateNow": "Atualizar agora" + "appUpdateNow": "Atualizar agora", + "contactsPermissionBlocked": "Ativa a permissão de contactos nas definições para importar.", + "openSettings": "Abrir definições" } diff --git a/packages/sf_localizations/lib/src/generated/i18n.dart b/packages/sf_localizations/lib/src/generated/i18n.dart index c9c3b444..4fafa503 100755 --- a/packages/sf_localizations/lib/src/generated/i18n.dart +++ b/packages/sf_localizations/lib/src/generated/i18n.dart @@ -370,6 +370,8 @@ class I18n { static const String errorMessagePasswordTooShort = 'errorMessagePasswordTooShort'; static const String errorMessagePhoneIsEmpty = 'errorMessagePhoneIsEmpty'; + static const String contactsPermissionBlocked = 'contactsPermissionBlocked'; + static const String openSettings = 'openSettings'; static const String errorMessagePhoneIsInvalid = 'errorMessagePhoneIsInvalid'; static const String errorMessageUnequalPasswords = 'errorMessageUnequalPasswords';