1

我是 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);
    }
   }
   }
4

1 回答 1

0

您可以尝试创建这样的函数:

final firestoreInstance = FirebaseFirestore.instance;

void _onPressed(){
  firestoreInstance.collection("users").add(
  {
    "userName" : "johnDoe",
    ...otherFields
    }
  }).then((_){
    print("data added successfully!");
  });
}

您可以查看文档以查看相同的详细示例。同样来自文档“默认情况下,Firestore 引用操纵 Map<String, dynamic> 对象。缺点是我们失去了类型安全性。” 因此,您可以输入您的参考资料,如此处所示

于 2021-05-09T15:02:48.903 回答