Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何将InternalLinkedHashMap转换为Map?_Flutter_Dart_Casting_Firebase Cloud Messaging_Linkedhashmap - Fatal编程技术网

Flutter 如何将InternalLinkedHashMap转换为Map?

Flutter 如何将InternalLinkedHashMap转换为Map?,flutter,dart,casting,firebase-cloud-messaging,linkedhashmap,Flutter,Dart,Casting,Firebase Cloud Messaging,Linkedhashmap,我正在设置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) { _we

我正在设置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);
      }
  }
当函数达到 最终地图数据=消息['data']; 它过早地、无声地返回,没有任何警告

如果我改为跑步 最终动态数据=消息['data']; 它继续如预期的那样

检查消息类型会发现消息是InternalLinkedHashMap,不能强制转换为太映射

它说_InternalLinkedHashMap'不是“Map”类型的子类型

我该怎么做?
如果这个问题没有任何跟踪,我将来如何找到它?

您可以尝试将所有键映射到字符串。比如:

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

您可以尝试将所有键映射到字符串。比如:

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);
试试这个:

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


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

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


我明白为什么字符串可能是个问题,但为什么映射是个问题?难道任何HashMap都不能转换成Map吗?但你做的恰恰相反。您不是在转换为,而是在从地图转换。您正在获取一个键是动态的映射,并尝试将其内容放入一个只接受字符串键的映射中。明白了吗?在上面的例子中,是的。但如果我将数据更改为Map,那么我将尝试将消息映射转换为新变量dataMap。我觉得“弦”可以被转换成“动态”的形式,效果正好相反。这是有效的:映射x={a:10,b:true};映射y=x;如果你有一些代码不起作用,给我看看。好的,这就是我之前的评论想要表达的。如果您使用我的代码并替换数据类型来映射,它仍然会失败。我明白为什么字符串可能是一个问题,但为什么映射是一个问题?难道任何HashMap都不能转换成Map吗?但你做的恰恰相反。您不是在转换为,而是在从地图转换。您正在获取一个键是动态的映射,并尝试将其内容放入一个只接受字符串键的映射中。明白了吗?在上面的例子中,是的。但如果我将数据更改为Map,那么我将尝试将消息映射转换为新变量dataMap。我觉得“弦”可以被转换成“动态”的形式,效果正好相反。这是有效的:映射x={a:10,b:true};映射y=x;如果你有一些代码不起作用,给我看看。好的,这就是我之前的评论想要表达的。如果您使用我的代码并替换数据类型以映射,它仍然会失败。谢谢您的正确答案,我浪费了小时。为了得到这个答案。谢谢你的正确答案,我浪费了很多时间。为了得到这个答案。你能不能也建议一下如何得到这份名单