Skip to main content

member-ordering

added in: 1.6.0
⚙️🛠
Free+

Enforces member ordering.

info

By default, this rule works only for classes. To lint other declarations, see the configuration below.

⚙️ Config

Set ignore-mixins (default is true) to exclude mixins from checks.

Set ignore-extensions (default is true) to exclude extensions from checks.

Set ignore-extension-types (default is true) to exclude extension types from checks.

Set ignore-enums (default is true) to exclude enums from checks.

Order configuration

Set order to configure the order for regular classes.

Default values

The default config for order is:

  • public-fields
  • private-fields
  • public-getters
  • private-getters
  • public-setters
  • private-setters
  • constructors
  • public-methods
  • private-methods

Set widgets-order to configure the order for widget classes.

Default values

The default config for widgets-order is (from Flutter style guide):

  • constructor
  • named-constructor
  • const-fields
  • static-methods
  • final-fields
  • var-fields
  • init-state-method
  • private-methods
  • overridden-public-methods
  • build-method

The value for the order or widgets-order entries should match the following pattern:

< (overridden | protected)- >< (private | public)- >< static- >< late- >< (var | final | const)- >< nullable- >< named- >< factory- > (fields | getters | getters-setters | setters | field-getter-setter | constructors | methods)

where values in the <> are optional, values in the () are interchangeable and the last part of the pattern which represents a class member type is required.

info

Not all of the modifiers are applicable in every case, for example, late-constructors is not expected as constructors in Dart cannot be late.

field-getter-setter is a synthetic group that ignores any applied modifier.

Additionally, to apply a specific order to a particular method, field or constructor, specify its name as follows:

  • build-method
  • dispose-method
  • init-state-method
  • my-custom-cool-thing-method
  • from-json-constructor
  • custom-field
  • hash-code-getter
note

Named entries use the singular form (e.g. -method), while general entries use the plural form (e.g. -methods).

Not specifying any modifiers also works:

  • fields
  • methods
  • setters
  • getters (or just getters-setters if you don't want to separate them)
  • field-getter-setter (groups fields, getters and setters with the same name)
  • constructors

The alphabetize option will enforce that members within the same category should be alphabetically sorted by name.

The alphabetize-by-type option will enforce that members within the same category should be alphabetically sorted by theirs type name.

note

Only one alphabetize option could be applied at the same time.

⚙️ Config Example

For all declarations:

analysis_options.yaml
dart_code_metrics:
rules:
- member-ordering:
ignore-mixins: false
ignore-extensions: false
ignore-extension-types: false
ignore-enums: false

With the default config:

analysis_options.yaml
dart_code_metrics:
rules:
- member-ordering

OR with a custom one:

analysis_options.yaml
dart_code_metrics:
rules:
- member-ordering:
alphabetize: true
order:
- public-late-final-fields
- private-late-final-fields
- public-nullable-fields
- private-nullable-fields
- named-constructors
- factory-constructors
- getters
- setters
- public-static-methods
- private-static-methods
- protected-methods

OR Flutter specific:

analysis_options.yaml
dart_code_metrics:
rules:
- member-ordering:
widgets-order:
- build-method
- init-state-method
- did-change-dependencies-method
- did-update-widget-method
- dispose-method

OR both custom and Flutter specific:

analysis_options.yaml
dart_code_metrics:
rules:
- member-ordering:
order:
- public-fields
- private-fields
- constructors
- close-method
- dispose-method
widgets-order:
- constructor
- build-method
- init-state-method
- did-change-dependencies-method
- did-update-widget-method
- dispose-method