'Set<String?>' 类型的值不能分配给 'Map<String, String>' 类型的变量

A value of type 'Set<String?>' can't be assigned to a variable of type 'Map<String, String>'

我试图构建一个 flutter 测验制作应用程序,但我 运行 遇到了一些错误。我在实施时遇到的错误如下:

错误 1:必须初始化不可为 null 的实例字段“_isLoading”。

错误 2:无法将 'Set<String?>' 类型的值分配给 'Map<String, String>'.

类型的变量

这是代码:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:quizmaker/services/database.dart';
import 'package:quizmaker/widgets/widgets.dart';

class AddQuestion extends StatefulWidget {
  final String? quizId;
  AddQuestion(this.quizId);

  @override
  _AddQuestionState createState() => _AddQuestionState();
}

class _AddQuestionState extends State<AddQuestion> {
  final _formKey = GlobalKey<FormState>();
  String? question, option1, option2, option3, option4;
  bool _isLoading;

  DatabaseServices databaseService = new DatabaseServices();

  uploadQuizData(){
    if(_formKey.currentState!.validate()){

      Map<String, String> questionMap = {
        "question" = question,
        "option1" = option1,
        "option2" = option2,
        "option3" = option3,
        "option4" = option4,
      };

     databaseService.addQuestionData(questionMap, widget.quizId.toString());
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: appBar(context),
        backgroundColor: Colors.transparent,
        elevation: 0,
        iconTheme: IconThemeData(color: Colors.black87),
        brightness: Brightness.light,
      ),
      body: Container(
        padding: EdgeInsets.symmetric(
          horizontal: 24.0,
        ),
        child: _isLoading ? Container(
          child: Center(
            child: CircularProgressIndicator(),
          ),
        ) : Container(
          padding: EdgeInsets.symmetric(horizontal: 24.0),
          child: Column(
            children: [
              TextFormField(
                validator: (value) => value!.isEmpty ? "Enter Question" : null,
                decoration: InputDecoration(
                  hintText: "Question",
                ),
                onChanged: (value) {
                  question = value;
                },
              ),
              SizedBox(
                height: 6.0,
              ),
              TextFormField(
                validator: (value) => value!.isEmpty ? "Enter Option1" : null,
                decoration: InputDecoration(
                  hintText: "Option 1 (Correct Answer)",
                ),
                onChanged: (value) {
                  option1 = value;
                },
              ),
              SizedBox(
                height: 6.0,
              ),
              TextFormField(
                validator: (value) => value!.isEmpty ? "Enter Option2" : null,
                decoration: InputDecoration(
                  hintText: "Option 2",
                ),
                onChanged: (value) {
                  option2 = value;
                },
              ),
              SizedBox(
                height: 6.0,
              ),
              TextFormField(
                validator: (value) => value!.isEmpty ? "Enter Option3" : null,
                decoration: InputDecoration(
                  hintText: "Option 3",
                ),
                onChanged: (value) {
                  option3 = value;
                },
              ),
              SizedBox(
                height: 6.0,
              ),
              TextFormField(
                validator: (value) => value!.isEmpty ? "Enter Option4" : null,
                decoration: InputDecoration(
                  hintText: "Option 4",
                ),
                onChanged: (value) {
                  option4 = value;
                },
              ),
              Spacer(),
              Row(
                children: [
                  blueButton(
                    context: context,
                    label: "Submit",
                    buttonWidth: MediaQuery.of(context).size.width / 2 - 36,
                  ),
                  SizedBox(
                    width: 24.0,
                  ),
                  GestureDetector(
                    onTap: (){
                      setState(() {

                      });
                    },
                    child: blueButton(
                      context: context,
                      label: "Add Question",
                      buttonWidth: MediaQuery.of(context).size.width / 2 - 36,
                    ),
                  ),
                  SizedBox(
                    height: 60.0,
                  ),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}

将其更改为 : 而不是 =

Map<String, String> questionMap = {
        "question" : question,
        "option1" : option1,
        "option2" : option2,
        "option3" : option3,
        "option4" : option4,
      };

了解 Sets ListsMaps。 列表使用 [ ] 但是map和set都用花括号{}。 像列表一样的集合,但具有独特的项目,不包含重复项。

尝试将 questionMap 替换为:

  Map<String, String> questionMap = {
    "question" : question,
    "option1" : option1,
    "option2" : option2,
    "option3" : option3,
    "option4" : option4,
  };

您还需要为 _isLoading 变量提供默认值。 将其替换为 bool _isLoading = false; 应该可以。