Enum Constructors in Dart 3.13: The unnecessary_const_in_enum_constructor Rule
Enhanced enums in Dart, removing redundant const keywords in enum constructor calls, and keeping enum definitions clean.
Published on • October 24, 2026
AI Assistant

Dart enhanced enums allow enums to declare custom fields, methods, interfaces, and constructors. Because enum values are implicitly compile-time constants, adding explicit const keywords to enum constructors or value initializers introduces unnecessary boilerplate.
The unnecessary_const_in_enum_constructor lint rule identifies and removes redundant const modifiers in enum declarations.
Code Example: Non-Idiomatic vs Idiomatic Enums
Non-Idiomatic (Triggers LINT)
Writing explicit const keywords inside enum value arguments or constructor headers:
// LINT: Redundant const in enum constructors and values
enum UserRole {
admin(const 'Administrator', const 100),
member(const 'Member', const 10),
guest(const 'Guest', const 0);
// Redundant const modifier
const UserRole(this.label, this.permissionLevel);
final String label;
final int permissionLevel;
}
Idiomatic Dart 3.13
Since all enum entry arguments and constructors are implicitly const by language specification, omitting const produces much cleaner code:
// Idiomatic Dart Enhanced Enum
enum UserRole {
admin('Administrator', 100),
member('Member', 10),
guest('Guest', 0);
UserRole(this.label, this.permissionLevel);
final String label;
final int permissionLevel;
bool get isAdmin => this == UserRole.admin;
}
Adding Rule to Analysis Options
To enforce clean enum definitions across your project:
# analysis_options.yaml
linter:
rules:
- unnecessary_const_in_enum_constructor
Run dart fix --apply to clean up enum declarations automatically throughout your Flutter codebase.
Summary
The unnecessary_const_in_enum_constructor rule ensures enhanced enums remain concise and easy to maintain.