破坏异常 '_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<String, String>
的 Map。当您创建没有任何类型注释的stringParams
时,您实际上是在创建一个Map<dynamic, dynamic>
。为 Dart 2 创建它的正确方法是
Map<String, String> stringParams = ;
// or
var stringParams = <String, String>;
这曾经起作用的原因是,在 Dart 1 中,即使在强模式下,dynamic
也是模糊的,并且表现得像 Object
和 null
- 这意味着动态类型可以分配给任何东西。在 Dart 2 中,dynamic
的行为与 Object
类似,不同之处在于您可以在其上调用方法或访问属性而无需向下转换。
【讨论】:
如果我的对象是 Map以上是关于破坏异常 '_InternalLinkedHashMap<dynamic, dynamic>' 不是类型 'Map<String, String>' 的子类型的主要内容,如果未能解决你的问题,请参考以下文章
Flask 中的 API——返回 JSON 但 HTML 异常破坏了我的 JSON 客户端
电脑蓝屏显示SYSTEM_ SERVICE_ EXCEPTION啥意思?
看起来 is_nothrow_constructible_v() 在 MSVC 中被破坏了,我错了吗?