TextField.confirmedAs
This commit is contained in:
parent
aa31ead75c
commit
01dbb95808
1 changed files with 22 additions and 5 deletions
|
@ -11,29 +11,46 @@ class TextField extends Field<String> {
|
||||||
/// If `true` (default), then the input will be trimmed before validation.
|
/// If `true` (default), then the input will be trimmed before validation.
|
||||||
final bool trim;
|
final bool trim;
|
||||||
|
|
||||||
|
/// If not `null`, then if the value of [confirmedAs] in the body is not
|
||||||
|
/// identical, an error will be returned.
|
||||||
|
final String confirmedAs;
|
||||||
|
|
||||||
TextField(String name,
|
TextField(String name,
|
||||||
{String label,
|
{String label,
|
||||||
bool isRequired = true,
|
bool isRequired = true,
|
||||||
this.isTextArea = false,
|
this.isTextArea = false,
|
||||||
this.trim = true})
|
this.trim = true,
|
||||||
|
this.confirmedAs})
|
||||||
: super(name, label: label, isRequired: isRequired);
|
: super(name, label: label, isRequired: isRequired);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
FutureOr<U> accept<U>(FormRenderer<U> renderer) =>
|
FutureOr<U> accept<U>(FormRenderer<U> renderer) =>
|
||||||
renderer.visitTextField(this);
|
renderer.visitTextField(this);
|
||||||
|
|
||||||
|
String _normalize(String s) {
|
||||||
|
if (trim) {
|
||||||
|
s = s?.trim();
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
FutureOr<FieldReadResult<String>> read(RequestContext req,
|
FutureOr<FieldReadResult<String>> read(RequestContext req,
|
||||||
Map<String, dynamic> fields, Iterable<UploadedFile> files) {
|
Map<String, dynamic> fields, Iterable<UploadedFile> files) {
|
||||||
var value = fields[name] as String;
|
var value = _normalize(fields[name] as String);
|
||||||
if (trim) {
|
|
||||||
value = value?.trim();
|
|
||||||
}
|
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
return null;
|
return null;
|
||||||
} else if (trim && value.isEmpty) {
|
} else if (trim && value.isEmpty) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
|
if (confirmedAs != null) {
|
||||||
|
var confirmed = _normalize(fields[confirmedAs] as String);
|
||||||
|
if (confirmed != value) {
|
||||||
|
return FieldReadResult.failure(
|
||||||
|
['"$name" and "$confirmedAs" must be identical.']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return FieldReadResult.success(value);
|
return FieldReadResult.success(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue