如何将 InternalLinkedHashMap 转换为 Map<dynamic, dynamic>?
How do I cast InternalLinkedHashMap as Map<dynamic, dynamic>?
我正在设置 firebase 云消息传递,在我的 onResume()
回调中我有以下内容:
Future<void> onResume(Map<String, dynamic> message) async {
final Map<String,dynamic> data = message['data'];
final String url = data['url'];
if (url != null) {
_webViewController?.loadUrl(url);
}
}
当函数到达
final Map<String,dynamic> data = message['data'];
它 returns 过早地悄无声息地没有警告。
如果我改为运行
final dynamic data = message['data'];
它按预期继续。
检查 message
类型发现 message
是 InternalLinkedHashMap
并且不能转换为 Map<String, dynamic>
.
它说 _InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'
。
我该怎么做?
如果没有踪迹,以后如何找到这个问题?
您可以尝试将所有键映射到字符串。类似于:
final Map<String,dynamic> data = message.map((key, value) => MapEntry(key.toString(), value));
试试这个:
final Map<String,dynamic> data = Map.castFrom<dynamic, dynamic, String, dynamic>(message['data']);
当然,如果您的所有键都是真正的字符串,您应该只这样做。
如果您想了解发生了什么,请参阅:
var x = {};
print(x.runtimeType);
Map<String, dynamic> y = Map.castFrom<dynamic, dynamic, String, dynamic>(x);
print(y.runtimeType);
我发现解决它的最佳方法是使用 Map.from() 并将变量类型指定为 Map:
final Map<String, dynamic> data = Map.from(message['data']);
我正在设置 firebase 云消息传递,在我的 onResume()
回调中我有以下内容:
Future<void> onResume(Map<String, dynamic> message) async {
final Map<String,dynamic> data = message['data'];
final String url = data['url'];
if (url != null) {
_webViewController?.loadUrl(url);
}
}
当函数到达
final Map<String,dynamic> data = message['data'];
它 returns 过早地悄无声息地没有警告。
如果我改为运行
final dynamic data = message['data'];
它按预期继续。
检查 message
类型发现 message
是 InternalLinkedHashMap
并且不能转换为 Map<String, dynamic>
.
它说 _InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'
。
我该怎么做?
如果没有踪迹,以后如何找到这个问题?
您可以尝试将所有键映射到字符串。类似于:
final Map<String,dynamic> data = message.map((key, value) => MapEntry(key.toString(), value));
试试这个:
final Map<String,dynamic> data = Map.castFrom<dynamic, dynamic, String, dynamic>(message['data']);
当然,如果您的所有键都是真正的字符串,您应该只这样做。
如果您想了解发生了什么,请参阅:
var x = {};
print(x.runtimeType);
Map<String, dynamic> y = Map.castFrom<dynamic, dynamic, String, dynamic>(x);
print(y.runtimeType);
我发现解决它的最佳方法是使用 Map.from() 并将变量类型指定为 Map:
final Map<String, dynamic> data = Map.from(message['data']);