如何将 InternalLinkedHashMap 转换为 Map<dynamic, dynamic>?

Joe*_*röm 1 casting linkedhashmap dart flutter firebase-cloud-messaging

我设置了 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);
      }
  }
Run Code Online (Sandbox Code Playgroud)

当函数到达时,
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>'

我该怎么做呢?
如果这个问题没有踪迹,我以后如何才能找到它?

Joe*_*röm 13

我发现解决它的最好方法是使用 Map.from() 并将变量类型指定为 Map:

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

Run Code Online (Sandbox Code Playgroud)


Mar*_*rcG 8

尝试这个:

final Map<String,dynamic> data = Map.castFrom<dynamic, dynamic, String, dynamic>(message['data']);
Run Code Online (Sandbox Code Playgroud)

当然,只有当所有键都是字符串时,才应该这样做。

如果您想了解发生了什么,请参阅以下内容:

var x = {};
print(x.runtimeType);
Map<String, dynamic> y = Map.castFrom<dynamic, dynamic, String, dynamic>(x);
print(y.runtimeType);
Run Code Online (Sandbox Code Playgroud)