【问题标题】:Unhandled Exception: type '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'?未处理的异常:类型“_InternalLinkedHashMap<dynamic, dynamic>”不是“Map<String, dynamic>”类型的子类型?
【发布时间】:2020-08-20 04:07:41
【问题描述】:

我正在尝试通过 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&lt;String,String&gt; map = new Map() ,但它仍然说它不是 _InternalLinkedHashMap 的子类型。我在哪里出错了?我也尝试使用Map&lt;dynamic,dynamic&gt;Map&lt;String,dynamic,但无济于事。

【问题讨论】:

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


    【解决方案1】:

    试试这个

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

    【讨论】:

      【解决方案2】:

      正如 Josteve 所回答的,问题似乎是因为地图类型只需要是字符串,在运行时是动态的,其他任何东西都会引发类似的类型错误,可能与插件处理 json 请求的方式有关.只需使用 Map.from(yourMap)

      【讨论】:

        猜你喜欢
        • 2021-02-11
        • 2021-07-11
        • 2018-12-14
        • 2021-01-17
        • 2019-08-07
        • 2019-04-03
        • 2020-07-14
        • 1970-01-01
        相关资源
        最近更新 更多