From 10f75191c64bca0302e654378d2c63ee978e9594 Mon Sep 17 00:00:00 2001 From: Fatimah Alshammari Date: Mon, 11 Oct 2021 11:14:36 +0300 Subject: [PATCH 1/4] added shopping cart to categories --- lib/pages/parent_categorise_page.dart | 30 +++++++++++++++++++----- lib/pages/sub_categories_modalsheet.dart | 1 + 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/lib/pages/parent_categorise_page.dart b/lib/pages/parent_categorise_page.dart index ff1fc5b7..0be70de5 100644 --- a/lib/pages/parent_categorise_page.dart +++ b/lib/pages/parent_categorise_page.dart @@ -2,6 +2,7 @@ import 'package:diplomaticquarterapp/config/size_config.dart'; import 'package:diplomaticquarterapp/core/model/pharmacy/categorise_parent_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-detail.dart'; import 'package:diplomaticquarterapp/pages/sub_categorise_page.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; @@ -15,6 +16,7 @@ import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:provider/provider.dart'; import 'package:diplomaticquarterapp/pages/sub_categories_modalsheet.dart'; import 'base/base_view.dart'; @@ -1117,12 +1119,28 @@ class _ParentCategorisePageState extends State { padding: const EdgeInsets .only( - top: 4, - bottom: 4), - child: Texts( - "SAR ${model.parentProducts[index].price}", - bold: true, - fontSize: 14, + top: 1, + bottom: 1), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Texts( + "SAR ${model.parentProducts[index].price}", + bold: true, + fontSize: 14, + ), + Container( + child: IconButton( + icon: Icon(FontAwesomeIcons.shoppingCart, size: 15), + onPressed: () async { + Navigator.push( + context, + FadePage(page: CartOrderPage()), + ); + }, + ), + ), + ], ), ), Row( diff --git a/lib/pages/sub_categories_modalsheet.dart b/lib/pages/sub_categories_modalsheet.dart index f1ff0e08..d6499c8e 100644 --- a/lib/pages/sub_categories_modalsheet.dart +++ b/lib/pages/sub_categories_modalsheet.dart @@ -42,6 +42,7 @@ class _SubCategoriseModalsheetState extends State { appBarTitle: TranslationBase.of(context).categorise, isBottomBar: false, isShowAppBar: true, + isPharmacy: true, backgroundColor: Colors.white, isShowDecPage: false, baseViewModel: model, From 30a1353be637374a2d2fee81d3c39e6e2b4e6cbf Mon Sep 17 00:00:00 2001 From: Fatimah Alshammari Date: Wed, 13 Oct 2021 11:19:42 +0300 Subject: [PATCH 2/4] fixed brands design and recommended products issues --- lib/pages/final_products_page.dart | 14 ++++ lib/pages/landing/landing_page_pharmcy.dart | 1 + lib/pages/parent_categorise_page.dart | 52 +++++++------ lib/pages/pharmacies/product-brands.dart | 2 +- .../pharmacies/screens/cart-order-page.dart | 4 +- .../product-details/product-detail.dart | 7 +- .../product-details/recommended_products.dart | 75 ++++++------------- lib/pages/sub_categorise_page.dart | 14 ++++ 8 files changed, 89 insertions(+), 80 deletions(-) diff --git a/lib/pages/final_products_page.dart b/lib/pages/final_products_page.dart index fff272b3..b4dc51bc 100644 --- a/lib/pages/final_products_page.dart +++ b/lib/pages/final_products_page.dart @@ -1,5 +1,6 @@ import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-detail.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; @@ -605,6 +606,19 @@ class _FinalProductsPageState extends State { ], ), ), + Container( + child: IconButton( + icon: Icon(Icons.shopping_cart, + size: 15, + color: Colors.blue,), + onPressed: () async { + Navigator.push( + context, + FadePage(page: CartOrderPage()), + ); + }, + ), + ), ], ), ), diff --git a/lib/pages/landing/landing_page_pharmcy.dart b/lib/pages/landing/landing_page_pharmcy.dart index 41c4b694..cbc7fc01 100644 --- a/lib/pages/landing/landing_page_pharmcy.dart +++ b/lib/pages/landing/landing_page_pharmcy.dart @@ -130,6 +130,7 @@ class _LandingPagePharmacyState extends State { PharmacyCategorisePage(), PharmacyProfilePage(), CartOrderPage(), + ], ), bottomNavigationBar: BottomNavPharmacyBar( diff --git a/lib/pages/parent_categorise_page.dart b/lib/pages/parent_categorise_page.dart index 0be70de5..07bd20fa 100644 --- a/lib/pages/parent_categorise_page.dart +++ b/lib/pages/parent_categorise_page.dart @@ -1,5 +1,6 @@ import 'package:diplomaticquarterapp/config/size_config.dart'; import 'package:diplomaticquarterapp/core/model/pharmacy/categorise_parent_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/product_detail_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart'; @@ -35,8 +36,9 @@ class ParentCategorisePage extends StatefulWidget { class _ParentCategorisePageState extends State { String id; String titleName; + final dynamic productID; - _ParentCategorisePageState({this.id, this.titleName}); + _ParentCategorisePageState({this.id, this.titleName, this.productID}); Map values = {'huusam': false, 'ali': false, 'noor': false}; bool checkedBrands = false; @@ -1119,28 +1121,11 @@ class _ParentCategorisePageState extends State { padding: const EdgeInsets .only( - top: 1, - bottom: 1), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceAround, - children: [ - Texts( - "SAR ${model.parentProducts[index].price}", - bold: true, - fontSize: 14, - ), - Container( - child: IconButton( - icon: Icon(FontAwesomeIcons.shoppingCart, size: 15), - onPressed: () async { - Navigator.push( - context, - FadePage(page: CartOrderPage()), - ); - }, - ), - ), - ], + top: 4, bottom: 4), + child: Texts( + "SAR ${model.parentProducts[index].price}", + bold: true, + fontSize: 14, ), ), Row( @@ -1172,6 +1157,22 @@ class _ParentCategorisePageState extends State { ], ), ), + Container( + child: IconButton( + icon: Icon(Icons.shopping_cart, + size: 15, + color: Colors.blue,), + onPressed: () async { + GifLoaderDialogUtils.showMyDialog(context); + await addToCartFunction(1, productID); + GifLoaderDialogUtils.hideDialog(context); + Navigator.push( + context, + FadePage(page: CartOrderPage()), + ); + }, + ), + ), ], ), ), @@ -1238,4 +1239,9 @@ class _ParentCategorisePageState extends State { } return false; } + + addToCartFunction(quantity, itemID) async { + ProductDetailViewModel x = new ProductDetailViewModel(); + await x.addToCartData(quantity, itemID); + } } diff --git a/lib/pages/pharmacies/product-brands.dart b/lib/pages/pharmacies/product-brands.dart index 42a78d5c..fb3e38e4 100644 --- a/lib/pages/pharmacies/product-brands.dart +++ b/lib/pages/pharmacies/product-brands.dart @@ -97,7 +97,7 @@ class _ProductBrandsPageState extends State { height: 10, ), Container( - height: 290, + height: 420, width: double.infinity, color: Colors.white, child: ListView.builder( diff --git a/lib/pages/pharmacies/screens/cart-order-page.dart b/lib/pages/pharmacies/screens/cart-order-page.dart index 6f63927d..19acc5c5 100644 --- a/lib/pages/pharmacies/screens/cart-order-page.dart +++ b/lib/pages/pharmacies/screens/cart-order-page.dart @@ -189,7 +189,7 @@ class _CartOrderPageState extends State { fontWeight: FontWeight.bold, ), Texts( - "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}", + "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotalWithVat).toStringAsFixed(2)}", fontSize: 14, color: Colors.black, fontWeight: FontWeight.bold, @@ -368,7 +368,7 @@ class _OrderBottomWidgetState extends State { child: Row( children: [ Texts( - "${TranslationBase.of(context).sar} ${(cart.cartResponse.subtotal).toStringAsFixed(2)}", + "${TranslationBase.of(context).sar} ${(cart.cartResponse.subtotalWithVat).toStringAsFixed(2)}", fontSize: projectProvider.isArabic ? 12 : 14, fontWeight: FontWeight.bold, diff --git a/lib/pages/pharmacies/screens/product-details/product-detail.dart b/lib/pages/pharmacies/screens/product-details/product-detail.dart index ef3b7d8a..83a76a19 100644 --- a/lib/pages/pharmacies/screens/product-details/product-detail.dart +++ b/lib/pages/pharmacies/screens/product-details/product-detail.dart @@ -313,7 +313,12 @@ class __ProductDetailPageState extends State { SizedBox( height: 10, ), - RecommendedProducts(product: widget.product) + RecommendedProducts(product: widget.product,productDetailViewModel: model, + addToWishlistFunction: (itemID) async { + await addToWishlistFunction(itemID: itemID, model: model); + }, deleteFromWishlistFunction: (itemID) async { + await deleteFromWishlistFunction(itemID: itemID, model: model); + },) ], ), ), diff --git a/lib/pages/pharmacies/screens/product-details/recommended_products.dart b/lib/pages/pharmacies/screens/product-details/recommended_products.dart index 2070a29e..6e0fbba9 100644 --- a/lib/pages/pharmacies/screens/product-details/recommended_products.dart +++ b/lib/pages/pharmacies/screens/product-details/recommended_products.dart @@ -1,9 +1,11 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/recommendedProduct_model.dart'; +import 'package:diplomaticquarterapp/core/service/AuthenticatedUserObject.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/product_detail_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-detail.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; @@ -24,6 +26,9 @@ class RecommendedProducts extends StatefulWidget { final Function addToWishlistFunction; final Function deleteFromWishlistFunction; + AuthenticatedUserObject authenticatedUserObject = + locator(); + RecommendedProducts( {Key key, this.product, @@ -134,63 +139,27 @@ class _RecommendedProductsState extends State { child: Align( alignment: Alignment.topRight, child: IconButton( - icon: Icon(model - .recommendedProductList[ - index] - .isinwishlist != - true - ? Icons.favorite_border - : Icons.favorite), - color: model - .recommendedProductList[ - index] - .isinwishlist != - true - ? Colors.grey - : Colors.red, + icon: Icon(model.recommendedProductList[index].isinwishlist != true + ? Icons.favorite_border : Icons.favorite), + color: model.recommendedProductList[index].isinwishlist != true + ? Colors.grey : Colors.red, onPressed: () async { - if (widget.customerId != null) { - if (!widget.isInWishList && - model - .recommendedProductList[ - index] - .isinwishlist != - true) { - GifLoaderDialogUtils - .showMyDialog(context); - await widget.addToWishlistFunction( - itemID: model - .recommendedProductList[ - index] - .id, - model: widget - .productDetailViewModel); -// checkWishlist(); - GifLoaderDialogUtils - .hideDialog(context); + if (widget.authenticatedUserObject.isLogin + ) { + if (!widget.isInWishList && model.recommendedProductList[index].isinwishlist != true) { + GifLoaderDialogUtils.showMyDialog(context); + await widget.addToWishlistFunction(model.recommendedProductList[index].id, + ); + GifLoaderDialogUtils.hideDialog(context); setState(() { - model - .recommendedProductList[ - index] - .isinwishlist = true; - }); + model.recommendedProductList[index].isinwishlist = true;}); } else { - GifLoaderDialogUtils - .showMyDialog(context); - await widget.deleteFromWishlistFunction( - itemID: model - .recommendedProductList[ - index] - .id, - model: widget - .productDetailViewModel); - GifLoaderDialogUtils - .hideDialog(context); + GifLoaderDialogUtils.showMyDialog(context); + await widget.deleteFromWishlistFunction(model.recommendedProductList[index].id, + ); + GifLoaderDialogUtils.hideDialog(context); setState(() { - model - .recommendedProductList[ - index] - .isinwishlist = false; + model.recommendedProductList[index].isinwishlist = false; }); } } else { diff --git a/lib/pages/sub_categorise_page.dart b/lib/pages/sub_categorise_page.dart index bfa7e343..92115cd3 100644 --- a/lib/pages/sub_categorise_page.dart +++ b/lib/pages/sub_categorise_page.dart @@ -1,5 +1,6 @@ import 'package:diplomaticquarterapp/core/model/pharmacy/categorise_parent_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-detail.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; @@ -860,6 +861,19 @@ class _SubCategorisePageState extends State { ], ), ), + Container( + child: IconButton( + icon: Icon(Icons.shopping_cart, + size: 15, + color: Colors.blue,), + onPressed: () async { + Navigator.push( + context, + FadePage(page: CartOrderPage()), + ); + }, + ), + ), ], ), ), From e2763a5bd592a40d64aa5e4d1741b2412a278ebb Mon Sep 17 00:00:00 2001 From: Fatimah Alshammari Date: Sun, 17 Oct 2021 09:37:24 +0300 Subject: [PATCH 3/4] fixed cart shopping issues --- .../pharmacyModule/OrderPreviewViewModel.dart | 11 +++++++ lib/pages/final_products_page.dart | 18 ++++++++++- lib/pages/parent_categorise_page.dart | 32 ++++++++++++++----- .../pharmacies/screens/cart-order-page.dart | 14 ++++++-- .../pharmacies/widgets/ProductOrderItem.dart | 17 ++++++++-- lib/pages/sub_categorise_page.dart | 17 +++++++++- 6 files changed, 94 insertions(+), 15 deletions(-) diff --git a/lib/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart b/lib/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart index 7c86f6b7..48241bf3 100644 --- a/lib/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart +++ b/lib/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart @@ -215,6 +215,17 @@ class OrderPreviewViewModel extends BaseViewModel { setState(ViewState.Idle); } } + + // bool outOfStock = false; + bool checkCardQuantity(){ + bool outOfStock = false; + for (int i = 0; i (); FinalProductsPage({this.id, this.productType = 1}); @@ -606,19 +612,24 @@ class _FinalProductsPageState extends State { ], ), ), + + widget.authenticatedUserObject.isLogin? Container( child: IconButton( icon: Icon(Icons.shopping_cart, size: 15, color: Colors.blue,), onPressed: () async { + GifLoaderDialogUtils.showMyDialog(context); + await addToCartFunction(1, model.finalProducts[index].id); + GifLoaderDialogUtils.hideDialog(context); Navigator.push( context, FadePage(page: CartOrderPage()), ); }, ), - ), + ):Container(), ], ), ), @@ -665,4 +676,9 @@ class _FinalProductsPageState extends State { ), )); } + + addToCartFunction(quantity, itemID) async { + ProductDetailViewModel x = new ProductDetailViewModel(); + await x.addToCartData(quantity, itemID); + } } diff --git a/lib/pages/parent_categorise_page.dart b/lib/pages/parent_categorise_page.dart index 07bd20fa..5c37c837 100644 --- a/lib/pages/parent_categorise_page.dart +++ b/lib/pages/parent_categorise_page.dart @@ -1,8 +1,11 @@ import 'package:diplomaticquarterapp/config/size_config.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart'; import 'package:diplomaticquarterapp/core/model/pharmacy/categorise_parent_model.dart'; +import 'package:diplomaticquarterapp/core/service/AuthenticatedUserObject.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/product_detail_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-detail.dart'; import 'package:diplomaticquarterapp/pages/sub_categorise_page.dart'; @@ -22,10 +25,14 @@ import 'package:provider/provider.dart'; import 'package:diplomaticquarterapp/pages/sub_categories_modalsheet.dart'; import 'base/base_view.dart'; + class ParentCategorisePage extends StatefulWidget { String id; String titleName; + AuthenticatedUserObject authenticatedUserObject = + locator(); + ParentCategorisePage({this.id, this.titleName}); @override @@ -38,7 +45,9 @@ class _ParentCategorisePageState extends State { String titleName; final dynamic productID; - _ParentCategorisePageState({this.id, this.titleName, this.productID}); + + + _ParentCategorisePageState({this.id, this.titleName, this.productID,}); Map values = {'huusam': false, 'ali': false, 'noor': false}; bool checkedBrands = false; @@ -1157,6 +1166,8 @@ class _ParentCategorisePageState extends State { ], ), ), + + widget.authenticatedUserObject.isLogin ? Container( child: IconButton( icon: Icon(Icons.shopping_cart, @@ -1164,15 +1175,15 @@ class _ParentCategorisePageState extends State { color: Colors.blue,), onPressed: () async { GifLoaderDialogUtils.showMyDialog(context); - await addToCartFunction(1, productID); + await addToCartFunction(1, model.parentProducts[index].id); GifLoaderDialogUtils.hideDialog(context); Navigator.push( context, FadePage(page: CartOrderPage()), ); }, - ), - ), + ) + ): Container(), ], ), ), @@ -1220,6 +1231,13 @@ class _ParentCategorisePageState extends State { ), ), )); + + + } + + addToCartFunction(quantity, itemID) async { + ProductDetailViewModel x = new ProductDetailViewModel(); + await x.addToCartData(quantity, itemID); } bool isEntityListSelected(CategoriseParentModel masterKey) { @@ -1240,8 +1258,6 @@ class _ParentCategorisePageState extends State { return false; } - addToCartFunction(quantity, itemID) async { - ProductDetailViewModel x = new ProductDetailViewModel(); - await x.addToCartData(quantity, itemID); - } + + } diff --git a/lib/pages/pharmacies/screens/cart-order-page.dart b/lib/pages/pharmacies/screens/cart-order-page.dart index 6fde76ae..63b72511 100644 --- a/lib/pages/pharmacies/screens/cart-order-page.dart +++ b/lib/pages/pharmacies/screens/cart-order-page.dart @@ -21,17 +21,24 @@ import 'package:provider/provider.dart'; import 'cart-page/cart-order-preview.dart'; class CartOrderPage extends StatefulWidget { - const CartOrderPage({Key key}) : super(key: key); + + + const CartOrderPage({ Key key}) + : super(key: key); + + @override _CartOrderPageState createState() => _CartOrderPageState(); } class _CartOrderPageState extends State { bool isLoading = true; + @override void initState() { super.initState(); getData(); + } @override @@ -269,7 +276,7 @@ class OrderBottomWidget extends StatefulWidget { class _OrderBottomWidgetState extends State { bool isAgree = false; - + bool outOfStock = false; @override Widget build(BuildContext context) { ProjectViewModel projectProvider = Provider.of(context); @@ -391,6 +398,7 @@ class _OrderBottomWidgetState extends State { ), RaisedButton( onPressed: isAgree +// && cart.cartResponse.shoppingCarts[1].product.stockQuantity ==0 ? () => { Navigator.push( context, @@ -398,7 +406,7 @@ class _OrderBottomWidgetState extends State { page: OrderPreviewPage(widget.addresses))) } - : null, + : Text("remove item " ), child: new Text( "${TranslationBase.of(context).checkOut}", style: new TextStyle( diff --git a/lib/pages/pharmacies/widgets/ProductOrderItem.dart b/lib/pages/pharmacies/widgets/ProductOrderItem.dart index d7a82cc6..cb7c59fd 100644 --- a/lib/pages/pharmacies/widgets/ProductOrderItem.dart +++ b/lib/pages/pharmacies/widgets/ProductOrderItem.dart @@ -45,6 +45,7 @@ class _ProductOrderItemState extends State { ), title: Container( child: Row( +// widget.item.product.stock_quantity===0 crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: [ @@ -166,10 +167,22 @@ class _ProductOrderItemState extends State { "$_totalPrice ${projectProvider.isArabic ? widget.item.currencyn : widget.item.currency}", fontSize: 12, fontWeight: FontWeight.bold, - ) + ), + widget.item.product.stockQuantity == 0 ? + Texts( + projectProvider.isArabic + ? widget.item.product.stockAvailabilityn + : widget.item.product.stockAvailability, + fontWeight: FontWeight.normal, + fontSize: 13, + color:Colors.red, + + ): Texts(""), ], ), - ) + ), + + ], ), ) diff --git a/lib/pages/sub_categorise_page.dart b/lib/pages/sub_categorise_page.dart index 92115cd3..cc8db925 100644 --- a/lib/pages/sub_categorise_page.dart +++ b/lib/pages/sub_categorise_page.dart @@ -1,5 +1,8 @@ import 'package:diplomaticquarterapp/core/model/pharmacy/categorise_parent_model.dart'; +import 'package:diplomaticquarterapp/core/service/AuthenticatedUserObject.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/product_detail_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_model.dart'; +import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-detail.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; @@ -21,6 +24,9 @@ class SubCategorisePage extends StatefulWidget { String title; String parentId; + AuthenticatedUserObject authenticatedUserObject = + locator(); + SubCategorisePage({this.id, this.parentId, this.title}); @override @@ -861,19 +867,24 @@ class _SubCategorisePageState extends State { ], ), ), + + widget.authenticatedUserObject.isLogin? Container( child: IconButton( icon: Icon(Icons.shopping_cart, size: 15, color: Colors.blue,), onPressed: () async { + GifLoaderDialogUtils.showMyDialog(context); + await addToCartFunction(1, model.subProducts[index].id); + GifLoaderDialogUtils.hideDialog(context); Navigator.push( context, FadePage(page: CartOrderPage()), ); }, ), - ), + ):Container(), ], ), ), @@ -1137,4 +1148,8 @@ class _SubCategorisePageState extends State { } return false; } + addToCartFunction(quantity, itemID) async { + ProductDetailViewModel x = new ProductDetailViewModel(); + await x.addToCartData(quantity, itemID); + } } From 9cf0794cf6d30f4a7eab2fdac530df8714b40ca3 Mon Sep 17 00:00:00 2001 From: Fatimah Alshammari Date: Mon, 18 Oct 2021 09:42:08 +0300 Subject: [PATCH 4/4] Fixed out of stuck items issues --- lib/config/localized_values.dart | 2 + .../pharmacyModule/OrderPreviewViewModel.dart | 18 +++---- lib/pages/final_products_page.dart | 20 +++++--- lib/pages/parent_categorise_page.dart | 37 +++++++++------ .../pharmacies/screens/cart-order-page.dart | 47 +++++++++++++++---- lib/pages/sub_categorise_page.dart | 44 +++++++++-------- lib/uitl/translations_delegate_base.dart | 2 + 7 files changed, 112 insertions(+), 58 deletions(-) diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 3979e982..ee86ca74 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1091,6 +1091,8 @@ const Map localizedValues = { "camera-permission": {"en": "Camera", "ar": "الكاميرا"}, "location-permission": {"en": "Location", "ar": "تحديد المواقع"}, + "needPrescription": {"en": "This product requires a prescription", "ar": " هذا المنتج يتطلب وصفة طبية"}, + "outOfStockMsg": {"en": "You have added product which is out of stock now, Please remove that!", "ar": "لقد قمت بإضافة المنتج الذي نفذ من المخزون الآن. يرجى إزالة ذلك"}, "accessibility": {"en": "Accessibility Mode", "ar": "وضع امكانية الوصول"}, "orderStatus": {"en": "Order Status", "ar": "حالة الطلب"}, "CancelOrder": {"en": "Cancel Order", "ar": "الغاء الطلب"}, diff --git a/lib/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart b/lib/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart index 48241bf3..0a03b2ca 100644 --- a/lib/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart +++ b/lib/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart @@ -42,9 +42,11 @@ class OrderPreviewViewModel extends BaseViewModel { getShoppingCart(); } } - void update(){ + + void update() { notifyListeners(); } + Future getShoppingCart() async { // setState(ViewState.Busy); // GifLoaderDialogUtils.showMyDialog( @@ -61,7 +63,7 @@ class OrderPreviewViewModel extends BaseViewModel { } // GifLoaderDialogUtils.hideDialog( // locator().navigatorKey.currentContext); - setState(ViewState.Idle); + setState(ViewState.Idle); } } @@ -216,15 +218,15 @@ class OrderPreviewViewModel extends BaseViewModel { } } - // bool outOfStock = false; - bool checkCardQuantity(){ - bool outOfStock = false; - for (int i = 0; i { context) .size .width / - 3.5 + 5.3 : 0, padding: EdgeInsets.all( @@ -613,21 +614,28 @@ class _FinalProductsPageState extends State { ), ), - widget.authenticatedUserObject.isLogin? - Container( + widget.authenticatedUserObject.isLogin + ? Container( child: IconButton( icon: Icon(Icons.shopping_cart, - size: 15, + size: 18, color: Colors.blue,), onPressed: () async { GifLoaderDialogUtils.showMyDialog(context); + if(model.finalProducts[index].rxMessage == null){ await addToCartFunction(1, model.finalProducts[index].id); - GifLoaderDialogUtils.hideDialog(context); +// GifLoaderDialogUtils.hideDialog(context); Navigator.push( context, FadePage(page: CartOrderPage()), ); - }, + } + else{ + AppToast.showErrorToast(message: TranslationBase.of(context).needPrescription); + } + GifLoaderDialogUtils.hideDialog(context); + } + ), ):Container(), ], diff --git a/lib/pages/parent_categorise_page.dart b/lib/pages/parent_categorise_page.dart index 5c37c837..1ac20946 100644 --- a/lib/pages/parent_categorise_page.dart +++ b/lib/pages/parent_categorise_page.dart @@ -9,6 +9,7 @@ import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-detail.dart'; import 'package:diplomaticquarterapp/pages/sub_categorise_page.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; @@ -1047,7 +1048,7 @@ class _ParentCategorisePageState extends State { context) .size .width / - 5 + 5.3 : 0, padding: EdgeInsets.all(4), @@ -1169,20 +1170,26 @@ class _ParentCategorisePageState extends State { widget.authenticatedUserObject.isLogin ? Container( - child: IconButton( - icon: Icon(Icons.shopping_cart, - size: 15, - color: Colors.blue,), - onPressed: () async { - GifLoaderDialogUtils.showMyDialog(context); - await addToCartFunction(1, model.parentProducts[index].id); - GifLoaderDialogUtils.hideDialog(context); - Navigator.push( - context, - FadePage(page: CartOrderPage()), - ); - }, - ) + child: IconButton( + icon: Icon(Icons.shopping_cart, + size: 18, + color: Colors.blue,), + onPressed: () async { + GifLoaderDialogUtils.showMyDialog(context); + if(model.parentProducts[index].rxMessage == null){ + await addToCartFunction(1, model.parentProducts[index].id); + Navigator.push( + context, + FadePage(page: CartOrderPage()), + ); + } + else{ + AppToast.showErrorToast(message: TranslationBase.of(context).needPrescription); + } + GifLoaderDialogUtils.hideDialog(context); + } + + ), ): Container(), ], ), diff --git a/lib/pages/pharmacies/screens/cart-order-page.dart b/lib/pages/pharmacies/screens/cart-order-page.dart index 63b72511..f9c928eb 100644 --- a/lib/pages/pharmacies/screens/cart-order-page.dart +++ b/lib/pages/pharmacies/screens/cart-order-page.dart @@ -6,6 +6,7 @@ import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/pharmacy-terms-conditions-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/widgets/ProductOrderItem.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; @@ -276,7 +277,7 @@ class OrderBottomWidget extends StatefulWidget { class _OrderBottomWidgetState extends State { bool isAgree = false; - bool outOfStock = false; + @override Widget build(BuildContext context) { ProjectViewModel projectProvider = Provider.of(context); @@ -400,23 +401,49 @@ class _OrderBottomWidgetState extends State { onPressed: isAgree // && cart.cartResponse.shoppingCarts[1].product.stockQuantity ==0 ? () => { - Navigator.push( - context, - FadePage( - page: - OrderPreviewPage(widget.addresses))) - } - : Text("remove item " ), + if(cart.isCartItemsOutOfStock()){ + // Toast msg + AppToast.showErrorToast(message: TranslationBase.of(context).outOfStockMsg) + }else { + Navigator.push( + context, + FadePage( + page: + OrderPreviewPage(widget.addresses))) + } + } + : null, child: new Text( "${TranslationBase.of(context).checkOut}", style: new TextStyle( color: - isAgree ? Colors.white : Colors.grey.shade300, + isAgree ? Colors.white : Colors.grey.shade300, fontSize: 14), ), color: Color(0xff005aff), disabledColor: Color(0xff005aff), - ), + ) +// RaisedButton( +// onPressed: isAgree +//// && cart.cartResponse.shoppingCarts[1].product.stockQuantity ==0 +// ? () => { +// Navigator.push( +// context, +// FadePage( +// page: +// OrderPreviewPage(widget.addresses))) +// } +// : null, +// child: new Text( +// "${TranslationBase.of(context).checkOut}", +// style: new TextStyle( +// color: +// isAgree ? Colors.white : Colors.grey.shade300, +// fontSize: 14), +// ), +// color: Color(0xff005aff), +// disabledColor: Color(0xff005aff), +// ) ], ), ), diff --git a/lib/pages/sub_categorise_page.dart b/lib/pages/sub_categorise_page.dart index cc8db925..3fb1574f 100644 --- a/lib/pages/sub_categorise_page.dart +++ b/lib/pages/sub_categorise_page.dart @@ -5,6 +5,7 @@ import 'package:diplomaticquarterapp/core/viewModels/pharmacy_categorise_view_mo import 'package:diplomaticquarterapp/locator.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-detail.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/widgets/buttons/button.dart'; @@ -867,24 +868,6 @@ class _SubCategorisePageState extends State { ], ), ), - - widget.authenticatedUserObject.isLogin? - Container( - child: IconButton( - icon: Icon(Icons.shopping_cart, - size: 15, - color: Colors.blue,), - onPressed: () async { - GifLoaderDialogUtils.showMyDialog(context); - await addToCartFunction(1, model.subProducts[index].id); - GifLoaderDialogUtils.hideDialog(context); - Navigator.push( - context, - FadePage(page: CartOrderPage()), - ); - }, - ), - ):Container(), ], ), ), @@ -967,7 +950,7 @@ class _SubCategorisePageState extends State { context) .size .width / - 5 + 5.3 : 0, padding: EdgeInsets.all(4), @@ -1082,6 +1065,29 @@ class _SubCategorisePageState extends State { ], ), ), + widget.authenticatedUserObject.isLogin? + Container( + child: IconButton( + icon: Icon(Icons.shopping_cart, + size: 18, + color: Colors.blue,), + onPressed: () async { + GifLoaderDialogUtils.showMyDialog(context); + if(model.subProducts[index].rxMessage == null){ + await addToCartFunction(1, model.subProducts[index].id); +// GifLoaderDialogUtils.hideDialog(context); + Navigator.push( + context, + FadePage(page: CartOrderPage()), + );} + else{ + AppToast.showErrorToast(message: TranslationBase.of(context).needPrescription); + } + GifLoaderDialogUtils.hideDialog(context); + } + + ), + ):Container(), ], ), ), diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index d8c3ff7b..6a131d09 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -1365,6 +1365,8 @@ class TranslationBase { String get referralNumber => localizedValues['referralNumber'][locale.languageCode]; + String get needPrescription => localizedValues['needPrescription'][locale.languageCode]; + String get outOfStockMsg => localizedValues['outOfStockMsg'][locale.languageCode]; String get requestID => localizedValues['requestID'][locale.languageCode]; String get OrderStatus => localizedValues['OrderStatus'][locale.languageCode]; String get pickupDate => localizedValues['pickupDate'][locale.languageCode];