破坏异常 '_InternalLinkedHashMap<dynamic, dynamic>' 不是类型 'Map<String, String>' 的子类型

Posted

技术标签:

【中文标题】破坏异常 \'_InternalLinkedHashMap<dynamic, dynamic>\' 不是类型 \'Map<String, String>\' 的子类型【英文标题】:breaking exception '_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, String>'破坏异常 '_InternalLinkedHashMap<dynamic, dynamic>' 不是类型 'Map<String, String>' 的子类型 【发布时间】:2018-09-24 05:41:00 【问题描述】:

我今天进行了颤振升级...

我现在使用的是 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。

有人知道会发生什么吗?

【问题讨论】:

这本身并不是一个答案,但this page 可能有助于您了解 Dart 2.0 中的新类型安全功能。 【参考方案1】:

您可以像这样发送嵌套的 JSON 参数:

    使用json.encode将其转换为字符串。

    在标头中发送“Content-Type:application/json”。

var uri = "$Config.baseURL/your/endpoint";
var headers = 
  'Content-Type': 'application/json'
;
final response = await http.post(
  uri,
  body: json.encode(data),
  headers: headers
);

【讨论】:

【参考方案2】:

我用过这个

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

【讨论】:

嵌套地图怎么样:'(【参考方案3】:

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

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

这曾经起作用的原因是,在 Dart 1 中,即使在强模式下,dynamic 也是模糊的,并且表现得像 Objectnull - 这意味着动态类型可以分配给任何东西。在 Dart 2 中,dynamic 的行为与 Object 类似,不同之处在于您可以在其上调用方法或访问属性而无需向下转换。

【讨论】:

如果我的对象是 Map 类型会发生什么。在这种情况下如何提出发布请求?它不断给出上述错误。

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

Flask 中的 API——返回 JSON 但 HTML 异常破坏了我的 JSON 客户端

在混合 C 和 C++ 代码编程中捕获异常后对象不会被破坏

电脑蓝屏显示SYSTEM_ SERVICE_ EXCEPTION啥意思?

看起来 is_nothrow_constructible_v() 在 MSVC 中被破坏了,我错了吗?

单例模式_反射破坏单例模式_枚举类_枚举类实现单例_枚举类解决单例模式破坏

类数据成员的破坏顺序?