Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在dart中使用枚举时是否可以返回默认值_Dart - Fatal编程技术网

在dart中使用枚举时是否可以返回默认值

在dart中使用枚举时是否可以返回默认值,dart,Dart,现在我在dart中定义一个枚举,如下所示: enum LoginType { PHONE, WECHAT } extension ResponseStatusExtension on LoginType{ static const statusCodes = { LoginType.PHONE: 1, LoginType.WECHAT: 2, }; int get statusCode => statusCodes[this]; } int

现在我在dart中定义一个枚举,如下所示:

enum LoginType {
  PHONE,
  WECHAT
}

extension ResponseStatusExtension on LoginType{
  static const statusCodes = {
    LoginType.PHONE: 1,
    LoginType.WECHAT: 2,
  };


  int get statusCode => statusCodes[this];
}
  int get statusCode => statusCodes[this]!;
我正在升级到Flatter 2.0.1并支持空安全,现在它告诉我:

A value of type 'int?' can't be returned from the function 'statusCode' because it has a return type of 'int'.

但是我想让它返回一个默认的NOTNULL值以使代码rubust,并且在使用这个枚举时不必处理null。我应该怎么做才能使它返回默认值?有可能吗?

错误的原因是
映射上的
[]
运算符可以为空,因为它具有以下行为:

给定的
键的值
,或者
空值
(如果键不在映射中)

如果您确定您的
映射
始终包含请求的
,则可以添加
使用
[]
运算符后,如下所示:

enum LoginType {
  PHONE,
  WECHAT
}

extension ResponseStatusExtension on LoginType{
  static const statusCodes = {
    LoginType.PHONE: 1,
    LoginType.WECHAT: 2,
  };


  int get statusCode => statusCodes[this];
}
  int get statusCode => statusCodes[this]!;
这将在运行时进行空检查,如果返回
null
值,则检查将失败。但是,如果您确定
映射
从未返回
null
,则这应该不是问题

奖金小费 如果希望能够在
映射
不包含给定的
键的情况下从
映射
返回默认值,则可以将以下扩展名添加到
映射

extension MapDefaultValue<K, V> on Map<K, V> {
  V get(K k, V defaultValue) => containsKey(k) ? this[k] as V : defaultValue;
}
地图上的扩展名MapDefaultValue{ V get(K,V defaultValue)=>containsKey(K)?此[K]作为V:defaultValue; }

请注意,
defaultValue
必须是
Map
key
的兼容类型,因此如果
Map
中不允许
null
作为
defaultValue
值,则不能使用
null
作为
Map
中的
映射上的
运算符可为空,因为它具有以下行为:

给定的
键的值
,或者
空值
(如果键不在映射中)

如果您确定您的
映射
始终包含请求的
,则可以添加
使用
[]
运算符后,如下所示:

enum LoginType {
  PHONE,
  WECHAT
}

extension ResponseStatusExtension on LoginType{
  static const statusCodes = {
    LoginType.PHONE: 1,
    LoginType.WECHAT: 2,
  };


  int get statusCode => statusCodes[this];
}
  int get statusCode => statusCodes[this]!;
这将在运行时进行空检查,如果返回
null
值,则检查将失败。但是,如果您确定
映射
从未返回
null
,则这应该不是问题

奖金小费 如果希望能够在
映射
不包含给定的
键的情况下从
映射
返回默认值,则可以将以下扩展名添加到
映射

extension MapDefaultValue<K, V> on Map<K, V> {
  V get(K k, V defaultValue) => containsKey(k) ? this[k] as V : defaultValue;
}
地图上的扩展名MapDefaultValue{ V get(K,V defaultValue)=>containsKey(K)?此[K]作为V:defaultValue; }
请注意,
defaultValue
必须是
Map
key
的兼容类型,因此如果
Map
中不允许
null
作为
defaultValue
使用
null