首页 > 解决方案 > 在飞镖中使用枚举时是否可以返回默认值

问题描述

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

enum LoginType {
  PHONE,
  WECHAT
}

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


  int get statusCode => statusCodes[this];
}

我正在升级到颤振 2.0.1 并支持空安全,现在它告诉我:

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

但我想让它返回一个默认的非空值以使代码变得可靠,并且在使用此枚举时不必处理空值。我应该怎么做才能让它返回一个默认值?可能吗?

标签: dart

解决方案


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

给定的值key,或者null如果键不在地图中

https://api.dart.dev/stable/2.12.2/dart-core/Map/operator_get.html

如果您确定Map始终包含请求,则可以在使用运算符后key添加一个,如下所示:![]

  int get statusCode => statusCodes[this]!;

这将在运行时进行空检查,如果null返回值则失败。但是,如果您确定null永远不会从Map.

奖金提示

如果您希望能够在 a不包含给定Map的情况下从 a 返回默认值,您可以将以下扩展名添加到:MapkeyMap

extension MapDefaultValue<K, V> on Map<K, V> {
  V get(K k, V defaultValue) => containsKey(k) ? this[k] as V : defaultValue;
}

请注意,它defaultValue必须是keyin 的兼容类型,Map因此您不能使用nullas defaultValueif nullare not allowed as valuein Map


推荐阅读