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.
The fix for this rule is available only in "Teams" version.
⚙️ 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