feat(design_system): add shared contacts permission dialog

This commit is contained in:
2026-04-15 17:04:28 +02:00
parent 8c1ca94a08
commit 8a97304ff5
10 changed files with 50 additions and 6 deletions

View File

@@ -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';

View File

@@ -0,0 +1,27 @@
import 'package:flutter/material.dart';
import 'package:sf_localizations/sf_localizations.dart';
Future<void> showContactsPermissionDialog(
BuildContext context, {
required Future<void> Function() onOpenSettings,
}) {
return showDialog<void>(
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)),
),
],
),
);
}

View File

@@ -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

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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';