[deep link] Add logic to validate ios domain errors in controller (#7984)

* 1

* add flag

* resolve comments

* lint

* Update deep_links_controller.dart

* lint
diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_controller.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_controller.dart
index 63ba3de..10aa74f 100644
--- a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_controller.dart
+++ b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_controller.dart
@@ -441,30 +441,34 @@
     }
   }
 
-  Future<List<LinkData>> _validateAndroidDomain(
+  Future<List<LinkData>> _validateDomain(
     List<LinkData> linkdatas,
   ) async {
     final domains = linkdatas
         .where(
-          (linkdata) =>
-              linkdata.os.contains(PlatformOS.android) &&
-              linkdata.domain != null,
+          (linkdata) => linkdata.domain != null,
         )
         .map((linkdata) => linkdata.domain!)
         .toSet()
         .toList();
 
-    late final Map<String, List<DomainError>> domainErrors;
-
+    late final Map<String, List<DomainError>> androidDomainErrors;
+    Map<String, List<DomainError>> iosDomainErrors =
+        <String, List<DomainError>>{};
     try {
-      final result = await deepLinksServices.validateAndroidDomain(
+      final androidResult = await deepLinksServices.validateAndroidDomain(
         domains: domains,
         applicationId: applicationId,
         localFingerprint: localFingerprint.value,
       );
-      domainErrors = result.domainErrors;
+      androidDomainErrors = androidResult.domainErrors;
       googlePlayFingerprintsAvailability.value =
-          result.googlePlayFingerprintsAvailability;
+          androidResult.googlePlayFingerprintsAvailability;
+      if (FeatureFlags.deepLinkIosCheck) {
+        iosDomainErrors = await deepLinksServices.validateIosDomain(
+          domains: domains,
+        );
+      }
     } catch (_) {
       //TODO(hangyujin): Add more error handling for cases like RPC error and invalid json.
       pagePhase.value = PagePhase.validationErrorPage;
@@ -472,8 +476,11 @@
     }
 
     return linkdatas.map((linkdata) {
-      final errors = domainErrors[linkdata.domain];
-      if (errors != null && errors.isNotEmpty) {
+      final errors = <DomainError>[
+        ...(androidDomainErrors[linkdata.domain] ?? []),
+        ...(iosDomainErrors[linkdata.domain] ?? []),
+      ];
+      if (errors.isNotEmpty) {
         return LinkData(
           domain: linkdata.domain,
           domainErrors: errors,
@@ -535,7 +542,7 @@
       gac.deeplink,
       gac.AnalyzeFlutterProject.flutterHasAppLinks.name,
     );
-    linkdata = await _validateAndroidDomain(linkdata);
+    linkdata = await _validateDomain(linkdata);
     if (pagePhase.value == PagePhase.validationErrorPage) {
       return;
     }
diff --git a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart
index af9af82..622f912 100644
--- a/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart
+++ b/packages/devtools_app/lib/src/screens/deep_link_validation/deep_links_services.dart
@@ -118,6 +118,17 @@
     );
   }
 
+  Future<Map<String, List<DomainError>>> validateIosDomain({
+    required List<String> domains,
+  }) async {
+    //TODO(hangyujin): This is just a fake response, implement the iOS domain validation when the API is available.
+    final domainErrors = <String, List<DomainError>>{
+      for (final domain in domains)
+        domain: <DomainError>[IosDomainError.existence],
+    };
+    return domainErrors;
+  }
+
   Future<GenerateAssetLinksResult> generateAssetLinks({
     required String applicationId,
     required String domain,