While trying out the class ReplayBloc
I encountered a problem, when using the method onTransition
. Instead of handling the events I have defined, the internal event _Undo
is handled.
A simplified version is listed below:
import 'package:replay_bloc/replay_bloc.dart';
import 'package:equatable/equatable.dart';
/// Bloc state
final class CounterState extends Equatable {
const CounterState(this.i);
final int i;
@override
List<Object> get props => [i];
}
final class CounterInitial extends CounterState {
const CounterInitial() : super(0);
}
/// Bloc events
sealed class CounterEvent extends ReplayEvent {}
final class Increment extends CounterEvent {}
final class Decrement extends CounterEvent {}
final class Rewind extends CounterEvent{}
/// Bloc logic
class CounterBloc extends ReplayBloc<CounterEvent, CounterState> {
CounterBloc() : super(CounterInitial()) {
on<CounterEvent>((event, emit) => switch (event) {
Increment() => emit(CounterState(state.i + 1)),
Decrement() => emit(CounterState(state.i - 1)),
Rewind() => emit(_rewind()),
});
}
CounterState _rewind() {
undo();
return state;
}
@override
void onTransition(
covariant Transition<ReplayEvent, CounterState> transition) {
super.onTransition(transition);
print(transition.event.runtimeType);
if (transition.event is Rewind) {
print('Doing something during rewind. '); // <-------- Never reached.
}
}
}
void main(List<String> args) {
final bloc = CounterBloc();
bloc.add(Increment());
bloc.add(Decrement());
bloc.add(Rewind());
}
The output of the program main
is listed below:
$ dart main.dart
Increment
Decrement
_Undo
Why is the internal event _Undo
listed but not Rewind
? In a real case scenario, I tried
to take some action after a Rewind
event.