有什么方法可以创建以枚举为键的Map来确保operator[]不为空吗?

问题描述 投票:0回答:2
enum SomeEnum { first, second }

Map<SomeEnum, String(or any type)> someMap = {
  SomeEnum.first: 'first',
  SomeEnum.second: 'second',
};

String variable = someMap[SomeEnum.first]; <- nullable

在上面的代码中,

someMap[SomeEnum.{anything}]
肯定不能为空,因为它有所有可能的 SomeEnum 作为键。

但这会导致错误,因为

someMap[SomeEnum.first]
可以为空,无法分配给类型
String

我如何告诉flutter这有所有可能的枚举值,并且在不使用

!
的情况下100%不能为空(我不想使用它,因为我经常使用这个地图,这有点烦人)

flutter dart
2个回答
4
投票

如果那是您的文字枚举和映射,则您不需要该映射。使用

SomeEnum.first.name
获取字符串。

如果字符串不同。我会使用不同的方法。当使用 Dart 2.17.0 或更高版本时,您可以使用增强的枚举和简单的向枚举添加方法,例如这样

enum SomeEnum { first, second;
  String getString() {
    switch (this) {
      case SomeEnum.first: return "first string";
      case SomeEnum.second: return "second string";
    }
  }

  int toInt() {
    switch (this) {
      case SomeEnum.first: return 1;
      case SomeEnum.second: return 2;
    }
  }
}

然后在任何需要的地方使用

Some.first.getString()
。或者
Some.first.toInt()
获取整数

对于较低的 Dart 版本,您可以编写扩展并以相同的方式使用它:

extension SomeEnumExtension on SomeEnum {
  String getString() {
    switch (this) {
      case SomeEnum.first: return "first string";
      case SomeEnum.second: return "second string";
    }
  }
}

0
投票

Colors
类相同,而不是枚举:

abstract final class Colors {
  static const Color transparent = Color(0x00000000);
}
© www.soinside.com 2019 - 2024. All rights reserved.