我正在创建一个带有表单的屏幕,供用户创建配方(这是AddRecipeForm类)。我创建了一个新类(AddRecipeSteps)以添加文本表单字段,用户可以在其中定义配方的步骤。如何将AddRecipeForm类中的formkey访问/传递给另一个AddRecipeSteps类?为了能够保存状态并使用验证器,我也有一个Recipe类,其中输入被“存储”为Recipe对象。 要获取完整的代码:https://codeshare.io/5QRb17,https://codeshare.io/5ZOzV7,https://codeshare.io/2BRBrp
这是AddRecipeForm类的一部分:
class AddRecipeForm extends StatefulWidget {
@override
_AddRecipeFormState createState() => _AddRecipeFormState();
}
class _AddRecipeFormState extends State<AddRecipeForm> {
final formKey = GlobalKey<FormState>();
Recipe recipe = Recipe();
int step = 1;
@override
Widget build(BuildContext context) {
return Form(
key: formKey,
child: ListView(
children: <Widget>[
//...
AddRecipeSteps(
//TODO: want to pass the formkey to AddRecipeSteps class
),
//...
],
),
);
}
这是AddRecipeSteps类:
import 'package:cibus/services/recipe.dart';
import 'package:flutter/material.dart';
import 'my_text_form_field.dart';
class AddRecipeSteps extends StatefulWidget {
@override
_AddRecipeStepsState createState() => _AddRecipeStepsState();
}
class _AddRecipeStepsState extends State<AddRecipeSteps> {
int steps = 1;
List<Widget> buildSteps() {
List<Widget> listOfSteps = [];
for (int i = 1; i <= steps; i++)
listOfSteps.add(Padding(
padding: const EdgeInsets.all(8.0),
child: MyTextFormField(
labelText: "Step $i",
validator: (String step) {
if (step.isEmpty) {
return 'Enter a Description';
}
else {
//we want to use formKey from AddRecipeForm class
formKey.currentState.save();
return null;
}
},
onSaved: (String step){
//want to add the input to the recipe object
recipe.steps.add(step);
},
),
));
listOfSteps.add(
Center(
child: RaisedButton(
child: Text("Add step"),
onPressed: () {
setState(() {
steps++;
});
},
),
),
);
return listOfSteps;
}
@override
Widget build(BuildContext context) {
return Column(
children: buildSteps(),
);
}
}