未处理的异常:类型'_InternalLinkedHashMap <dynamic,dynamic>'不是'Map <String,dynamic>'类型的子类型吗?

时间:2020-05-05 13:18:19

标签: android firebase flutter dart google-cloud-firestore

我正在尝试通过Firebase存储将图像上传到Firebase,然后在Firestore中创建一个文档,其中包含上述上传图像的网址。为此,我使用此功能

   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 个答案:

答案 0 :(得分:3)

尝试一下

doc.reference.setData(Map<String, dynamic>.from(map));

答案 1 :(得分:0)

正如乔斯泰夫(Josteve)回答的那样,问题似乎是因为映射类型只需要在运行时是动态的String(动态),其他任何事情都会引发类似的类型错误,这可能与插件处理json请求的方式有关。只需使用 Map.from(yourMap)