如何将 InternalLinkedHashMap 转换为 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'];
时,它会过早且无提示地返回,而不会发出警告。

如果我改为运行
final dynamic data = message['data'];
它会按预期继续。

检查message类型会发现messageInternalLinkedHashMap,不能投得太Map<String, dynamic>

它说_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'.

我该怎么做?
如果此问题没有痕迹,我将来如何找到此问题?

我发现解决这个问题的最佳方法是使用 Map.from() 并将变量类型指定为 Map:

final Map<String, dynamic> data = Map.from(message['data']);

试试这个:

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);

您可以尝试将所有键映射到字符串。像这样:

final Map<String,dynamic> data = message.map((key, value) => MapEntry(key.toString(), value));

相关内容

  • 没有找到相关文章

最新更新