@@ -2,12 +2,16 @@ import 'dart:async';
2
2
3
3
import 'package:e_commerce_app/business_logic/common_blocs/cart/bloc.dart' ;
4
4
import 'package:e_commerce_app/business_logic/repository/app_repository.dart' ;
5
+ import 'package:e_commerce_app/business_logic/repository/auth_repository/auth_repo.dart' ;
5
6
import 'package:e_commerce_app/business_logic/repository/cart_repository/cart_repo.dart' ;
7
+ import 'package:e_commerce_app/business_logic/repository/product_repository/product_repo.dart' ;
6
8
import 'package:firebase_auth/firebase_auth.dart' ;
7
9
import 'package:flutter_bloc/flutter_bloc.dart' ;
8
10
9
11
class CartBloc extends Bloc <CartEvent , CartState > {
12
+ final AuthRepository _authRepository = AppRepository .authRepository;
10
13
final CartRepository _cartRepository = AppRepository .cartRepository;
14
+ final ProductRepository _productRepository = AppRepository .productRepository;
11
15
late User _loggedFirebaseUser;
12
16
StreamSubscription ? _cartStreamSub;
13
17
@@ -32,12 +36,11 @@ class CartBloc extends Bloc<CartEvent, CartState> {
32
36
33
37
Stream <CartState > _mapLoadCartToState (LoadCart event) async * {
34
38
try {
35
- _loggedFirebaseUser = event.loggedFirebaseUser;
36
39
_cartStreamSub? .cancel ();
37
- _cartStreamSub =
38
- _cartRepository. cartStream (_loggedFirebaseUser.uid). listen (
39
- (cart) => add ( CartUpdated (cart)),
40
- );
40
+ _loggedFirebaseUser = _authRepository.loggedFirebaseUser;
41
+ _cartStreamSub = _cartRepository
42
+ . cartStream (_loggedFirebaseUser.uid)
43
+ . listen ((cart) => add ( CartUpdated (cart)) );
41
44
} catch (e) {
42
45
yield CartLoadFailure (e.toString ());
43
46
}
@@ -83,9 +86,26 @@ class CartBloc extends Bloc<CartEvent, CartState> {
83
86
}
84
87
85
88
Stream <CartState > _mapCartUpdatedToState (CartUpdated event) async * {
86
- var totalCartPrice = 0 ;
87
- event.cart.forEach ((c) => totalCartPrice += c.price);
88
- yield CartLoaded (event.cart, totalCartPrice);
89
+ yield CartLoading ();
90
+
91
+ var updatedCart = event.updatedCart;
92
+ var priceOfGoods = 0 ;
93
+ for (var i = 0 ; i < updatedCart.length; i++ ) {
94
+ priceOfGoods += updatedCart[i].price;
95
+ // Get product by id that is provided from cart item
96
+ try {
97
+ var productInfo =
98
+ await _productRepository.getProductById (updatedCart[i].productId);
99
+ updatedCart[i] = updatedCart[i].cloneWith (productInfo: productInfo);
100
+ } catch (e) {
101
+ yield CartLoadFailure (e.toString ());
102
+ }
103
+ }
104
+
105
+ yield CartLoaded (
106
+ cart: updatedCart,
107
+ priceOfGoods: priceOfGoods,
108
+ );
89
109
}
90
110
91
111
@override
0 commit comments