‘тип ‘_InternalLinkedHashMap’ не является подтипом типа ‘Map’ ‘ это ошибка, которую я получаю

#firebase #flutter #google-cloud-firestore

#firebase #flutter #google-облако-firestore

Вопрос:

Пытаюсь загрузить данные формы в облачное хранилище Firestore. Я пробовал разные комбинации карт и хэш-карт, но не могу заставить это работать. Та же программа способна беспрепятственно считывать данные из хранилища, но не может записывать. Была бы весьма признательна за помощь.

Вот код:

 MaterialButton(child: Row(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: [
                            Icon(Icons.add_circle),
                            Text('Add item'),
                          ]),
                      onPressed: () => {
                        setState(() {
                          if (_formKey.currentState.validate()) {
                            _formKey.currentState.save();
                            HashMap<dynamic, dynamic> listItem =
                                new HashMap<dynamic, dynamic>();
                            listItem["Description"] = _itemName;
                            listItem["Due"] = _due;
                            listItem["ID"] = _id;
                            listItem["Priority"] = _prioritySwitch;
                            listItem["Progress"] = _progress;
                            listItem["Reminder"] = _reminderSwitch;
                            listItem["SliderSwitch"] = _sliderSwitch;
                            listItem["Start"] = _start;

                            Firestore.instance
                                .collection("Task Lists")
                                .add(listItem.);
                          }
                          ;
                        }),
                      },
                    ),
                  ))
            ],
          ),
        ),
  

Комментарии:

1. Вы пробовали использовать Map<String,Dynamic> ListItem = new Map<String, dynamic>();

Ответ №1:

Просто измените тип вашей хэш-карты на Map:

 MaterialButton(child: Row(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: [
                            Icon(Icons.add_circle),
                            Text('Add item'),
                          ]),
                      onPressed: () => {
                        setState(() {
                          if (_formKey.currentState.validate()) {
                            _formKey.currentState.save();
                            Map<String, dynamic> listItem =
                                new Map<String, dynamic>();
                            listItem["Description"] = _itemName;
                            listItem["Due"] = _due;
                            listItem["ID"] = _id;
                            listItem["Priority"] = _prioritySwitch;
                            listItem["Progress"] = _progress;
                            listItem["Reminder"] = _reminderSwitch;
                            listItem["SliderSwitch"] = _sliderSwitch;
                            listItem["Start"] = _start;

                            Firestore.instance
                                .collection("Task Lists")
                                .add(listItem.);
                          }
                          ;
                        }),
                      },
                    ),
                  ))
            ],
          ),
        ),
  

Ответ №2:

Попробуйте вместо этого использовать формат JSON, и вы сохраните явное создание Map:

   Firestore.instance.collection("Task Lists").add(<String, dynamic>
  {
    "Description" : _itemName,
    "Due" : _due,
    "ID" : _id,
    "Priority" : _prioritySwitch,
    "Progress" : _progress,
    "Reminder" : _reminderSwitch,
    "SliderSwitch" : _sliderSwitch,
    "Start" : _start,
  });