group method
FormGroup
group(
- Map<
String, Object> controls, [ - List<
ValidatorFunction> validators = const [], - List<
AsyncValidatorFunction> asyncValidators = const []
Construct a new FormGroup instance.
The controls
argument must not be null.
Can optionally provide a validators
collection for the group.
Example:
Creates a group with a control that has a default value.
final form = fb.group({
'name': 'John Doe',
});
Creates a group with a control that has a default value.
final form = fb.group({
'name': ['John Doe'],
});
Creates a group with a control that has a default value and a validator.
final form = fb.group({
'name': ['John Doe', Validators.required],
});
Creates a group with a control that has a validator.
final form = fb.group({
'name': Validators.required,
});
Creates a group with a control that has several validators.
final form = fb.group({
'email': [Validators.required, Validators.email],
});
Creates a group with a group's validator.
final form = fb.group({
'email': ['', Validators.required, Validators.email],
'emailConfirmation': '',
},
[Validators.mustMatch('email', 'emailConfirmation')],
);
Implementation
FormGroup group(
Map<String, Object> controls, [
List<ValidatorFunction> validators = const [],
List<AsyncValidatorFunction> asyncValidators = const [],
]) {
final map = controls
.map<String, AbstractControl<Object>>((String key, Object value) {
if (value is String) {
return MapEntry(key, FormControl<String>(value: value));
} else if (value is int) {
return MapEntry(key, FormControl<int>(value: value));
} else if (value is bool) {
return MapEntry(key, FormControl<bool>(value: value));
} else if (value is double) {
return MapEntry(key, FormControl<double>(value: value));
} else if (value is DateTime) {
return MapEntry(key, FormControl<DateTime>(value: value));
} else if (value is TimeOfDay) {
return MapEntry(key, FormControl<TimeOfDay>(value: value));
} else if (value is AbstractControl<Object>) {
return MapEntry(key, value);
} else if (value is ValidatorFunction) {
return MapEntry(key, FormControl(validators: [value]));
} else if (value is List<ValidatorFunction>) {
return MapEntry(key, FormControl(validators: value));
} else if (value is List<Object?>) {
if (value.isEmpty) {
return MapEntry(key, FormControl());
} else {
final defaultValue = value.first;
final validators = List.of(value.skip(1));
if (validators.isNotEmpty &&
validators.any((validator) => validator is! ValidatorFunction)) {
throw FormBuilderInvalidInitializationException(
'Invalid validators initialization');
}
if (defaultValue is ValidatorFunction) {
throw FormBuilderInvalidInitializationException(
'Expected first value in array to be default value of the control and not a validator.');
}
final effectiveValidators = validators
.map<ValidatorFunction>((v) => v! as ValidatorFunction)
.toList();
final control = _control(defaultValue, effectiveValidators);
return MapEntry(key, control as AbstractControl<Object>);
}
}
return MapEntry(key, FormControl(value: value));
});
return FormGroup(
map,
validators: validators,
asyncValidators: asyncValidators,
);
}