validatePlatformConfig static method

ValidationResult validatePlatformConfig({
  1. required String platform,
  2. required String redirectScheme,
  3. Map<String, dynamic> platformSpecific = const {},
})

Validates platform-specific configuration

Implementation

static ValidationResult validatePlatformConfig({
  required String platform,
  required String redirectScheme,
  Map<String, dynamic> platformSpecific = const {},
}) {
  final issues = <String>[];
  final suggestions = <String>[];

  // Validate redirect scheme
  final schemeIssues = UrlBuilder.validateRedirectScheme(redirectScheme);
  issues.addAll(schemeIssues);

  switch (platform.toLowerCase()) {
    case 'android':
      issues.addAll(_validateAndroidConfig(redirectScheme, platformSpecific));
      if (issues.isNotEmpty) {
        suggestions.addAll([
          'Add OAuth redirect activity to AndroidManifest.xml',
          'Ensure intent filter is properly configured',
          'Check that the scheme matches your configuration',
        ]);
      }
      break;

    case 'ios':
      issues.addAll(_validateIOSConfig(redirectScheme, platformSpecific));
      if (issues.isNotEmpty) {
        suggestions.addAll([
          'Add URL scheme to Info.plist',
          'Ensure CFBundleURLSchemes includes your redirect scheme',
          'Check that the scheme is properly registered',
        ]);
      }
      break;

    case 'web':
      issues.addAll(_validateWebConfig(redirectScheme, platformSpecific));
      if (issues.isNotEmpty) {
        suggestions.addAll([
          'Ensure redirect URI is properly configured for web',
          'Check CORS settings on your Frappe server',
          'Verify the redirect URI matches exactly',
        ]);
      }
      break;

    default:
      issues.add('Unsupported platform: $platform');
      suggestions.add('Use one of: android, ios, web');
  }

  if (issues.isEmpty) {
    return ValidationResult.success(
      context: {
        'platform': platform,
        'redirectScheme': redirectScheme,
        'validatedAt': DateTime.now().toIso8601String(),
      },
    );
  }

  return ValidationResult.failure(
    issues: issues,
    suggestions: suggestions,
    context: {
      'platform': platform,
      'redirectScheme': redirectScheme,
      'validatedAt': DateTime.now().toIso8601String(),
    },
  );
}