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

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,
}) {
  String value = trimWhitespace ? address.trim() : address;

  if (isRequired && value.isEmpty) {
    return emptyMessage ?? "$title is required";
  }
  if (!isRequired && value.isEmpty) return null;

  if (value.length < minLength) {
    return minLengthMessage ??
        "$title must be at least $minLength characters long";
  }
  if (value.length > maxLength) {
    return maxLengthMessage ?? "$title cannot exceed $maxLength characters";
  }

  if (!allowNumbers && value.containsNumbers) {
    return invalidNumbersMessage ?? "$title cannot contain numbers";
  }
  if (!allowLetters && value.containsLetters) {
    return invalidLettersMessage ?? "$title must contain letters";
  }
  if (!allowSpecialChars && value.containsSpecialChars) {
    return invalidSpecialCharsMessage ??
        "$title cannot contain special characters";
  }

  if (requireStreetNumber && !value.hasStreetNumber) {
    return missingStreetNumberMessage ?? "$title must include a street number";
  }
  if (requireStreetName && !value.hasStreetName) {
    return missingStreetNameMessage ?? "$title must include a street name";
  }
  if (requireCity && !value.hasCity) {
    return missingCityMessage ?? "$title must include a city name";
  }

  if (requireCountry && !value.hasCountry) {
    return missingCountryMessage ?? "$title must include a country";
  }

  if (value.containsForbiddenWord(forbiddenWords)) {
    return forbiddenWordsMessage ?? "$title contains forbidden words";
  }
  if (!value.containsRequiredWords(requiredWords)) {
    return requiredWordsMessage ?? "$title must contain required words";
  }

  if (value.isDuplicate(existingAddresses)) {
    return alreadyExistsMessage ?? "This $title already exists";
  }

  return null;
}