felangel / felangel/bloc

ReplayBloc function onTransition() handles event _Undo instead of user defined event

Open
#4,028 5 comments 0 reactions 1 assignee Claimed by @felangel View on GitHub
bug question waiting for response
Dominant language
Dart
Stars
12.5k
Forks
3.4k
PR merge metrics
No merged PRs in 30d

Description

**Description**
While trying out the class `ReplayBloc` I encountered a problem when using the method `onTransition`. Instead of handling the user defined event `Rewind`, an internal event `_Undo` is handled. (The handler of `Rewind` calls `undo()`, see function `_rewind()` below.)

**Steps To Reproduce**
```Dart
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 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 {
CounterBloc() : super(CounterInitial()) {
on((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 transition) {
super.onTransition(transition);
print(transition.event.runtimeType);

if (transition.event is Rewind) {
print(' Doing something during event Rewind. '); // <-------- Never reached.
}
}
}

/// Executable
void main(List args) {
final bloc = CounterBloc();

bloc.add(Increment());
bloc.add(Decrement());
bloc.add(Rewind());
}
```
**Expected Behavior**
```Terminal
$ dart main.dart
Increment
Decrement
Rewind
Doing something during event Rewind.
```

**Actual Behavior**
```Terminal
$ dart main.dart
Increment
Decrement
Undo
```

**Additional Context**
The fact that `_Undo` is private makes it more difficult to filter events in `onTransition`.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.