avoid-unnecessary-overrides-in-state

Group
Style
Path
lint/style/avoid-unnecessary-overrides-in-state
Default
Off, opt in
Origin
Falcon
Domain
flutter
Rule
169 of 512
flutter

Redundant Flutter State overrides that drop inherited @protected.

Shares the general override rule's forwarding, signature, documentation and comment checks, but handles only the protected-annotation mismatch that rule deliberately preserves. All other redundant overrides remain owned by unnecessary-overrides, so enabling both rules does not duplicate diagnostics. The enclosing type must resolve to a subtype of Flutter's State declaration.

Invalid

example.dartdart
import 'package:flutter/material.dart';

class Redundant extends State<StatefulWidget> {
  @override
  void initState() => super.initState();
  @override
  void dispose() { super.dispose(); }
  @override
  void didChangeDependencies() => super.didChangeDependencies();
  @override
  void deactivate() => super.deactivate();
  @override
  void reassemble() => super.reassemble();
}
Remove this override because it only forwards to `super` unchanged.
4 @override
5 void initState() => super.initState();
Remove this override because it only forwards to `super` unchanged.
6 @override
7 void dispose() { super.dispose(); }
Remove this override because it only forwards to `super` unchanged.
8 @override
9 void didChangeDependencies() => super.didChangeDependencies();
Remove this override because it only forwards to `super` unchanged.
10 @override
11 void deactivate() => super.deactivate();
Remove this override because it only forwards to `super` unchanged.
12 @override
13 void reassemble() => super.reassemble();

Valid

example.dartdart
import 'package:flutter/material.dart';
import 'package:meta/meta.dart';

class Meaningful extends State<StatefulWidget> {
  @override
  void initState() {
    // Initialization will be added here intentionally.
    super.initState();
  }
  @override
  void dispose() { print('cleanup'); super.dispose(); }
  /// Preserve this lifecycle documentation.
  @override
  void didChangeDependencies() => super.didChangeDependencies();
  @override
  void deactivate() {}
  @deprecated
  @override
  void reassemble() => super.reassemble();
}
class Parent {
  void dispose() {}
}
class NotState extends Parent {
  @override
  void dispose() => super.dispose();
}

class StateBase extends State<StatefulWidget> {
  void ordinary() {}
}
class OrdinaryState extends StateBase {
  // Owned by unnecessary-overrides, not this rule: no protected mismatch.
  @override
  void ordinary() => super.ordinary();
}

class ProtectedState extends State<StatefulWidget> {
  // Keeping protected is also owned by unnecessary-overrides.
  @protected
  @override
  void initState() => super.initState();
}

Configure avoid-unnecessary-overrides-in-state

Set its severity in falcon.json. See the configuration guide.

falcon.jsonjson
{
  "linter": {
    "rules": {
      "style": {
        "avoid-unnecessary-overrides-in-state": "error"
      }
    }
  }
}

Or silence one occurrence with a suppression comment; the reason is required.

example.dartdart
// falcon-ignore lint/style/avoid-unnecessary-overrides-in-state: <reason>