避免对“动态”目标进行方法调用或属性访问

Ton*_*omy 7 dart flutter

在下面的示例中,从 Firebase 取消映射 json。Map<String, dynamic>无论我在哪里获取数据,orderId都可以。但凡是我在另一张地图中放置地图的地方 - 就像address- 它都会给我一个警告

“避免对“动态”目标进行方法调用或属性访问。”

这并不重要,但我在谷歌上发现它会导致生产力下降。有人可以分享为什么会这样以及如何避免它

Order.fromMap(Map<String, dynamic> data) {
    orderId = data['orderId'] as int;
    address = data['location']['address'].toString();
  }
Run Code Online (Sandbox Code Playgroud)

h8m*_*oss 8

首先,我认为值得注意的是,所提到的大小和运行时间损失通常不是一个问题,它们可能是不明显的。

对此最好的解决办法就是显式地转换你的值:

address = (data['location'] as Map<String, dynamic>)['address'].toString();
Run Code Online (Sandbox Code Playgroud)

我不确定以上内容是否足够,或者您是否还必须进行转换address

address = ((data['location'] as Map<String, dynamic>)['address'] as Object).toString()
Run Code Online (Sandbox Code Playgroud)

性能/大小问题来自应用程序确定是否data['location']是地图所需的时间。通过添加as,您是在告诉它不要检查并且不要担心。