问题描述
我正在使用 BLoC (cubit) 在 Flutter 中创建一个异步计数器应用程序。当我发出加载状态时,计数器没有增加而是返回到 0。如何解决这个问题?
代码:
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:Meta/Meta.dart';
part 'counter_state.dart';
class CounterCubit extends Cubit<CounterState> {
CounterCubit() : super(Counter(counter: 0));
void increment() {
print('before CounterLoading() ${state.counter}');
emit(CounterLoading());
print('after CounterLoading() ${state.counter}');
Timer(Duration(seconds: 2),() {
emit(CounterLoaded());
print('enter code hereprevIoUs state ${state.counter}');
emit(Counter(counter: state.counter + 1));
print('next state ${state.counter}');
});
}
}
part of 'counter_cubit.dart';
@immutable
abstract class CounterState {
final int counter = 0;
}
class Counter extends CounterState {
final int counter;
Counter({this.counter});
}
class CounterLoading extends CounterState {
CounterLoading();
}
class CounterLoaded extends CounterState {
CounterLoaded();
}
解决方法
问题是您的其他状态不包含具有 counter
值的构造函数。因此,使用抽象类的默认值 - 0。为了保持状态,您应该在所有状态中设置计数器值。这是重新设计的状态代码:
@immutable
abstract class CounterState {
final int counter;
CounterState({this.counter = 0});
}
class Counter extends CounterState {
// you do not need the counter property here,it is defined in the base class
Counter({required int counter}) : super(counter: counter);
}
class CounterLoading extends CounterState {
CounterLoading({required int counter}) : super(counter: counter);
}
class CounterLoaded extends CounterState {
CounterLoaded({required int counter}) : super(counter: counter);
}
并相应地调整您的肘部:
class CounterCubit extends Cubit<CounterState> {
CounterCubit() : super(Counter(counter: 0));
void increment() {
print('before CounterLoading() ${state.counter}');
emit(CounterLoading(counter: state.counter));
print('after CounterLoading() ${state.counter}');
Timer(Duration(seconds: 2),() {
emit(CounterLoaded(counter: state.counter));
print('enter code hereprevious state ${state.counter}');
emit(Counter(counter: state.counter + 1));
print('next state ${state.counter}');
});
}
}