Skip to content
Blog

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.

References & Further Reading