【发布时间】:2020-12-06 19:05:17
【问题描述】:
我刚开始学习 bloc,我正在尝试制作购物车 bloc,但出现状态错误:
错误:未处理的错误应为“CartSuccess”类型的值,但在“CartBloc”的块实例中出现“CartLoading”类型之一。
即使我删除了yield CartLoading(),错误也会变成:
错误:未处理的错误应为“CartSuccess”类型的值,但在“CartBloc”的 bloc 实例中出现“CartInitial”类型的值。
购物车状态
abstract class CartState extends Equatable {
const CartState();
@override
List<Object> get props => [];
}
class CartInitial extends CartState {}
class CartLoading extends CartState {}
class CartSuccess extends CartState {
final List<ProductModel> carts;
const CartSuccess(this.carts);
@override
List<Object> get props => [carts];
}
class CartFailed extends CartState {}
购物车活动
abstract class CartEvent extends Equatable {
const CartEvent();
@override
List<Object> get props => [];
}
class FetchCart extends CartEvent {}
class AddToCart extends CartEvent {
final ProductModel product;
const AddToCart(this.product);
@override
List<Object> get props => [product];
}
class RemoveFromCart extends CartEvent {
final ProductModel product;
const RemoveFromCart(this.product);
@override
List<Object> get props => [product];
}
购物车组
class CartBloc extends Bloc<CartEvent, CartState> {
CartBloc() : super(CartInitial());
@override
Stream<CartState> mapEventToState(CartEvent event) async* {
yield CartLoading();
if(event is FetchCart){
final List<ProductModel> carts = List.from((state as CartSuccess).carts);
yield CartSuccess(carts);
}
if(event is AddToCart){
try{
final List<ProductModel> carts = List.from((state as CartSuccess).carts)
..add(event.product);
yield CartSuccess(carts);
}catch(e){
yield CartFailed();
print(e);
}
}
if(event is RemoveFromCart){
try{
final carts = (state as CartSuccess)
.carts
.where((product) => product.id != event.product.id)
.toList();
yield CartSuccess(carts);
}catch(e){
yield CartFailed();
print(e);
}
}
}
}
【问题讨论】: