Я пытаюсь создать торговую площадку на приложении flutter, управляемом дротиком состояния, поэтому, когда пользователь выбирает продукт, состояние меняется с пустого на загруженное, я копирую диаграмму потока за ним.
введите описание изображения здесь
Проблема в том, что после выбора продуктов, когда я перехожу со страницы продуктов на страницу карт, состояние снова становится пустым, а продукты вообще не отображаются.
После нажатия продукт, он переходит в магазинный карт blo c и выполняет следующую функцию.
Stream<ShoppingState> _mapAddItemToState(Product product) async* {
//yield ShoppingState.loading();
try {
final List<PackItem> packItemList = List.from(state.packItemList);
packItemList.add(PackItem(title: product.title, detail: product.detail, price: product.price,));
yield state.update(isItemAdded: state.isItemAdded);
yield ShoppingState.itemAdded(packItemList);
//yield state.update(packItemList: packItemList);
yield ShoppingState.loaded(packItemList);
} catch (packItemList) {
print(packItemList);
}
В состоянии торгового карт dart у нас есть:
part of 'e_commerce_bloc.dart';
@immutable
class ShoppingState {
final bool isItemAdded;
final bool isItemRemoved;
final bool isCartLoading;
final bool isCartLoaded;
final bool isCartEmpty;
final List<PackItem> packItemList;
ShoppingState({
this.isItemAdded,
this.isItemRemoved,
this.isCartLoading,
this.isCartLoaded,
this.isCartEmpty,
this.packItemList
});
factory ShoppingState.empty() {
return ShoppingState(
isItemAdded: false,
isItemRemoved: false,
isCartLoading: false,
isCartLoaded: false,
isCartEmpty: true,
packItemList: []
);
}
factory ShoppingState.loading(){
return ShoppingState(
isItemAdded: true,
isItemRemoved: true,
isCartLoading: true,
isCartLoaded: false,
isCartEmpty: false
);
}
factory ShoppingState.itemAdded(List<PackItem> packItemList) {
return ShoppingState(
isItemAdded: true,
isItemRemoved: false,
isCartLoading: false,
isCartLoaded: false,
isCartEmpty: false,
packItemList: packItemList
);
}
factory ShoppingState.itemRemoved() {
return ShoppingState(
isItemAdded: false,
isItemRemoved: true,
isCartLoading: false,
isCartLoaded: false,
isCartEmpty: false
);
}
factory ShoppingState.loaded(List<PackItem> packItemList) {
return ShoppingState(
isItemAdded: false,
isItemRemoved: false,
isCartLoading: false,
isCartLoaded: true,
isCartEmpty: false,
packItemList: packItemList,
);
}
ShoppingState update({
bool isItemAdded,
bool isItemRemoved,
List<PackItem> packItemList,
}){
return copyWith(
isItemAdded: isItemAdded,
isItemRemoved: isItemRemoved,
packItemList: packItemList,
isCartLoading: false,
isCartLoaded: false,
isCartEmpty: false
);
}
ShoppingState copyWith({
bool isItemAdded,
bool isItemRemoved,
bool isCartLoading,
bool isCartLoaded,
bool isCartEmpty,
List<PackItem> packItemList,
}) {
return ShoppingState(
isItemAdded: isItemAdded ?? this.isItemAdded,
isItemRemoved: isItemRemoved ?? this.isItemRemoved,
isCartLoading: isCartLoading ?? this.isCartLoading,
isCartLoaded: isCartLoaded ?? this.isCartLoaded,
isCartEmpty: isCartEmpty ?? this.isCartEmpty,
packItemList: packItemList ?? this.packItemList
);
}
@override
String toString() {
return '''ShoppingState{
isItemAdded: $isItemAdded,
isItemRemoved: $isItemRemoved,
isCartLoading: $isCartLoading,
isCartLoaded: $isCartLoaded,
isCartEmpty: $isCartEmpty,
packItemList: ${packItemList.length}
}''';
}
}
И на странице Карт У меня есть:
child: BlocBuilder<ShoppingBlock, ShoppingState>(
builder: (BuildContext context, ShoppingState state) {
print(state);
if (state.isCartLoading) {
return Center(child: CircularProgressIndicator());
}
if (state.isCartLoaded) {
return ListView.builder(
itemCount: state.packItemList.length,
itemBuilder: (BuildContext context, int index) {
state.packItemList.forEach((item) {
return ListTile(
title: Text(item.title[index]),
subtitle: Text(item.detail[index]),
trailing: Text(item.price[index]),
);
});
return ListView(children: state.packItemList);
});
}
return Center(child: Text('No has agregado items'));
},
)
Но вместо того, чтобы возвращать состояние корзины «Загружена», он возвращает состояние, пустое от состояния корзины покупок