当我将 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;
这是错误界面:
我该怎么做才能修复它?我试图返回 String
但在枚举代码中告诉我应该返回 String?
:
我该怎么办?
答案 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
不能为空。
所以,基本上 String
和 String?
是两种不同的数据类型。这就是您收到错误的原因。
您可以了解更多here。
答案 2 :(得分:0)
重启分析服务器
添加!
像这样
subStatus.statusCode!