我是 Flutter 的新手,并试图从下面的反馈表中捕获用户反馈到 Firestore 数据库,并将其显示在从数据库读取并显示用户反馈报告的单独屏幕上?
class FeedbackScreen extends StatefulWidget {
static const String routeName = 'feedback_screen';
@override
_FeedbackScreenState createState() => _FeedbackScreenState();
}
class _FeedbackScreenState extends State<FeedbackScreen> {
List<String> _questions = [
'Question 1',
'Question 2 ',
'Question 3',
'Question 4'
];
List<int> _feedbackValue = [];
List<bool> _isFormFieldComplete = [];
String additionalComments;
@override
void initState() {
super.initState();
for (int i = 0; i < _questions.length; ++i) {
_feedbackValue.add(-1);
_isFormFieldComplete.add(false);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
getTranslated(context, "feedback_screen"),
),
),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 20.0, vertical: 20.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Please choose appropriate emoji icon for your response',
style: kFeedbackFormFieldTextStyle,
textAlign: TextAlign.center,
),
SizedBox(
height: 10.0,
),
Text(
getTranslated(context, "tons_emoji"),
style: kFeedbackFormFieldTextStyle,
),
SizedBox(
height: 10.0,
),
Text(
getTranslated(context, "alot_emoji"),
style: kFeedbackFormFieldTextStyle,
),
SizedBox(
height: 10.0,
),
Text(
getTranslated(context, "soso_emoji"),
style: kFeedbackFormFieldTextStyle,
),
SizedBox(
height: 10.0,
),
Text(
getTranslated(context, "notgood_emoji"),
style: kFeedbackFormFieldTextStyle,
),
Divider(
height: 25.0,
),
]
..addAll(
_questions.asMap().entries.map((entry) {
return FeedbackFormField(
id: entry.key + 1,
question: entry.value,
groupValue: _feedbackValue[entry.key],
radioHandler: (int value) =>
_handleRadioButton(entry.key, value),
error: _isFormFieldComplete[entry.key]
? 'This is a required field'
: null,
);
}),
)
..addAll([
SizedBox(
height: 10.0,
),
TextField(
decoration: kFeedbackFormFieldDecoration.copyWith(
hintText: 'Additional Comments (Optional)',
),
maxLines: 5,
onChanged: (value) => additionalComments = value,
),
SizedBox(
height: 20.0,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CustomRaisedButton(
save: handleSubmitFeedback,
title: 'Submit',
),
],
),
]),
),
),
),
);
}
void _handleRadioButton(int group, int value) {
setState(() {
_feedbackValue[group] = value;
_isFormFieldComplete[group] = false;
});
}
void handleSubmitFeedback() {
bool complete = true;
for (int i = 0; i < _feedbackValue.length; ++i) {
if (_feedbackValue[i] == -1) {
complete = false;
_isFormFieldComplete[i] = true;
} else {
_isFormFieldComplete[i] = false;
}
}
setState(() {});
if (complete == true) {
print(_feedbackValue);
print(additionalComments);
Navigator.pushReplacementNamed(context, SessionTwoScreen.routeName);
}
}
}