validateAddress function

String? validateAddress({
  1. required String address,
  2. String? title = "Address",
  3. bool trimWhitespace = true,
  4. bool isRequired = true,
  5. int minLength = 10,
  6. int maxLength = 200,
  7. bool requireStreetNumber = false,
  8. bool requireStreetName = true,
  9. bool requireCity = false,
  10. bool requireCountry = false,
  11. bool allowSpecialChars = true,
  12. bool allowNumbers = true,
  13. bool allowLetters = true,
  14. List<String>? forbiddenWords,
  15. List<String>? requiredWords,
  16. List<String>? existingAddresses,
  17. String? emptyMessage,
  18. String? minLengthMessage,
  19. String? maxLengthMessage,
  20. String? missingStreetNumberMessage,
  21. String? missingStreetNameMessage,
  22. String? missingCityMessage,
  23. String? missingCountryMessage,
  24. String? invalidSpecialCharsMessage,
  25. String? invalidNumbersMessage,
  26. String? invalidLettersMessage,
  27. String? forbiddenWordsMessage,
  28. String? requiredWordsMessage,
  29. String? alreadyExistsMessage,
  30. SahihLanguage? lang,
})

Validates address with component requirements and content filtering. Returns null if valid, error message if invalid.

Implementation

String? validateAddress({
  required String address,
  String? title = "Address",
  bool trimWhitespace = true,
  bool isRequired = true,
  int minLength = 10,
  int maxLength = 200,
  bool requireStreetNumber = false,
  bool requireStreetName = true,
  bool requireCity = false,
  bool requireCountry = false,
  bool allowSpecialChars = true,
  bool allowNumbers = true,
  bool allowLetters = true,
  List<String>? forbiddenWords,
  List<String>? requiredWords,
  List<String>? existingAddresses,
  String? emptyMessage,
  String? minLengthMessage,
  String? maxLengthMessage,
  String? missingStreetNumberMessage,
  String? missingStreetNameMessage,
  String? missingCityMessage,
  String? missingCountryMessage,
  String? invalidSpecialCharsMessage,
  String? invalidNumbersMessage,
  String? invalidLettersMessage,
  String? forbiddenWordsMessage,
  String? requiredWordsMessage,
  String? alreadyExistsMessage,
  SahihLanguage? lang,
}) {
  String value = trimWhitespace ? address.trim() : address;

  if (isRequired && value.isEmpty) {
    return emptyMessage ?? SahihLocalization.get('address_empty', lang: lang);
  }
  if (!isRequired && value.isEmpty) return null;

  if (value.length < minLength) {
    return minLengthMessage ??
        SahihLocalization.get('address_min_length',
            lang: lang, args: {'min': minLength.toString()});
  }
  if (value.length > maxLength) {
    return maxLengthMessage ??
        SahihLocalization.get('address_max_length',
            lang: lang, args: {'max': maxLength.toString()});
  }

  if (!allowNumbers && value.containsNumbers) {
    return invalidNumbersMessage ??
        SahihLocalization.get('address_invalid_numbers', lang: lang);
  }
  if (!allowLetters && value.containsLetters) {
    return invalidLettersMessage ??
        SahihLocalization.get('address_invalid_letters', lang: lang);
  }
  if (!allowSpecialChars && value.containsSpecialChars) {
    return invalidSpecialCharsMessage ??
        SahihLocalization.get('address_invalid_special', lang: lang);
  }

  if (requireStreetNumber && !value.hasStreetNumber) {
    return missingStreetNumberMessage ??
        SahihLocalization.get('address_no_street_number', lang: lang);
  }
  if (requireStreetName && !value.hasStreetName) {
    return missingStreetNameMessage ??
        SahihLocalization.get('address_no_street_name', lang: lang);
  }
  if (requireCity && !value.hasCity) {
    return missingCityMessage ??
        SahihLocalization.get('address_no_city', lang: lang);
  }

  if (requireCountry && !value.hasCountry) {
    return missingCountryMessage ??
        SahihLocalization.get('address_no_country', lang: lang);
  }

  if (value.containsForbiddenWord(forbiddenWords)) {
    return forbiddenWordsMessage ??
        SahihLocalization.get('address_forbidden_words', lang: lang);
  }
  if (!value.containsRequiredWords(requiredWords)) {
    return requiredWordsMessage ??
        SahihLocalization.get('address_required_words', lang: lang);
  }

  if (value.isDuplicate(existingAddresses)) {
    return alreadyExistsMessage ??
        SahihLocalization.get('address_already_exists', lang: lang);
  }

  return null;
}