class CounterBloc extends Bloc<CounterEvent, CounterState> {
CounterBloc() : super(CounterState()) {
on<CounterIncrementEvent>((event, emit) {
emit(state.copyWith(count: state.count++));
// if i use state.count+1 its working.
});
on<CounterDecrementEvent>((event, emit) {
emit(state.copyWith(count: state.count--));
// if i use state.count-1 its working.
});
}
}
ao usar __ ou ++ não funciona e quando altero state.count+1 ou state.count-1 funciona... então qual é o problema?
Quando você usa state.count++ ou state.count--, o valor passado para emit é o valor original de state.count (antes do incremento ou decremento). Depois disso, o valor de state.count é atualizado, mas esse valor atualizado não é usado na chamada emit. Isso significa que o estado não está sendo atualizado como você espera.
Quando você usa state.count + 1 ou state.count - 1, você está passando diretamente o valor atualizado para emitir
Se você tornar a variável count não final , seu código com state.count++ e state.count-- funcionará, mas essa não é uma abordagem recomendada na maioria dos casos .
state.count++ e state.count-- retornam o valor antes da operação ser realizada, e é por isso que não atualizam o estado como você pode esperar. Usar state.count + 1 ou state.count - 1 calcula diretamente o valor atualizado, então funciona corretamente no seu caso.