add-equatable-props
- Group
- Correctness
- Path
lint/correctness/add-equatable-props- Default
- On (recommended)
- Origin
- Falcon
- Domain
- equatable
- Rule
- 2 of 512
Flags concrete Equatable subclasses that do not declare an instance props property.
A concrete subclass must explicitly define which values participate in equality, even when a parent already supplies props. An instance getter, field or declaring constructor parameter named props satisfies the rule. Abstract/sealed bases are exempt. Only resolved transitive package:equatable subtypes inheriting Equatable's concrete equality are checked; interface-only implementations, classes replacing equality, unrelated same-named types and unknown types are ignored.
Invalid
import 'support.dart' as fixtures;
import 'support.dart';
class Direct extends Parent {}
class MixedValue extends Mixed {}
class Indirect extends Parent { final int child = 1; }
class Transitive extends Middle { final int child = 1; }
class PrefixedChild extends fixtures.Parent { final int value = 1; }
class MixedChild extends Mixed { final int first = 1; final int second = 2; }import 'support.dart';class Direct extends Parent {}class Direct extends Parent {}class MixedValue extends Mixed {}class MixedValue extends Mixed {}class Indirect extends Parent { final int child = 1; }class Indirect extends Parent { final int child = 1; }class Transitive extends Middle { final int child = 1; }class Transitive extends Middle { final int child = 1; }class PrefixedChild extends fixtures.Parent { final int value = 1; }class PrefixedChild extends fixtures.Parent { final int value = 1; }class MixedChild extends Mixed { final int first = 1; final int second = 2; }Valid
import 'package:equatable/equatable.dart';
import 'package:equatable/equatable.dart' as eq;
import 'support.dart';
class Direct extends Equatable { List<Object?> get props => []; }
class MixedValue with EquatableMixin { List<Object?> get props => []; }
class Indirect extends Parent { List<Object?> get props => super.props; }
class Transitive extends Middle { List<Object?> get props => []; }
class Prefixed extends eq.Equatable { List<Object?> get props => []; }
class MixedChild extends Mixed { List<Object?> get props { return []; } }
class Unrelated { final int value = 1; }Configure add-equatable-props
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"correctness": {
"add-equatable-props": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/correctness/add-equatable-props: <reason>More correctness rules
- always-pass-global-keyflutter
Keep
GlobalKeysstable and pass owned State fields to widgets. - always-remove-listenerrecommendedflutter
Requires Flutter Listenable registrations in State to be removed.
- always-use-package-imports
always_use_package_importsDisallow relative imports in libraries under a package's
lib/directory. - avoid-assigning-to-static-field
Flags instance methods writing resolved static fields, including compound assignments and increments.
- avoid-calling-notifier-members-inside-buildrecommendedriverpod
Flags calls to Riverpod notifier methods during widget build.
- avoid-collection-equality-checksrecommended
Flags equality comparisons between non-constant SDK collections.
- avoid-conditional-hooksrecommendedflutter_hooks
Flags hook calls in conditional branches, short-circuit operands, and loops.
- avoid-constant-assert-conditions
Flags assertions whose Boolean condition is statically constant.