avoid-passing-build-context-to-blocs
- Group
- Suspicious
- Path
lint/suspicious/avoid-passing-build-context-to-blocs- Default
- Off, opt in
- Origin
- Falcon
- Domain
- bloc
- Rule
- 111 of 512
Keeps Flutter BuildContext arguments outside Bloc and Cubit APIs.
Invalid
import 'package:flutter/widgets.dart' as f;
import 'support.dart';
import 'package:bloc/bloc.dart' as b;
class ConsumerCubit extends b.Cubit<int> {
ConsumerCubit(Object dependency) : super(0);
}
class CustomContext implements f.BuildContext {
bool get mounted => true;
}
typedef ConsumerAlias = Consumer;
class Event {
Event(Object payload);
}
class ChildEvent extends Event {
ChildEvent(Object payload) : super(payload);
}
class EventBloc extends b.Bloc<Event, int> {
EventBloc() : super(0);
void add(Event event) {}
}
void dependencies(f.BuildContext context, Consumer consumer, CustomContext custom) {
Consumer(context);
new Consumer(context);
Consumer.named(dependency: context);
ChildConsumer(context);
ConsumerAlias(context);
consumer.accept(context);
ConsumerCubit(context);
Consumer(custom);
consumer..accept(context);
}
void eventPayload(f.BuildContext context, EventBloc bloc) {
bloc.add(Event(context));
final event = ChildEvent(context);
bloc.add(event);
}
void importedEvents(f.BuildContext context, CounterBloc bloc) {
bloc.add(CounterEvent(context));
}
class ImplicitConsumer extends b.Cubit<int> {
ImplicitConsumer() : super(0);
void accept(Object dependency) {}
void dependencies(f.BuildContext context) {
accept(context);
this.accept(context);
}
}
class InheritedConsumer extends ImplicitConsumer {
void inherited(f.BuildContext context) {
accept(context);
}
}void dependencies(f.BuildContext context, Consumer consumer, CustomContext custom) { Consumer(context); Consumer(context); new Consumer(context); new Consumer(context); Consumer.named(dependency: context); Consumer.named(dependency: context); ChildConsumer(context); ChildConsumer(context); ConsumerAlias(context); ConsumerAlias(context); consumer.accept(context); consumer.accept(context); ConsumerCubit(context); ConsumerCubit(context); Consumer(custom); Consumer(custom); consumer..accept(context);void eventPayload(f.BuildContext context, EventBloc bloc) { bloc.add(Event(context)); bloc.add(Event(context)); final event = ChildEvent(context);void importedEvents(f.BuildContext context, CounterBloc bloc) { bloc.add(CounterEvent(context)); void dependencies(f.BuildContext context) { accept(context); accept(context); this.accept(context); void inherited(f.BuildContext context) { accept(context);Valid
import 'package:flutter/widgets.dart' as flutter;
import 'support.dart' as real;
class BuildContext {}
class Bloc<E, S> {}
class LocalBloc extends Bloc<Object, int> {
LocalBloc(Object dependency);
}
class LookupConsumer extends real.Consumer {
LookupConsumer() : super(0);
static LookupConsumer of(flutter.BuildContext context) => LookupConsumer();
}
class UnrelatedEvent {
UnrelatedEvent(Object payload);
}
void boundaries(flutter.BuildContext context, real.Consumer consumer, dynamic unknown) {
real.Consumer(BuildContext());
real.Consumer(real.Repository(0));
real.Consumer(unknown);
real.Repository(context);
real.View(context);
LocalBloc(context);
consumer.accept(context.mounted);
consumer..accept(context.mounted);
LookupConsumer.of(context);
UnrelatedEvent(context);
final Consumer = (Object dependency) => real.Repository(dependency);
Consumer(context);
}
void accept(Object value) {}
class ShadowedConsumer extends real.Consumer {
ShadowedConsumer() : super(0);
void localVariable(flutter.BuildContext context) {
final accept = (Object value) {};
accept(context);
}
void localFunction(flutter.BuildContext context) {
void accept(Object value) {}
accept(context);
}
void parameter(flutter.BuildContext context, void Function(Object) accept) {
accept(context);
}
void libraryFunction(flutter.BuildContext context) {
accept(context);
}
static void helper(Object value) {}
void staticFunction(flutter.BuildContext context) {
helper(context);
}
}Configure avoid-passing-build-context-to-blocs
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"suspicious": {
"avoid-passing-build-context-to-blocs": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/suspicious/avoid-passing-build-context-to-blocs: <reason>More suspicious rules
- avoid-print
avoid_printrecommendedflutterFlags calls and callback arguments resolving to
dart:core'sprint. - avoid-referencing-subclasses
Keeps base classes independent from their transitive subclasses.
- avoid-returning-null-for-void
avoid_returning_null_for_voidrecommendedFlags
return null;(and=> nullbodies) in synchronousvoidfunctions and asynchronousFuture<void>functions. - avoid-shadowed-extension-methods
Flags extension instance methods and accessors hidden by their target's members.
- avoid-shadowing
Flags local bindings and parameters that hide an enclosing type's member.
- avoid-shadowing-type-parameters
avoid_shadowing_type_parametersrecommendedFlags a type parameter that shadows a type parameter of an enclosing declaration.
- avoid-suspicious-super-overrides
Finds getters hiding fields supplied via the immediate super constructor's
this.formals or declaring primary-constructor parameters. - avoid-throw-in-catch-block
avoid-throw-in-catch-blockFlags
throwstatements inside acatchblock.