prefer-read-for-methods
- Group
- Correctness
- Path
lint/correctness/prefer-read-for-methods- Default
- On (recommended)
- Origin
- Falcon
- Domain
- provider
- Rule
- 396 of 512
Flags void method actions on a listening Provider lookup during build.
Use context.read or Provider.of(listen: false) for actions instead. Only resolved void methods in confirmed widget build/buildWithChild methods are checked; queries, property reads and unresolved values keep subscriptions. Widget helpers and didChangeDependencies are not assumed to run in build. Outside build, avoid-watch-outside-build owns the diagnostic.
Invalid
import 'package:flutter/widgets.dart';
import 'package:provider/provider.dart';
import 'package:nested/nested.dart';
class Service {
void save() {}
void refresh() {}
void reset() {}
}
class View extends StatelessWidget {
Widget build(BuildContext context) {
context.watch<Service>().save();
context.watch<Service>().refresh();
context.watch<Service>().reset();
Provider.of<Service>(context).save();
Provider.of<Service>(context, listen: true).refresh();
return SizedBox();
}
}
class SingleView extends SingleChildStatelessWidget {
Widget buildWithChild(BuildContext context, Widget? child) {
context.watch<Service>().save();
Provider.of<Service>(context).refresh();
return child ?? SizedBox();
}
}
class SingleState extends SingleChildState<SingleChildStatefulWidget> {
Widget buildWithChild(BuildContext context, Widget? child) {
context.watch<Service>().save();
Provider.of<Service>(context).refresh();
return child ?? SizedBox();
}
} Widget build(BuildContext context) { context.watch<Service>().save(); context.watch<Service>().save(); context.watch<Service>().refresh(); context.watch<Service>().refresh(); context.watch<Service>().reset(); context.watch<Service>().reset(); Provider.of<Service>(context).save(); Provider.of<Service>(context).save(); Provider.of<Service>(context, listen: true).refresh(); Widget buildWithChild(BuildContext context, Widget? child) { context.watch<Service>().save(); context.watch<Service>().save(); Provider.of<Service>(context).refresh(); Widget buildWithChild(BuildContext context, Widget? child) { context.watch<Service>().save(); context.watch<Service>().save(); Provider.of<Service>(context).refresh();Valid
import 'package:flutter/widgets.dart';
import 'package:provider/provider.dart';
class Service {
int get value => 1;
void save() {}
int calculate() => 1;
}
void actions(BuildContext context) {
context.read<Service>().save();
Provider.of<Service>(context, listen: false).save();
final value = context.watch<Service>().value;
final method = context.watch<Service>().save;
final instance = context.watch<Service>();
context.watch<Unknown>().save();
}
class Unknown {}
class Other { Service watch() => Service(); }
void unrelated(Other context) { context.watch().save(); }
class View extends StatelessWidget {
Widget build(BuildContext context) {
final query = context.watch<Service>().calculate();
final selected = context.select<Service, int>((value) => value.value).toString();
return SizedBox();
}
}
class DependentState extends State<StatefulWidget> {
BuildContext get context => throw 0;
void didChangeDependencies() {
context.watch<Service>().save();
Provider.of<Service>(context).save();
}
Widget helper(BuildContext context) {
context.watch<Service>().save();
Provider.of<Service>(context).save();
return SizedBox();
}
Widget build(BuildContext context) => helper(context);
}Configure prefer-read-for-methods
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"correctness": {
"prefer-read-for-methods": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/correctness/prefer-read-for-methods: <reason>More correctness rules
- prefer-ref-read-for-methodsrecommendedriverpod
Flags watching a Riverpod notifier solely to invoke one of its methods.
- prefer-relative-imports
prefer_relative_importsPrefer relative imports for libraries of the same package under
lib/. - prefer-sealed-bloc-eventsrecommendedbloc
Flags Bloc event classes without a sealed or final modifier.
- prefer-sealed-bloc-staterecommendedbloc
Flags Bloc state classes without a sealed or final modifier.
- prefer-void-to-null
prefer_void_to_nullrecommendedFlags uses of the
Nulltype wherevoidis meant. - proper-controller-dispose
proper_controller_disposerecommendedflutterRequires Flutter controllers owned by a
Statefield to be disposed. - proper-expanded-and-flexible
proper_expanded_and_flexiblerecommendedflutterRequire
ExpandedandFlexibleto sit directly inside a flex widget. - proper-from-environment
proper_from_environmentrecommendedRequire
fromEnvironmentto be evaluated in a const context.