prefer-immutable-provider-arguments

Path
lint/correctness/prefer-immutable-provider-arguments
Default
Off, opt in
Origin
Falcon
Domain
riverpod
Rule
371 of 512
riverpod

Requires stable value equality for freshly created Riverpod family keys.

Checks package-resolved Riverpod family objects, including subclasses and aliases. Non-constant collections, closures, and fresh instances inheriting Object's equality are rejected. Records are checked recursively; existing values, constants, and unresolved equality implementations are accepted.

Invalid

example.dartdart
import 'package:riverpod/riverpod.dart';
class Mutable { int value = 0; }
final family = ProviderFamily<int, Mutable>();
final future = FutureProviderFamily<int, Mutable>();
final automatic = AutoDisposeProviderFamily<int, Mutable>();
void bad(Mutable mutable) {
  family(mutable);
  family(Mutable());
  future(Mutable());
  automatic(Mutable());
  final alias = family;
  alias(Mutable());
}
Use a provider family argument with stable value equality.
7 family(mutable);
8 family(Mutable());
Use a provider family argument with stable value equality.
8 family(Mutable());
9 future(Mutable());
Use a provider family argument with stable value equality.
9 future(Mutable());
10 automatic(Mutable());
Use a provider family argument with stable value equality.
11 final alias = family;
12 alias(Mutable());

Valid

example.dartdart
import 'package:riverpod/riverpod.dart' as rp;
import 'package:meta/meta.dart';
@immutable
class Key { final int value; const Key(this.value); }
final integer = rp.ProviderFamily<int, int>();
final string = rp.ProviderFamily<int, String>();
final boolean = rp.ProviderFamily<int, bool>();
final key = rp.ProviderFamily<int, Key>();
final unknown = rp.ProviderFamily<int, dynamic>();
class ProviderFamily { void call(Object argument) {} }
class Mutable { int value = 0; }
void good(dynamic value) {
  integer(1);
  string('key');
  boolean(true);
  key(const Key(1));
  unknown(value);
  ProviderFamily()(Mutable());
}

Configure prefer-immutable-provider-arguments

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

falcon.jsonjson
{
  "linter": {
    "rules": {
      "correctness": {
        "prefer-immutable-provider-arguments": "error"
      }
    }
  }
}

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

example.dartdart
// falcon-ignore lint/correctness/prefer-immutable-provider-arguments: <reason>