avoid-passing-bloc-to-widget
- Group
- Suspicious
- Path
lint/suspicious/avoid-passing-bloc-to-widget- Default
- Off, opt in
- Origin
- Falcon
- Domain
- bloc
- Rule
- 110 of 512
Rejects direct Bloc and Cubit arguments to Flutter widget constructors.
Invalid
import 'support.dart' as app;
import 'package:bloc/bloc.dart' as b;
typedef ViewAlias = app.View;
class ChildView extends app.View {
ChildView(Object dependency) : super(dependency);
}
class BlocProvider extends app.View {
BlocProvider.value({required Object value}) : super(value);
}
class BlocBuilder extends app.View {
BlocBuilder({required Object bloc}) : super(bloc);
}
class BlocListener extends app.View {
BlocListener({required Object bloc}) : super(bloc);
}
class BlocConsumer extends app.View {
BlocConsumer({required Object bloc}) : super(bloc);
}
class BlocSelector extends app.View {
BlocSelector({required Object bloc}) : super(bloc);
}
void dependencies(app.Counter counter, b.Bloc<Object, int> bloc) {
app.View(counter);
new app.View(counter);
app.View.named(dependency: bloc);
ChildView(counter);
ViewAlias(counter);
app.View(app.Counter());
BlocProvider.value(value: counter);
BlocBuilder(bloc: counter);
BlocListener(bloc: counter);
BlocConsumer(bloc: counter);
BlocSelector(bloc: counter);
}void dependencies(app.Counter counter, b.Bloc<Object, int> bloc) { app.View(counter); app.View(counter); new app.View(counter); new app.View(counter); app.View.named(dependency: bloc); app.View.named(dependency: bloc); ChildView(counter); ChildView(counter); ViewAlias(counter); ViewAlias(counter); app.View(app.Counter()); app.View(app.Counter()); BlocProvider.value(value: counter); BlocProvider.value(value: counter); BlocBuilder(bloc: counter); BlocBuilder(bloc: counter); BlocListener(bloc: counter); BlocListener(bloc: counter); BlocConsumer(bloc: counter); BlocConsumer(bloc: counter); BlocSelector(bloc: counter);Valid
import 'support.dart' as real;
import 'package:flutter_bloc/flutter_bloc.dart' as framework;
import 'package:flutter/widgets.dart' as flutter;
class Widget {
Widget(Object dependency);
}
class LocalView extends Widget {
LocalView(Object dependency) : super(dependency);
}
class Bloc<E, S> {}
class Cubit<S> {}
class LookupView extends real.View {
LookupView() : super(0);
static LookupView of(real.Counter counter) => LookupView();
}
void boundaries(real.Counter counter, dynamic unknown) {
Widget(counter);
LocalView(counter);
real.Repository(counter);
real.View(Bloc<Object, int>());
real.View(Cubit<int>());
real.View(real.Repository(0));
real.View(unknown);
LookupView.of(counter);
framework.BlocProvider.value(value: counter, child: flutter.SizedBox());
framework.RepositoryProvider.value(value: counter, child: flutter.SizedBox());
framework.BlocBuilder<real.Counter, int>(
bloc: counter,
builder: (context, state) => flutter.SizedBox(),
);
framework.BlocListener<real.Counter, int>(
bloc: counter,
listener: (context, state) {},
child: flutter.SizedBox(),
);
framework.BlocConsumer<real.Counter, int>(
bloc: counter,
builder: (context, state) => flutter.SizedBox(),
listener: (context, state) {},
);
framework.BlocSelector<real.Counter, int, bool>(
bloc: counter,
selector: (state) => state > 0,
builder: (context, selected) => flutter.SizedBox(),
);
final View = (Object dependency) => real.Repository(dependency);
View(counter);
}Configure avoid-passing-bloc-to-widget
Set its severity in falcon.json. See the configuration guide.
{
"linter": {
"rules": {
"suspicious": {
"avoid-passing-bloc-to-widget": "error"
}
}
}
}Or silence one occurrence with a suppression comment; the reason is required.
// falcon-ignore lint/suspicious/avoid-passing-bloc-to-widget: <reason>More suspicious rules
- avoid-passing-build-context-to-blocsbloc
Keeps Flutter
BuildContextarguments outside Bloc and Cubit APIs. - 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.