Flutter 参数类型';字符串?';can';不能分配给参数类型';字符串';
当我将颤振升级到2.0.1时,显示此错误:Flutter 参数类型';字符串?';can';不能分配给参数类型';字符串';,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: "
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];
}
以下是如何使用它:
字符串url=“/post/sub/source/”+subStatus.statusCode+“/”+channelId
这是错误用户界面:
我该怎么做才能修好它?我试图返回字符串
,但在枚举代码中告诉我应该返回字符串?
:
我该怎么办?编辑:
在@Christopher Moore发表评论后,我意识到我的错误。所以,我将直接在这里使用他的解决方案,因为它是正确的。
这是因为Dart的新零安全特性
您需要在代码中进行以下更改,它将起作用:
String get statusCode=>statusCodes[this]??“”;
使用新的空安全规则,以下数据类型?x
,数据类型后面有一个问号,表示值x
可以为空。但是,如果没有“?”,则表示数据类型x
,它不能为空
因此,基本上String
和String?
是两种不同的数据类型。这就是为什么会出现错误
您可以了解更多信息。重新启动分析服务器 添加
代码>
这样地
subStatus.statusCode
将statusCode
的返回类型更改为String
,并提供默认值
String get statusCode=>statusCodes[this]??“”;
访问映射时,如果映射中不存在键,则有可能会得到null
返回值。只需提供一个默认值,即可编译此代码。除非您向枚举中添加了一些内容,而没有向映射中添加值,否则不应使用该默认值。虽然此答案的前提是正确的,但OP有一个可为空的返回类型是有原因的。在评估statusCodes
映射时,编译器可能会返回null
。如果希望返回不可为null的字符串
,则需要执行null检查并提供默认值。因此,您提供的代码将不会在null-safety下编译。但在这一行,请告诉我返回字符串?=><代码>字符串获取状态代码=>状态代码[此]代码>@Preet Shah是的,我同意@Christophermore。在你们的评论之后,我搜索了一下,找到了这篇帮助我理解枚举扩展的文章。我将进行必要的更改。为什么有必要重新启动分析服务器?可能分析仪中的某些更改在null safetyPerhaps之后出现了一些问题,但如果其他地方存在明显问题,可能会导致静态分析按预期显示错误,则不太可能出现这种情况。您可以尝试强模式,它将更频繁地显示错误