Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@

## 8.4.0

- Refactor l10n generator. Thanks [@ipcjs]()
- Refactor l10n generator. Thanks [@ipcjs](https://github.com/ipcjs)
- Add property to allow empty on equalLength validator. Thanks [@CircleCurve](https://github.com/CircleCurve)
- Add support for more languages
- Czech. Thanks [@edlman](https://github.com/flutter-form-builder-ecosystem/form_builder_validators/pull/3)
Expand Down
16 changes: 16 additions & 0 deletions lib/l10n/intl_en.arb
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@
}
}
},
"maxCountErrorText": "Value must have a count less than or equal to {maxCount}.",
"@maxCountErrorText": {
"placeholders": {
"maxCount": {
"type": "int"
}
}
},
"maxLengthErrorText": "Value must have a length less than or equal to {maxLength}.",
"@maxLengthErrorText": {
"placeholders": {
Expand Down Expand Up @@ -60,6 +68,14 @@
}
}
},
"minCountErrorText": "Value must have a count greater than or equal to {minCount}.",
"@minCountErrorText": {
"placeholders": {
"minCount": {
"type": "int"
}
}
},
"minLengthErrorText": "Value must have a length greater than or equal to {minLength}.",
"@minLengthErrorText": {
"placeholders": {
Expand Down
2 changes: 2 additions & 0 deletions lib/l10n/intl_ja.arb
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@
"ipErrorText": "有効なIPアドレスを入力してください。",
"matchErrorText": "値が正規表現と一致しません。",
"maxErrorText": "値は{max}以下にしてください。",
"maxCountErrorText": "{maxCount}個以下にしてください。",
"maxLengthErrorText": "値は{maxLength}文字以下で入力してください。",
"maxWordsCountErrorText": "値の単語数は{maxWordsCount}以下にしてください。",
"minErrorText": "値は{min}以上にしてください。",
"minCountErrorText": "{minCount}個以上にしてください。",
"minLengthErrorText": "値は{minLength}文字以上で入力してください。",
"minWordsCountErrorText": "値の単語数は{minWordsCount}以上にしてください。",
"notEqualErrorText": "値は{value}と異なる必要があります。",
Expand Down
8 changes: 7 additions & 1 deletion lib/src/collection/max_length_validator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ class MaxLengthValidator<T> extends TranslatedValidator<T> {
if (valueCandidate is Iterable) valueLength = valueCandidate.length;
if (valueCandidate is Map) valueLength = valueCandidate.length;

return valueLength > maxLength ? errorText : null;
if (!(valueLength > maxLength)) {
return null;
}
if (valueCandidate is! String && !hasCustomErrorText) {
return FormBuilderLocalizations.current.maxCountErrorText(maxLength);
}
return errorText;
}
}
8 changes: 7 additions & 1 deletion lib/src/collection/min_length_validator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,12 @@ class MinLengthValidator<T> extends TranslatedValidator<T> {
if (valueCandidate is Iterable) valueLength = valueCandidate.length;
if (valueCandidate is Map) valueLength = valueCandidate.length;

return valueLength < minLength ? errorText : null;
if (!(valueLength < minLength)) {
return null;
}
if (valueCandidate is! String && !hasCustomErrorText) {
return FormBuilderLocalizations.current.minCountErrorText(minLength);
}
return errorText;
}
}
3 changes: 3 additions & 0 deletions lib/src/translated_validator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ abstract class TranslatedValidator<T> extends BaseValidator<T> {
@override
String get errorText => super.errorText ?? translatedErrorText;

/// Whether a custom error message was provided to the constructor.
bool get hasCustomErrorText => super.errorText != null;

/// The translated error message returned if the value is invalid.
String get translatedErrorText;
}
34 changes: 31 additions & 3 deletions test/src/collection/max_length_validator_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -213,9 +213,7 @@ void main() {
expect(result, isNotNull);
expect(
result,
equals(
FormBuilderLocalizations.current.maxLengthErrorText(maxLength),
),
equals(FormBuilderLocalizations.current.maxCountErrorText(maxLength)),
);
},
);
Expand Down Expand Up @@ -316,4 +314,34 @@ void main() {
);
});
});

group('MaxLengthValidator - Iterable error text', () {
test('should return the count error text for a too long list', () {
const MaxLengthValidator<List<String>> validator =
MaxLengthValidator<List<String>>(2);

final String? result = validator.validate(<String>['a', 'b', 'c']);

expect(result, FormBuilderLocalizations.current.maxCountErrorText(2));
});

test('should keep the length error text for a too long string', () {
const MaxLengthValidator<String> validator = MaxLengthValidator<String>(
2,
);

final String? result = validator.validate('abc');

expect(result, FormBuilderLocalizations.current.maxLengthErrorText(2));
});

test('should keep a custom error text for a too long list', () {
final MaxLengthValidator<List<String>> validator =
MaxLengthValidator<List<String>>(2, errorText: customErrorMessage);

final String? result = validator.validate(<String>['a', 'b', 'c']);

expect(result, customErrorMessage);
});
});
}
34 changes: 31 additions & 3 deletions test/src/collection/min_length_validator_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -213,9 +213,7 @@ void main() {
expect(result, isNotNull);
expect(
result,
equals(
FormBuilderLocalizations.current.minLengthErrorText(minLength),
),
equals(FormBuilderLocalizations.current.minCountErrorText(minLength)),
);
},
);
Expand Down Expand Up @@ -316,4 +314,34 @@ void main() {
);
});
});

group('MinLengthValidator - Iterable error text', () {
test('should return the count error text for a too short list', () {
const MinLengthValidator<List<String>> validator =
MinLengthValidator<List<String>>(2);

final String? result = validator.validate(<String>['a']);

expect(result, FormBuilderLocalizations.current.minCountErrorText(2));
});

test('should keep the length error text for a too short string', () {
const MinLengthValidator<String> validator = MinLengthValidator<String>(
2,
);

final String? result = validator.validate('a');

expect(result, FormBuilderLocalizations.current.minLengthErrorText(2));
});

test('should keep a custom error text for a too short list', () {
final MinLengthValidator<List<String>> validator =
MinLengthValidator<List<String>>(2, errorText: customErrorMessage);

final String? result = validator.validate(<String>['a']);

expect(result, customErrorMessage);
});
});
}
Loading