avoid-instantiating-in-value-provider
- Group
- Correctness
- Path
lint/correctness/avoid-instantiating-in-value-provider- Default
- Off, opt in
- Origin
- Falcon
- Domain
- provider
- Rule
- 77 of 512
Value providers borrow existing instances; newly constructed values need create.
Invalid
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);
}void examples(bool flag, Model existing, Model? cached) { p.Provider.value(value: Model()); p.Provider.value(value: Model()); p.ChangeNotifierProvider.value(value: new Model()); p.ChangeNotifierProvider.value(value: new Model()); p.ListenableProvider.value(value: Model.named()); p.ListenableProvider.value(value: Model.named()); new p.Provider.value(value: (Model())); new p.Provider.value(value: (Model())); p.Provider<Model>.value(value: Model.make()); p.Provider<Model>.value(value: Model.make()); p.ChangeNotifierProvider.value(value: Model()..initialize()); p.ChangeNotifierProvider.value(value: Model()..initialize()); p.Provider.value(value: flag ? Model() : Model()); p.Provider.value(value: flag ? Model() : Model()); p.Provider.value(value: flag ? Model() : existing); p.Provider.value(value: flag ? Model() : existing); p.Provider.value(value: flag ? existing : new Model()); p.Provider.value(value: flag ? existing : new Model()); p.Provider.value(value: (flag ? existing : (Model.named()..initialize()))); p.Provider.value(value: (flag ? existing : (Model.named()..initialize()))); p.Provider.value(value: cached ?? Model()); p.Provider.value(value: cached ?? Model()); p.Provider.value(value: cached ?? (Model.named()..initialize())); p.Provider.value(value: cached ?? (Model.named()..initialize())); p.Provider.value(value: cached ?? (flag ? existing : Model())); p.Provider.value(value: cached ?? (flag ? existing : Model())); p.Provider.value(value: cached ?? (flag ? Model() : null) ?? existing);Valid
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.
{
"linter": {
"rules": {
"correctness": {
"avoid-instantiating-in-value-provider": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/correctness/avoid-instantiating-in-value-provider: <reason>More correctness rules
- avoid-late-contextrecommendedflutter
Avoid storing
BuildContextin late fields or reading it in late initializers. - avoid-missing-completer-stack-trace
Preserve error origins when calling SDK
Completer.completeError. - avoid-missing-controllerflutter
Require Flutter text fields to expose their updated value.
- avoid-missing-enum-constant-in-map
Require enum-keyed map literals to include every declared enum value.
- avoid-missing-interpolationrecommended
Flags missing interpolation around visible String variables or member accesses and calls.
- avoid-misused-hooksrecommendedflutter_hooks
Flags confirmed Flutter hooks called directly in non-hook Flutter widget builds.
- avoid-mounted-in-setstateflutter
Check mounted before invoking Flutter State.setState, never inside its callback.
- avoid-mutable-equatable-subclass-fieldsrecommendedequatable
Flags mutable instance fields on subclasses inheriting Equatable equality.