From bd72f65fc9e970be2762cc2e88738070fb997223 Mon Sep 17 00:00:00 2001
From: julian <julian@cypherstack.com>
Date: Tue, 29 Nov 2022 10:33:40 -0600
Subject: [PATCH] allow empty address forms in contact address form validation

---
 lib/models/contact_address_entry_data.dart      | 13 +++++++++++++
 .../valid_contact_state_provider.dart           | 17 +++++++++++++----
 2 files changed, 26 insertions(+), 4 deletions(-)

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;
 });