Skip to content

Commit

Permalink
Display favorites on load cart
Browse files Browse the repository at this point in the history
  • Loading branch information
IQuinteros committed Jun 23, 2021
1 parent 3022e47 commit 19bd0a2
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 18 deletions.
25 changes: 13 additions & 12 deletions lib/bloc/cart_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'package:flutter_ecoapp/models/cart.dart';
import 'package:flutter_ecoapp/models/category.dart';
import 'package:flutter_ecoapp/models/district.dart';
import 'package:flutter_ecoapp/models/opinion.dart';
import 'package:flutter_ecoapp/models/profile.dart';
import 'package:flutter_ecoapp/models/store.dart';
import 'package:flutter_ecoapp/providers/article_api.dart';
import 'package:flutter_ecoapp/providers/sqlite/cart_local_api.dart';
Expand All @@ -22,17 +23,17 @@ class CartBloc extends BaseBloc<CartArticleModel>{

CartModel loadedCart = CartModel(articles: []);

Future<CartModel> loadCart({bool onlyLocal = false}) async {
Future<CartModel> loadCart({bool onlyLocal = false, required ProfileModel? profile}) async {
List<CartArticleModel> articles = await cartLocalAPI.select();
await loadRemoteArticles(articles);
if(articles.length > 0) await loadRemoteArticles(articles, profile);
return loadedCart;
}

Future<void> loadRemoteArticles(List<CartArticleModel> cartArticles) async {
Future<void> loadRemoteArticles(List<CartArticleModel> cartArticles, ProfileModel? profile) async {
List<ArticleModel> articleModels = await articleAPI.selectAll(
params: {
'id_list': _getIdsFromArticles(cartArticles)
}
'id_list': _getIdsFromArticles(cartArticles),
}..addAll(profile != null? {'profile_id': profile.id} : {})
);

// Update articles
Expand Down Expand Up @@ -68,39 +69,39 @@ class CartBloc extends BaseBloc<CartArticleModel>{
}

Map<ArticleModel, Timer?> _updateArticleTimer = {};
Future<CartArticleModel?> updateArticleToCartTimer(ArticleModel article, int newQuantity) async {
Future<CartArticleModel?> updateArticleToCartTimer(ArticleModel article, int newQuantity, {required ProfileModel? profile}) async {
if(_updateArticleTimer[article] != null && _updateArticleTimer[article]!.isActive) _updateArticleTimer[article]!.cancel();

_updateArticleTimer[article] = Timer(Duration(milliseconds: 100), () {
updateArticleToCart(article, newQuantity);
updateArticleToCart(article, newQuantity, profile: profile);
_updateArticleTimer[article] = null;
});
}

Future<void> updateArticleToCart(ArticleModel article, int quantity) async {
Future<void> updateArticleToCart(ArticleModel article, int quantity, {required ProfileModel? profile}) async {
final list = (await cartLocalAPI.select()).where((element) => element.articleId == article.id).toList();
if(list.length <= 0) return;
final item = list[0];

await cartLocalAPI.update(
item..quantity = quantity
);
await loadCart(onlyLocal: true);
await loadCart(onlyLocal: true, profile: profile);
}

Future<bool> articleExistsInCart(ArticleModel article) async => (await cartLocalAPI.select()).where((element) => element.articleId == article.id).length > 0;

Future<void> removeArticleToCart(ArticleModel article) async {
Future<void> removeArticleToCart(ArticleModel article, {required ProfileModel? profile}) async {
final list = (await cartLocalAPI.select()).where((element) => element.articleId == article.id).toList();
if(list.length <= 0) return;
final item = list[0];
await cartLocalAPI.delete(item.id);
await loadCart(onlyLocal: true);
await loadCart(onlyLocal: true, profile: profile);
}

Future<void> clearCart() async{
await cartLocalAPI.clear();
await loadCart();
await loadCart(profile: null);
}

List<int> _getIdsFromArticles(List<CartArticleModel> articles) => articles.map<int>((e) => e.articleId).toList();
Expand Down
3 changes: 2 additions & 1 deletion lib/views/article_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -424,6 +424,7 @@ class __AddToCartButtonState extends State<_AddToCartButton> {

Future<void> _addToCart(BuildContext context) async {
final cartBloc = BlocProvider.of<CartBloc>(context);
final profileBloc = BlocProvider.of<ProfileBloc>(context);
final result = await cartBloc.addArticleToCart(widget.article);
if(result != null){
print(result.id);
Expand All @@ -441,7 +442,7 @@ class __AddToCartButtonState extends State<_AddToCartButton> {
),
));

cartBloc.loadCart();
cartBloc.loadCart(profile: profileBloc.currentProfile);
}

void _goToCartView(BuildContext context){
Expand Down
4 changes: 2 additions & 2 deletions lib/views/cart_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -76,11 +76,11 @@ class _CartViewState extends State<CartView> {
}

Widget getContent(BuildContext context){

final profileBloc = BlocProvider.of<ProfileBloc>(context);
final cartBloc = BlocProvider.of<CartBloc>(context);

final column = FutureBuilder(
future: cartBloc.loadCart(),
future: cartBloc.loadCart(profile: profileBloc.currentProfile),
initialData: cartBloc.loadedCart,
builder: (BuildContext context, AsyncSnapshot<CartModel> snapshot){
List<Widget> cartArticles = [];
Expand Down
3 changes: 2 additions & 1 deletion lib/views/main_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ class _MainViewState extends State<MainView> {
appBloc.mainEcoNavBar = bottomNavBar;

CartBloc cartBloc = BlocProvider.of<CartBloc>(context);
cartBloc.loadCart();
final profileBloc = BlocProvider.of<ProfileBloc>(context);
cartBloc.loadCart(profile: profileBloc.currentProfile);

return Scaffold(
body: SafeArea(child: getContent(context)),
Expand Down
7 changes: 5 additions & 2 deletions lib/views/widgets/articles/cart_article_card.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:awesome_dialog/awesome_dialog.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_ecoapp/bloc/cart_bloc.dart';
import 'package:flutter_ecoapp/bloc/profile_bloc.dart';
import 'package:flutter_ecoapp/models/article.dart';
import 'package:flutter_ecoapp/utils/currency_util.dart';
import 'package:flutter_ecoapp/views/article_view.dart';
Expand Down Expand Up @@ -226,17 +227,19 @@ class _CartArticleCardState extends State<CartArticleCard> {
enableDrag: false
);

final profileBloc = BlocProvider.of<ProfileBloc>(context);
final cartBloc = BlocProvider.of<CartBloc>(context);
await cartBloc.updateArticleToCart(widget.article, _tempQuantity);
await cartBloc.updateArticleToCart(widget.article, _tempQuantity, profile: profileBloc.currentProfile);
setState(() => _quantity = _tempQuantity);
}

void _deleteArticleFromCart(BuildContext context) async {
final profileBloc = BlocProvider.of<ProfileBloc>(context);
final cartBloc = BlocProvider.of<CartBloc>(context);
setState(() {
_deleted = true;
});
await cartBloc.removeArticleToCart(widget.article);
await cartBloc.removeArticleToCart(widget.article, profile: profileBloc.currentProfile);
widget.onDelete();
}
}
Expand Down

0 comments on commit 19bd0a2

Please sign in to comment.