diff --git a/lib/models/contact_address_entry_data.dart b/lib/models/contact_address_entry_data.dart index b09e01984..25677b13d 100644 --- a/lib/models/contact_address_entry_data.dart +++ b/lib/models/contact_address_entry_data.dart @@ -33,6 +33,19 @@ class AddressEntryData extends ChangeNotifier { notifyListeners(); } + bool get isEmpty { + if (address != null && address!.isNotEmpty) { + return false; + } + if (addressLabel != null && addressLabel!.isNotEmpty) { + return false; + } + if (coin != null) { + return false; + } + return true; + } + bool get isValid { if (_address == null || coin == null || _addressLabel == null) { return false; diff --git a/lib/providers/ui/address_book_providers/valid_contact_state_provider.dart b/lib/providers/ui/address_book_providers/valid_contact_state_provider.dart index 8ae454346..6cb0687ed 100644 --- a/lib/providers/ui/address_book_providers/valid_contact_state_provider.dart +++ b/lib/providers/ui/address_book_providers/valid_contact_state_provider.dart @@ -5,10 +5,19 @@ final validContactStateProvider = StateProvider.autoDispose.family<bool, List<int>>((ref, ids) { bool isValid = true; + bool hasAtLeastOneValid = false; + for (int i = 0; i < ids.length; i++) { - isValid = isValid && - ref.watch( - addressEntryDataProvider(ids[i]).select((value) => value.isValid)); + final _valid = ref.watch( + addressEntryDataProvider(ids[i]).select((value) => value.isValid)); + + final _isEmpty = ref.watch( + addressEntryDataProvider(ids[i]).select((value) => value.isEmpty)); + + isValid = isValid && (_valid || _isEmpty); + if (_valid) { + hasAtLeastOneValid = true; + } } - return isValid; + return isValid && hasAtLeastOneValid; });