参数类型“字符串?”不能分配给参数类型“字符串”

时间:2021-03-08 04:28:32

标签: flutter

当我将 flutter 升级到 2.0.1 时,显示此错误:

The argument type 'String?' can't be assigned to the parameter type 'String'.

这是我的代码:

  enum SubStatus {
  SUB,
  UNSUB,
}

extension ResponseStatusExtension on SubStatus{
  static const statusCodes = {
    SubStatus.SUB: "sub",
    SubStatus.UNSUB: "unsub",
  };

  String? get statusCode => statusCodes[this];
}

这是如何使用它:

String url = "/post/sub/source/" + subStatus.statusCode + "/" + channelId;

这是错误界面:

enter image description here

我该怎么做才能修复它?我试图返回 String 但在枚举代码中告诉我应该返回 String?:

enter image description here

我该怎么办?

3 个答案:

答案 0 :(得分:2)

statusCode 的返回类型更改为 String 并提供默认值。

String get statusCode => statusCodes[this] ?? '';

访问地图时,如果地图中不存在键,您可能会得到 null 返回值。只需提供一个默认值即可编译此代码。除非您向枚举添加某些内容而不向地图添加值,否则永远不应使用该默认值。

答案 1 :(得分:1)

编辑: 在@Christopher Moore 发表评论后,我意识到了我的错误。所以,我将在这里直接使用他的解决方案,因为它是正确的。 这是因为 Dart 新的 null-safety 特性。

您需要在代码中进行以下更改才能生效:

String get statusCode => statusCodes[this] ?? '';

有了新的空安全规则,后面的data-type? x,数据类型后跟一个问号,表示值x可以为空。但是,如果没有“?”,则表示 data-type x 不能为空。

所以,基本上 StringString? 是两种不同的数据类型。这就是您收到错误的原因。

您可以了解更多here

答案 2 :(得分:0)

重启分析服务器

添加! 像这样 subStatus.statusCode!