Необработанное исключение: введите _InternalLinkedHashMap 'не является подтипом типа' Карта '? - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь загрузить изображения в firebase через хранилище firebase, а затем создаю документ в firestore, содержащий URL-адреса указанных загруженных изображений. Для этого я использую эту функцию

   void uploadImageAndCreatePage(List<File> imageFile) async {
    var storage = FirebaseStorage.instance;

    for(int j = 0; j<imageFile.length; j++) {
      StorageReference ref = storage.ref().child("photo"+Random().nextInt(3413555).toString()+j.toString());

      StorageUploadTask uploadTask = ref.putFile(imageFile[j]);

    var url = "";

    var dowurl = await (await uploadTask.onComplete).ref.getDownloadURL();

    url = dowurl.toString();

    downUrl.add(url);
    print("url is:" +downUrl.toString());

  }

    for(int i = 0; i<imageFile.length;i++){
      if(i == 0){
        map['ImgUrl'] = downUrl[0];
      }
     map['Img$i'] = downUrl[i+1 < downUrl.length?i+1:i];

    }

  var doc = await _reference.collection('Products').document("${titleController.text}").get();
    doc.reference.setData(map);
    doc.reference.collection('Reviews').document("DummyRev").setData({
      "name":"null",

    });

    print("done");
  }

Код работает нормально, пока не дойдет до той части, где я установил данные с помощью documentreference.setData, который принимает значение карты. У меня эта карта определена как Map<String,String> map = new Map(), но по-прежнему написано, что это не подтип _InternalLinkedHashMap .. где я ошибаюсь? Я также пытался использовать Map<dynamic,dynamic> и Map<String,dynamic, но безрезультатно.

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Попробуйте это

doc.reference.setData(Map<String, dynamic>.from(map));
0 голосов
/ 05 мая 2020

Как ответил Josteve, проблема, похоже, заключается в том, что тип карты просто должен быть String, Dynami c во время выполнения, что-либо еще вызовет такую ​​ошибку типа, вероятно, что-то связано с тем, как плагин обрабатывает запрос json. Просто примените его с помощью Map.from (yourMap)

...