我有一种方法可以处理将TextFormField字段的值保存在不同Forms的变量中的逻辑,但是在验证Forms时,它们不会将值保存在我通过参数传递的String变量中。
这是我的变量从以下一种形式的声明:
final formKeyMotherboard = new GlobalKey<FormState>();
String _numInvMotherboard,
_marcaMotherboard,
_modeloMotherboard,
_tipoMotherboard,
_detallesMotherboard,
_fechaMotherboard;
final TextEditingController controllerNumInventarioMotherboard =
new TextEditingController();
final TextEditingController controllerMarcaMotherboard =
new TextEditingController();
final TextEditingController controllerModeloMotherboard =
new TextEditingController();
final TextEditingController controllerTipoMotherboard =
new TextEditingController();
final TextEditingController controllerDetallesMotherboard =
new TextEditingController();
final TextEditingController controllerFechaMotherboard =
new TextEditingController();
这是方法:
Step _defaulFrom(
{@required IconData icon,
@required String nameForm,
@required Key keyForm,
@required String saveNumInv,
@required String saveMarca,
@required String saveModelo,
@required String saveTipo,
@required String saveDetalles,
@required String saveFecha,
@required TextEditingController controllerNumInv,
@required TextEditingController controllerMarca,
@required TextEditingController controllerModelo,
@required TextEditingController controllerTipo,
@required TextEditingController controllerDetalle,
@required TextEditingController controllerFecha,
TextEditingController controllerEncargado,
String saveEncargado}) {
return Step(
title: Text(
nameForm,
style: TextStyle(
color: Colors.black45,
fontSize: 22.0,
fontWeight: FontWeight.bold,
),
),
content: Form(
key: keyForm,
child: Padding(
padding: const EdgeInsets.all(12.0),
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: TextFormField(
controller: controllerNumInv,
autocorrect: false,
decoration: _defaulImputDecoration(NUM_INVENTARIO, icon),
validator: (val) =>
val.isEmpty ? ERROR_RELLENE_CAMPO : null,
`enter code here`onSaved: (value) => saveNumInv = value,
keyboardType: TextInputType.numberWithOptions(),
),
),
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: TextFormField(
controller: controllerMarca,
autocorrect: false,
decoration: _defaulImputDecoration(MARCA, icon),
validator: (val) =>
val.isEmpty ? ERROR_RELLENE_CAMPO : null,
onSaved: (value) => saveMarca = value,
),
),
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: TextFormField(
controller: controllerModelo,
autocorrect: false,
decoration: _defaulImputDecoration(MODELO, icon),
validator: (val) =>
val.isEmpty ? ERROR_RELLENE_CAMPO : null,
onSaved: (value) => saveModelo = value,
),
),
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: TextFormField(
controller: controllerTipo,
autocorrect: false,
decoration: _defaulImputDecoration(TIPO, icon),
validator: (val) =>
val.isEmpty ? ERROR_RELLENE_CAMPO : null,
onSaved: (value) => saveTipo = value,
),
),
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: TextFormField(
controller: controllerDetalle,
autocorrect: false,
decoration: _defaulImputDecoration(DETALLES, icon),
validator: (val) =>
val.isEmpty ? ERROR_RELLENE_CAMPO : null,
onSaved: (value) => saveDetalles = value,
),
),
controllerEncargado != null
? Padding(
padding: const EdgeInsets.only(top: 8.0),
child: TextFormField(
controller: controllerEncargado,
autocorrect: false,
decoration: _defaulImputDecoration(
NOMBRE_ENCARGADO, Icons.person),
validator: (val) =>
val.isEmpty ? ERROR_RELLENE_CAMPO : null,
onSaved: (value) => saveEncargado = value,
),
)
: Divider(
color: Colors.transparent,
),
Padding(
padding: const EdgeInsets.only(top: 8.0),
child: TextFormField(
autocorrect: false,
controller: controllerFecha,
decoration: InputDecoration(
suffixIcon: IconButton(
icon: Icon(Icons.date_range),
onPressed: () {
_selectDate(context);
setState(() {
//_saveDate = new DateFormat.yMd(_dateTime)
});
}),
contentPadding: EdgeInsets.all(16.0),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(25.0),
),
labelText: 'Fecha',
labelStyle: TextStyle(
color: Colors.black54,
fontSize: 16.0,
decorationStyle: TextDecorationStyle.wavy),
),
validator: (val) =>
val.isEmpty ? ERROR_RELLENE_CAMPO : null,
onSaved: (value) => saveFecha = value,
),
),
}
})
],
),
)));
}
使用这种方法我想减少代码,我有 5 个具有相同代码的表单,唯一改变的是从TextEditingController和controller.text获得的TextFormField的值被保存和保存的值,它告诉我它的值为空