打破异常'_InternalLinkedHashMap '不是'Map'类型的子类型 “

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打破异常'_InternalLinkedHashMap '不是'Map'类型的子类型 “相关的知识,希望对你有一定的参考价值。

我今天跑了升级...

我现在在v0.2.11上,我在这个函数中遇到一个奇怪的运行时错误:

Future apiCall([Map params = const {}]) async {
  loading = true;
  Map stringParams = {};
  params.forEach((k,v)=>stringParams[k.toString()] = v.toString());
  Uri url = new Uri.https(apiDomain, apiPath, stringParams);
  print(url);
  var result = await http.post(
    url,
    body: {'apikey': apiKey}
  );
  loading = false;
  print(result.body);
  return json.decode(result.body);
}

我正在调用没有任何参数的函数,我得到了子类型错误。

此代码适用于dartpad。

有谁知道可能会发生什么?

答案

Uri.https的构造函数需要一个运行时类型为Map<String, String>的Map。当你创建没有任何类型注释的stringParams时,你实际上是在创建一个Map<dynamic, dynamic>。为Dart 2创建这个的正确方法是

Map<String, String> stringParams = {};
// or
var stringParams = <String, String>{};

之所以这样做是因为在Dart 1中,即使在强模式下,dynamic也很模糊,并且像Objectnull一样 - 这意味着动态类型可以分配给任何东西。在Dart 2中,dynamic就像Object一样,除了你可以调用方法或访问它上面的属性而没有向下转换。

另一答案

我用过这个

    if(json["key"]!= null){
       this.active_guests = json["key"].cast<String, int>();
     }

以上是关于打破异常'_InternalLinkedHashMap '不是'Map'类型的子类型 “的主要内容,如果未能解决你的问题,请参考以下文章

VS 17 打破所有异常

我怎样才能让 QtCreator 打破异常?

如何打破 Silverlight 中未处理的异常

打破pydev中的异常

需要 C# 打破 Selenium 第一次机会异常

使用 Selenium 在 Chrome 中打破异常