Skip to main content

member-ordering

added in: 1.8.0
style
⚙️

Enforces extended member ordering.

Order for regular classes can be confugured by order. To configure widget class members order use widgets-order.

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 | 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.

You can also apply order to a separate method by listing its name like:

  • build-method
  • dispose-method
  • init-state-method
  • my-castom-cool-thing-method
info

Not all of the pattern parts are applicable for every case, for example, late-constructors are not expected, since they are not supported by the language itself.

For example, the value for order or widgets-order may be an array consisting of the following strings:

  • 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
  • etc.

You can simply configure the rule to sort only by a type:

  • fields
  • methods
  • setters
  • getters (or just getters-setters if you don't want to separate them)
  • constructors

The default config for order is:

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

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

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

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

With the default config:

dart_code_metrics:
...
rules:
...
- member-ordering

OR with a custom one:

dart_code_metrics:
...
rules:
...
- member-ordering:
alphabetize: true
order:
- public-fields
- private-fields
- constructors

OR Flutter specific:

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:

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