试图从另一个小部件获取TextFormField数据



我正在构建一个从JSON数据生成表单字段的应用程序。Form小部件在custom_form.dart

中声明。
child: Form(
key: _globalKey,
child: Column(
children: [
SizedBox(
height: 10,
),
Text("Register Form: "),
SizedBox(
height: 3,
),
for (var i = 0; i < this.widget.widgetList.length; i++)
generateWidgetFromType(this.widget.widgetList[i]),

我正在使用generateWidgetFrom类型来生成小部件

Widget generateWidgetFromType(Mywidget mywidget) {
switch (mywidget.type) {
case "CheckBox":
return GenerateCheckBox(mywidget);
case "Input":
return CustomGeneratedWidget(mywidget,
onSaved: (value) => widget.test = value);
case "DatePicker":
return GenerateDatePicker(mywidget);
}
return Text("This type is not supported yet");
}

TextFormField在CustomGeneratedWidget

中声明
child: TextFormField(
controller: textEditingController,
obscureText: isPasswordField(this.widget.mywidget.key),
keyboardType: customType(this.widget.mywidget.key),
decoration: InputDecoration(
labelText: this.widget.mywidget.label,
border: OutlineInputBorder()),
validator: (value) {

当我点击custom_form.dart

中的Add按钮时,我想从CustomGeneratedWidget中的TextFormField检索数据

一种方法可能是在您的CustomGeneratedWidget类中添加一个名为getValue()的方法:

class CustomGeneratedWidget extends Mywidget {
TextEditingController textEditingController = TextEditingController();
...
String getValue() {
return textEditingController.text;
}
...
@override
Widget build(BuildContext context) {
...
}
}

我猜,基于你正在构建的东西,你最终想要得到的数据不仅来自TextFormField/CustomGeneratedWidget实例,还包括GenerateCheckBoxGenerateDatePicker的实例。在这种情况下,如果是我,我会向Mywidget添加一个抽象方法,您可以在其子类中重写,可能称为getValue()。因此,Mywidget可能看起来像:

abstract class Mywidget extends Widget {
...
// this method is purposefully unimplemented, and is therefore an "abstract" method
dynamic getValue();  
...
}

在您的子类中,例如CustomGeneratedWidget,您将"重写"。这个方法通过重新定义它/实现它,从而使它"具体化":

class CustomGeneratedWidget extends Mywidget {
TextEditingController textEditingController = TextEditingController();
...
@override
String getValue() {
return textEditingController.text;
} 
@override
Widget build(BuildContext context) {
return Container(
child: TextFormField(
controller: textEditingController
...
)
);
}
}

回到custom_form.dart,在您的"添加"按钮的处理程序中,您可以浏览创建的Mywidget实例列表,并在每个实例上调用getValue()

最新更新