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