我尝试做的是向用户显示一个Dialog
,其中包含一个Form
,然后,用户填写2 TextFormFields
并单击“Next ElevatedButton
”。然后,将显示另一个类似的Dialog/form
,用户可以执行相同的操作,直到他想要完成并按“Submit ElevatedButton
(即,一个用户可能想要添加3个问题/答案,而另一个用户想要添加10个问题/答案)。此外,用户可以点击返回ElevatedButton
并回顾先前的Dialog/Form
。
我有下面的代码,但它不工作,因为它不能保持以前的表单状态,也不能提交表单:
class _FormQuestionsState extends State<FormQuestions> {
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return Form(
key: _formKey,
child: SingleChildScrollView(
child: Column(
children: [
TextFormField(
decoration: const InputDecoration(
labelText: 'Queation',
border: OutlineInputBorder(),
),
validator: (value) {
if (value!.isEmpty) return 'Please enter the title of the question';
},
),
TextFormField(
minLines: 3,
maxLines: 5,
decoration: const InputDecoration(
labelText: 'Answer',
border: OutlineInputBorder(),
),
validator: (value) {
if (value!.isEmpty || value.length < 30) {
return 'Answer must be longer';
}
},
),
Padding(
padding: EdgeInsets.all(10),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(
flex: 1,
child: ElevatedButton(
onPressed: () {
Navigator.of(context).pop();
showDialog(
context: context,
builder: (context) =>
const Dialog(child: FormQuestions()));
},
child: Text('Back'),
),
),
Expanded(
flex: 2,
child: ElevatedButton(
onPressed: null, // This function should save all the information has been already put on all the forms!
child: Text('Submit'),
),
),
Expanded(
flex: 1,
child: ElevatedButton(
onPressed: () {
Navigator.of(context).pop();
showDialog(
context: context,
builder: (context) =>
const Dialog(child: FormQuestions()));
},
child: Text('Next'),
),
),
],
),
),
],
),
),
);
}
}
我不知道如何修改它来达到我想要的。
2条答案
按热度按时间4si2a6ki1#
您可以通过以下方式循环对话框并保存结果。
lyr7nygr2#
使用TextEditingController(),使用问题/答案的一些唯一字符串或索引作为键