Flutter 如何在颤振中使用反应形式?
我试着在颤振中创建动态的场阵列,反应形式是最好的选择。但是没有我需要使用的关于ReactiveFormArray的文档Flutter 如何在颤振中使用反应形式?,flutter,flutter-web,flutter-reactive-forms,Flutter,Flutter Web,Flutter Reactive Forms,我试着在颤振中创建动态的场阵列,反应形式是最好的选择。但是没有我需要使用的关于ReactiveFormArray的文档 做了一些尝试和错误,并找到了使用它的方法。下面是答案。因为我找不到任何文档。分享,以便对某人有用 1.使用FormArray创建一个反应式表单 如果默认情况下需要,也可以在formarray中添加formgroup final form = FormGroup({ 'itemName': FormControl(value: ''), '
做了一些尝试和错误,并找到了使用它的方法。下面是答案。因为我找不到任何文档。分享,以便对某人有用 1.使用FormArray创建一个反应式表单 如果默认情况下需要,也可以在formarray中添加formgroup
final form = FormGroup({
'itemName': FormControl(value: ''),
'prices': FormArray([]),
});
2.获得正式订单
我们将使用此列表动态添加多个表单组
FormArray get pricesList => form.control('prices') as FormArray;
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();
}
@覆盖
void initState(){
价格列表。添加(FormGroup({
“greaterThan”:FormControl(值:0),
“lessThan”:FormControl(值:10),
“价格”:FormControl(值:0),
}));
super.initState();
}
ReactiveForm(
formGroup:this.form,
子:列(
儿童:[
反应文本字段(
formControlName:'itemName',
装饰:输入装饰(
labelText:“项目名称”,
),
),
反应阵列(
格式名称:“价格”,
生成器:(上下文、格式、子级){
最终城市=价格列表控制
.map((控件)=>控件作为表单组)
.map((当前表单){
返回反应形式(
formGroup:currentform,
子:列(
儿童:[
反应文本字段(
formControlName:'大于',
装饰:输入装饰(
labelText:'大于',
),
),
反应文本字段(
formControlName:'lessThan',
装饰:输入装饰(
labelText:'小于',
),
),
反应文本字段(
formControlName:'价格',
装饰:输入装饰(
标签文字:“价格”,
),
),
],
));
});
回程包装(
运行间距:20,
儿童:城市。toList(),
);
}),
反应型消费者(
生成器:(上下文、窗体、子对象){
返回上升按钮(
子项:文本('Submit'),
onPressed:form.valid?\u onSubmit:null,
);
},
),
],
),
),
));
addFormArray()异步{
价格列表。添加(FormGroup({
“greaterThan”:FormControl(值:10),
“lessThan”:FormControl(值:50),
“价格”:FormControl(值:0),
}));
setState((){});
}
只需单击按钮或在任何需要的地方调用此方法
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,
);
},
),
],
),
),
));
addFormArray() async {
pricesList.add(FormGroup({
'greaterThan': FormControl<int>(value: 10),
'lessThan': FormControl<int>(value: 50),
'price': FormControl<int>(value: 0),
}));
setState(() {});
}