【问题标题】:How to handle implicit cast warnings of strong mode analysis?如何处理强模式分析的隐式强制转换警告?
【发布时间】:2016-03-23 18:43:21
【问题描述】:

我在 Web 应用程序中经常做的事情是从服务器请求资源并将其作为 dart 中的 Map 处理。

import 'dart:convert';

const String sampleJSON = '''
{
    "member": {
        "meaningOfLife": 42
    }
}
''';

Map<String, dynamic> getResource() {
  // do some magic
  return JSON.decode(sampleJSON);
}

我假设 JSON 解码 Map 中的所有键都是字符串,但显然我不知道值的类型。在检查模式下,这工作得相当好。

在强模式下对上面的代码分析会告诉我:Unsound implicit cast from dynamic to Map&lt;String, dynamic&gt;

问题:

什么是处理此类强制转换警告的好策略?

有问题的选项 1:

Map getResource() {
  // do some magic
  return JSON.decode(sampleJSON);
}

稍后这可能是个问题:Iterable&lt;String&gt; keys = getResource().keys 会发出警告。

有问题的选项 2:

Map<String, dynamic> getResource() {
  // do some magic
  return new Map<String, dynamic>.from(JSON.decode(sampleJSON));
}

它不会大大降低性能吗?我仍然会收到Map&lt;String, dynamic&gt; meaning = getResource()["member"];的警告

感谢您的建议。

【问题讨论】:

    标签: dart


    【解决方案1】:

    如果你知道类型,那么就明确说明

    return JSON.decode(sampleJSON) as Map<String,dynamic>;
    

    Flutter 团队禁止使用 as,因为它引入了运行时检查并会影响性能。如果相关,则取决于您的要求。

    或者,您可以让警告静音(可能还不适用于您的 Dart 版本)

    // ignore: STRONG_MODE_DOWN_CAST_COMPOSITE
    return JSON.decode(sampleJSON);
    

    另见Suppress hint about use of protected member

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-06
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多