Created
January 8, 2020 14:00
-
-
Save micimize/39f6d59492b3c6792e607a476fb131a6 to your computer and use it in GitHub Desktop.
type ideas in dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// Extensible enum that has `instance.asKnown` for good switch tooling | |
enum KnownReleaseType { | |
ALPHA, | |
BETA, | |
GAMMA, | |
} | |
class ReleaseType { | |
ReleaseType(String value) : value = _parseValue(value); | |
final Object value; | |
static const ALPHA = KnownReleaseType.ALPHA; | |
static const BETA = KnownReleaseType.BETA; | |
static const GAMMA = KnownReleaseType.GAMMA; | |
KnownReleaseType get asKnown => value is KnownReleaseType ? value : null; | |
static Object _parseValue(String value) { | |
switch (value) { | |
case 'ALPHA': | |
return KnownReleaseType.ALPHA; | |
case 'BETA': | |
return KnownReleaseType.BETA; | |
case 'GAMMA': | |
return KnownReleaseType.GAMMA; | |
} | |
return value; | |
} | |
@override | |
int get hashCode => value.hashCode; | |
@override | |
bool operator ==(Object o) => o is ReleaseType && o.value == value; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I bet enum + extension can be hacked into variants