我试图从另一个类访问类的属性值,但无法这样做。我可能做错了,所以我在这里寻找答案。
在我的应用程序中有一个叫做CartRepository的类,它保存购物车中的物品。
class CartRepository {
List<Product> cartItems = [];
List<Product> get getCartItems => cartItems;
void addItem(Product product) {
cartItems.add(product);
}
}
通过block,我通过创建cartrerepository对象来更新cartItems的值。
还有一个叫做OrderRepository的类,我需要从cartrerepository中引入cartItems以及来自UI的其他信息,并在数据库中更新它。
但是当我在OrderBloc内部为CartRepository创建另一个对象并访问cartItems时,它返回的值是一个空List。我如何访问在另一个地方有数据的cartitem ?
OrderBloc
class OrderProviderBloc extends Bloc<OrderProviderEvent, OrderProviderState> {
OrderProviderBloc() : super(OrderProviderInitial());
CartRepository cartRepository = CartRepository();
OrderRepository orderRepository = OrderRepository();
@override
Stream<OrderProviderState> mapEventToState(
OrderProviderEvent event,
) async* {
if (event is PlaceOrderEvent) {
try {
orderRepository.placeOrder(cartRepository.cartItems,event.userMobileNumber);
} on Exception {}
}
}
}
OrderRepository
class OrderRepository extends Equatable {
final List<Order> orders = [];
void placeOrder(
List<Product> cartItems, String userMobileNumber) {
orders.add(Order(
userMobileNumber: userMobileNumber,
productsFromCart: cartItems));
addOrderToFirebase(cartItems, userMobileNumber);
}
不要使用getter来设置变量!
在声明了final变量后,不要将value设置为final变量
在这些行
List<Product> cartItems = CartRepository().cartItems;
print("Total from cart repository -------- ${cartRepository.totalCValue}");
orderRepository.placeOrder(cartRepository.cartItems,
cartRepository.totalCValue, event.userMobileNumber);
你正在使用getter来设置值,要解决这个问题,在CartRepository
中添加setter和现有的getter。也因为它是一个最终变量,你需要调用clear
,然后调用addAll
来添加新项目。
class CartRepository extends Equatable {
final List<Product> _cartItems = [];
List<Product> get cartItems => _cartItems;
set cartItems(List<Product> newCardItems){
_cartItems.clear();
_cartItems.addAll(newCardItems);
}
}
这一行将做什么?您没有使用这个变量
List<Product> cartItems = CartRepository().cartItems;