use_ enums
Learn about the use_enums linter rule.
Use enums rather than classes that behave like enums.
Details
#Classes that look like enumerations should be declared as enums.
DO use enums where appropriate.
Candidates for enums are classes that:
- are concrete,
- are private or have only private generative constructors,
- have two or more static const fields with the same type as the class,
- have generative constructors that are only invoked at the top-level of the initialization expression of these static fields,
- do not define
hashCode,==,valuesorindex, - do not extend any class other than
Object, and - have no subclasses declared in the defining library.
To learn more about creating and using these enums, check out Declaring enhanced enums.
BAD:
class LogPriority { static const error = LogPriority._(1, 'Error'); static const warning = LogPriority._(2, 'Warning'); static const log = LogPriority._unknown('Log'); final String prefix; final int priority; const LogPriority._(this.priority, this.prefix); const LogPriority._unknown(String prefix) : this._(-1, prefix); } GOOD:
enum LogPriority { error(1, 'Error'), warning(2, 'Warning'), log.unknown('Log'); final String prefix; final int priority; const LogPriority(this.priority, this.prefix); const LogPriority.unknown(String prefix) : this(-1, prefix); }
Enable
# To enable the use_enums rule, add use_enums under linter > rules in your analysis_options.yaml file:
linter: rules: - use_enums If you're instead using the YAML map syntax to configure linter rules, add use_enums: true under linter > rules:
linter: rules: use_enums: true Unless stated otherwise, the documentation on this site reflects Dart 3.10.3. Report an issue.