avoid-instantiating-in-value-provider

Path
lint/correctness/avoid-instantiating-in-value-provider
Default
Off, opt in
Origin
Falcon
Domain
provider
Rule
77 of 512
provider

Value providers borrow existing instances; newly constructed values need create.

Invalid

example.dartdart
import 'package:provider/provider.dart' as p;
class Model {
  Model();
  Model.named();
  factory Model.make() => Model();
  void initialize() {}
}
void examples(bool flag, Model existing, Model? cached) {
  p.Provider.value(value: Model());
  p.ChangeNotifierProvider.value(value: new Model());
  p.ListenableProvider.value(value: Model.named());
  new p.Provider.value(value: (Model()));
  p.Provider<Model>.value(value: Model.make());
  p.ChangeNotifierProvider.value(value: Model()..initialize());
  p.Provider.value(value: flag ? Model() : Model());
  p.Provider.value(value: flag ? Model() : existing);
  p.Provider.value(value: flag ? existing : new Model());
  p.Provider.value(value: (flag ? existing : (Model.named()..initialize())));
  p.Provider.value(value: cached ?? Model());
  p.Provider.value(value: cached ?? (Model.named()..initialize()));
  p.Provider.value(value: cached ?? (flag ? existing : Model()));
  p.Provider.value(value: cached ?? (flag ? Model() : null) ?? existing);
}
Use create to construct a new provided instance instead of a value provider.
8void examples(bool flag, Model existing, Model? cached) {
9 p.Provider.value(value: Model());
Use create to construct a new provided instance instead of a value provider.
9 p.Provider.value(value: Model());
10 p.ChangeNotifierProvider.value(value: new Model());
Use create to construct a new provided instance instead of a value provider.
10 p.ChangeNotifierProvider.value(value: new Model());
11 p.ListenableProvider.value(value: Model.named());
Use create to construct a new provided instance instead of a value provider.
11 p.ListenableProvider.value(value: Model.named());
12 new p.Provider.value(value: (Model()));
Use create to construct a new provided instance instead of a value provider.
12 new p.Provider.value(value: (Model()));
13 p.Provider<Model>.value(value: Model.make());
Use create to construct a new provided instance instead of a value provider.
13 p.Provider<Model>.value(value: Model.make());
14 p.ChangeNotifierProvider.value(value: Model()..initialize());
Use create to construct a new provided instance instead of a value provider.
14 p.ChangeNotifierProvider.value(value: Model()..initialize());
15 p.Provider.value(value: flag ? Model() : Model());
Use create to construct a new provided instance instead of a value provider.
15 p.Provider.value(value: flag ? Model() : Model());
16 p.Provider.value(value: flag ? Model() : existing);
Use create to construct a new provided instance instead of a value provider.
16 p.Provider.value(value: flag ? Model() : existing);
17 p.Provider.value(value: flag ? existing : new Model());
Use create to construct a new provided instance instead of a value provider.
17 p.Provider.value(value: flag ? existing : new Model());
18 p.Provider.value(value: (flag ? existing : (Model.named()..initialize())));
Use create to construct a new provided instance instead of a value provider.
18 p.Provider.value(value: (flag ? existing : (Model.named()..initialize())));
19 p.Provider.value(value: cached ?? Model());
Use create to construct a new provided instance instead of a value provider.
19 p.Provider.value(value: cached ?? Model());
20 p.Provider.value(value: cached ?? (Model.named()..initialize()));
Use create to construct a new provided instance instead of a value provider.
20 p.Provider.value(value: cached ?? (Model.named()..initialize()));
21 p.Provider.value(value: cached ?? (flag ? existing : Model()));
Use create to construct a new provided instance instead of a value provider.
21 p.Provider.value(value: cached ?? (flag ? existing : Model()));
22 p.Provider.value(value: cached ?? (flag ? Model() : null) ?? existing);

Valid

example.dartdart
import 'package:provider/provider.dart' as p;
class Model {
  Model();
  static final Model instance = Model();
  static Model cached() => instance;
  void initialize() {}
}
class Provider {
  Provider.value({Object? value});
}
Model makeModel() => Model();
void examples(Model existing, dynamic factory, bool flag, Model? cached) {
  p.Provider.value(value: existing);
  p.ChangeNotifierProvider.value(value: existing);
  p.ListenableProvider.value(value: existing);
  p.Provider(create: (_) => Model());
  Provider.value(value: Model());
  p.Provider.value(value: makeModel());
  p.Provider.value(value: factory());
  p.Provider.value(value: Model.cached());
  p.Provider.value(value: existing..initialize());
  p.Provider.value(value: flag ? existing : Model.instance);
  p.Provider.value(value: (flag ? existing : Model.cached())..initialize());
  p.Provider.value(value: flag ? makeModel() : Model.cached());
  p.Provider.value(value: cached ?? existing);
  p.Provider.value(value: cached ?? Model.cached());
}
void shadowed(dynamic Model) {
  p.Provider.value(value: Model());
}

Configure avoid-instantiating-in-value-provider

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

falcon.jsonjson
{
  "linter": {
    "rules": {
      "correctness": {
        "avoid-instantiating-in-value-provider": "error"
      }
    }
  }
}

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

example.dartdart
// falcon-ignore lint/correctness/avoid-instantiating-in-value-provider: <reason>