avoid-passing-bloc-to-bloc
Warns when a Bloc
depends on another Bloc
.
Because blocs expose streams, it may be tempting to make a bloc which listens to another bloc. You should not do this. A bloc should only receive information through events and from injected repositories (i.e., repositories given to the bloc in its constructor).
If you're in a situation where a bloc needs to respond to another bloc, you can push the problem up a layer (into the presentation layer), or down a layer (into the domain layer).
Example
❌ Bad:
class BadBloc extends Bloc<CounterEvent, int> {
final OtherBloc otherBloc;
late final StreamSubscription otherBlocSubscription;
// LINT: Avoid creating a dependency between two 'Blocs'.
BadBloc(this.otherBloc) : super(0) {
otherBlocSubscription = otherBloc.stream.listen((state) {
add(Change(1));
});
}
void onChange(Change<int> change) {
super.onChange(change);
...
}
}
class OtherBloc extends Bloc<CounterEvent, int> {
OtherBloc() : super(0);
void onChange(Change<int> change) {
super.onChange(change);
...
}
}
✅ Good:
class GoodBloc extends Bloc<CounterEvent, int> {
// You can pass the stream instead
GoodBloc() : super(0) { }
void onChange(Change<int> change) {
super.onChange(change);
...
}
}