加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

dart – 破坏异常’_InternalLinkedHashMap’不是’Map’类型的

发布时间:2020-12-14 14:52:15 所属栏目:百科 来源:网络整理
导读:我今天跑了升级… 我现在在v0.2.11上,我在这个函数中遇到一个奇怪的运行时错误: Future apiCall([Map params = const {}]) async { loading = true; Map stringParams = {}; params.forEach((k,v)=stringParams[k.toString()] = v.toString()); Uri url = n
我今天跑了升级…

我现在在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,其运行时类型为Map< String,String>.当您创建没有任何类型注释的stringParams时,您实际上是在创建Map< dynamic,dynamic>.为Dart 2创建这个的正确方法是

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

之前工作的原因是在Dart 1中,即使在强模式下,动态也是模糊的,并且像Object和null一样 – 意味着动态类型可以分配给任何东西.在Dart 2中,动态行为就像对象一样,除了你可以在没有向下转换的情况下调用方法或访问属性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读