Moh*_*yaz 0 flutter flutter-web flutter-reactive-forms
我试图在 flutter 中创建动态字段数组,reactive_forms 是最好的选择。但没有我需要使用的 ReactiveFormArray 文档。
做了一些尝试和错误,找到了使用它的方法。下面是答案。
由于我找不到任何文档。分享,以便它可能对某人有用。
1.使用 FormArray 创建响应式表单
如果默认情况下需要,您还可以在表单数组中添加表单组。
final form = FormGroup({
'itemName': FormControl(value: ''),
'prices': FormArray([]),
});
Run Code Online (Sandbox Code Playgroud)
2.获取FormArray 我们将使用此列表动态添加多个表单组。
FormArray get pricesList => form.control('prices') as FormArray;
Run Code Online (Sandbox Code Playgroud)
3、在init方法中初始化数据 动态添加表单数组数据。
@override
void initState() {
pricesList.add(FormGroup({
'greaterThan': FormControl<int>(value: 0),
'lessThan': FormControl<int>(value: 10),
'price': FormControl<int>(value: 0),
}));
super.initState();
}
Run Code Online (Sandbox Code Playgroud)
ReactiveForm(
formGroup: this.form,
child: Column(
children: <Widget>[
ReactiveTextField(
formControlName: 'itemName',
decoration: InputDecoration(
labelText: 'Item Name',
),
),
ReactiveFormArray(
formArrayName: 'prices',
builder: (context, formArray, child) {
final cities = pricesList.controls
.map((control) => control as FormGroup)
.map((currentform) {
return ReactiveForm(
formGroup: currentform,
child: Column(
children: <Widget>[
ReactiveTextField(
formControlName: 'greaterThan',
decoration: InputDecoration(
labelText: 'greater than',
),
),
ReactiveTextField(
formControlName: 'lessThan',
decoration: InputDecoration(
labelText: 'less than',
),
),
ReactiveTextField(
formControlName: 'price',
decoration: InputDecoration(
labelText: 'Price',
),
),
],
));
});
return Wrap(
runSpacing: 20,
children: cities.toList(),
);
}),
ReactiveFormConsumer(
builder: (context, form, child) {
return RaisedButton(
child: Text('Submit'),
onPressed: form.valid ? _onSubmit : null,
);
},
),
],
),
),
));
Run Code Online (Sandbox Code Playgroud)
addFormArray() async {
pricesList.add(FormGroup({
'greaterThan': FormControl<int>(value: 10),
'lessThan': FormControl<int>(value: 50),
'price': FormControl<int>(value: 0),
}));
setState(() {});
}
Run Code Online (Sandbox Code Playgroud)
只需单击按钮或在任何需要的地方调用此方法即可。
归档时间: |
|
查看次数: |
2922 次 |
最近记录: |