diff --git a/modules/legacy/modules/device_management/lib/src/features/contacts/presentation/contacts_screen.dart b/modules/legacy/modules/device_management/lib/src/features/contacts/presentation/contacts_screen.dart index afd65caf..ab1819e4 100644 --- a/modules/legacy/modules/device_management/lib/src/features/contacts/presentation/contacts_screen.dart +++ b/modules/legacy/modules/device_management/lib/src/features/contacts/presentation/contacts_screen.dart @@ -112,7 +112,7 @@ class ContactsScreen extends ConsumerWidget { return; } if (!context.mounted) return; - showDialog( + showLegacyDialog( context: context, builder: (_) => Dialog( backgroundColor: Colors.transparent, @@ -145,7 +145,7 @@ class ContactsScreen extends ConsumerWidget { required String contactId, required int currentCount, }) async { - final confirmed = await showDialog( + final confirmed = await showLegacyDialog( context: context, builder: (dialogContext) => AlertDialog( title: Text(context.translate(I18n.deleteContactMessage)), diff --git a/modules/legacy/modules/device_management/lib/src/features/contacts/presentation/widgets/new_contact_dialog.dart b/modules/legacy/modules/device_management/lib/src/features/contacts/presentation/widgets/new_contact_dialog.dart index 9030ce57..b5fa0274 100644 --- a/modules/legacy/modules/device_management/lib/src/features/contacts/presentation/widgets/new_contact_dialog.dart +++ b/modules/legacy/modules/device_management/lib/src/features/contacts/presentation/widgets/new_contact_dialog.dart @@ -1,5 +1,6 @@ import 'package:design_system/design_system.dart'; import 'package:device_management/src/features/contacts/presentation/providers/contacts_controller.dart'; +import 'package:device_management/src/features/contacts/presentation/providers/contacts_provider.dart'; import 'package:device_management/src/features/contacts/presentation/providers/new_contact_form_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -99,6 +100,16 @@ class _NewContactDialogState extends ConsumerState { return; } + final existingContacts = + ref.read(contactsProvider(widget.userId)).value ?? []; + final isDuplicate = existingContacts.any( + (c) => c.phone?.e164 == parsed.e164 || c.rawPhone == parsed.e164, + ); + if (isDuplicate) { + formNotifier.setLocalError(I18n.errorContactDuplicate); + return; + } + formNotifier.clearError(); Navigator.of(context).pop(); ref.read(contactsControllerProvider.notifier).createContact( diff --git a/modules/legacy/modules/settings/lib/src/features/block_phone/presentation/widgets/add_contact_sheet.dart b/modules/legacy/modules/settings/lib/src/features/block_phone/presentation/widgets/add_contact_sheet.dart index f58e4eab..f3a6e227 100644 --- a/modules/legacy/modules/settings/lib/src/features/block_phone/presentation/widgets/add_contact_sheet.dart +++ b/modules/legacy/modules/settings/lib/src/features/block_phone/presentation/widgets/add_contact_sheet.dart @@ -162,6 +162,16 @@ class _ContactFormSheetWrapperState return; } + if (!_isEdit) { + final isDuplicate = widget.currentContacts.any( + (c) => c.phone == parsed.e164, + ); + if (isDuplicate) { + formNotifier.setPhoneError(I18n.errorContactDuplicate); + return; + } + } + final contact = ContactListContactEntity( name: _nameController.text.trim(), phone: parsed.e164, diff --git a/modules/legacy/modules/settings/lib/src/features/sos_contacts/presentation/sos_contacts_screen.dart b/modules/legacy/modules/settings/lib/src/features/sos_contacts/presentation/sos_contacts_screen.dart index 7071e803..59c65c48 100644 --- a/modules/legacy/modules/settings/lib/src/features/sos_contacts/presentation/sos_contacts_screen.dart +++ b/modules/legacy/modules/settings/lib/src/features/sos_contacts/presentation/sos_contacts_screen.dart @@ -1,3 +1,4 @@ +import 'package:legacy_ui/legacy_ui.dart'; import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -21,8 +22,8 @@ class SosContactsScreen extends ConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final device = ref.watch(selectedDeviceProvider).value; final primaryColor = context.sfColors.legacyPrimary; - final maxContacts = device?.capabilities?.contacts - ?.maxForType('emergency', fallback: 3) ?? + final maxContacts = + device?.capabilities?.contacts?.maxForType('emergency', fallback: 3) ?? 3; ref.listen(sosContactsControllerProvider, (prev, next) async { @@ -128,7 +129,7 @@ class SosContactsScreen extends ConsumerWidget { ), ), title: Text( - context.translate(I18n.sosContacts).toUpperCase(), + context.translate(I18n.sosContacts), style: TextStyle( fontSize: SizeUtils.getByScreen(small: 20, big: 19), fontWeight: FontWeight.w500, @@ -163,7 +164,7 @@ class SosContactsScreen extends ConsumerWidget { Future _confirmDelete(BuildContext context, String name) { final theme = Theme.of(context); - return showDialog( + return showLegacyDialog( context: context, builder: (dialogContext) => AlertDialog( icon: Icon( @@ -268,8 +269,7 @@ class _ContactList extends StatelessWidget { context.translate(I18n.sosDescription), style: TextStyle( fontSize: SizeUtils.getByScreen(small: 14, big: 15), - color: - Theme.of(context).colorScheme.onSurface.withAlpha(178), + color: Theme.of(context).colorScheme.onSurface.withAlpha(178), ), ), ), diff --git a/modules/legacy/modules/settings/lib/src/features/sos_contacts/presentation/widgets/add_sos_contact_sheet.dart b/modules/legacy/modules/settings/lib/src/features/sos_contacts/presentation/widgets/add_sos_contact_sheet.dart index 2676bb07..e5833ec2 100644 --- a/modules/legacy/modules/settings/lib/src/features/sos_contacts/presentation/widgets/add_sos_contact_sheet.dart +++ b/modules/legacy/modules/settings/lib/src/features/sos_contacts/presentation/widgets/add_sos_contact_sheet.dart @@ -120,6 +120,14 @@ class _AddSosContactSheetState extends ConsumerState<_AddSosContactSheet> { return; } + final isDuplicate = widget.currentContacts.any( + (c) => c.phone == parsed.e164, + ); + if (isDuplicate) { + formNotifier.setPhoneError(I18n.errorContactDuplicate); + return; + } + await ref.read(sosContactsControllerProvider.notifier).addContact( deviceId: widget.deviceId, userId: widget.userId,