validatePlatformConfig static method
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(),
},
);
}