super_ goes_ last
Place the super
call last in a constructor initialization list.
Details
#NOTE: This rule is removed in Dart 3.0.0; it is no longer functional.
DO place the super
call last in a constructor initialization list.
Field initializers are evaluated in the order that they appear in the
constructor initialization list. If you place a
super()
call in the middle of
an initializer list, the superclass's initializers will be evaluated right then
before evaluating the rest of the subclass's initializers.
What it doesn't mean is that the superclass's constructor body will be executed
then. That always happens after all initializers are run regardless of where
super
appears. It's vanishingly rare that the order of initializers matters,
so the placement of
super
in the list almost never matters either.
Getting in the habit of placing it last improves consistency, visually reinforces when the superclass's constructor body is run, and may help performance.
BAD:
View(Style style, List children)
: super(style),
_children = children {
GOOD:
View(Style style, List children)
: _children = children,
super(style) {
Enable
#
To enable the
super_goes_last
rule, add
super_goes_last
under
linter > rules
in your
analysis_options.yaml
file:
linter:
rules:
- super_goes_last
If you're instead using the YAML map syntax to configure linter rules,
add
super_goes_last: true
under
linter > rules:
linter:
rules:
super_goes_last: true
Unless stated otherwise, the documentation on this site reflects Dart 3.9.2. Report an issue.