From 10f75191c64bca0302e654378d2c63ee978e9594 Mon Sep 17 00:00:00 2001 From: Fatimah Alshammari Date: Mon, 11 Oct 2021 11:14:36 +0300 Subject: [PATCH 01/11] 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 2526d6bc6fa0f17c99f664e7da1d8ed9f9ad1965 Mon Sep 17 00:00:00 2001 From: Elham Rababh Date: Tue, 12 Oct 2021 10:29:49 +0300 Subject: [PATCH 02/11] fix issue in cart page --- .../pharmacies/payment-checkout-data.dart | 6 +- .../pharmacyModule/OrderPreviewViewModel.dart | 2 +- .../screens/cart-order-preview.dart | 516 +++++++++--------- .../pharmacyAddresses/PharmacyAddresses.dart | 2 + 4 files changed, 261 insertions(+), 265 deletions(-) diff --git a/lib/core/model/pharmacies/payment-checkout-data.dart b/lib/core/model/pharmacies/payment-checkout-data.dart index dd9e0e54..5d91c829 100644 --- a/lib/core/model/pharmacies/payment-checkout-data.dart +++ b/lib/core/model/pharmacies/payment-checkout-data.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'ShippingOption.dart'; -class PaymentCheckoutData with ChangeNotifier{ +class PaymentCheckoutData { Addresses address; PaymentOption paymentOption; LacumAccountInformation lacumInformation; @@ -15,7 +15,5 @@ class PaymentCheckoutData with ChangeNotifier{ PaymentCheckoutData({this.address, this.paymentOption, this.lacumInformation, this.cartDataVisible = false, this.shippingOption, this.usedLakumPoints = 0}); - void updateData() { - notifyListeners(); - } + } diff --git a/lib/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart b/lib/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart index 801f6fb7..7c86f6b7 100644 --- a/lib/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart +++ b/lib/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart @@ -192,7 +192,7 @@ class OrderPreviewViewModel extends BaseViewModel { .getShippingOption(paymentCheckoutData.address) .then((res) { paymentCheckoutData.shippingOption = ShippingOption.fromJson(res); - paymentCheckoutData.updateData(); + setState(ViewState.Idle); }); if (_orderService.hasError) { error = _orderService.error; diff --git a/lib/pages/pharmacies/screens/cart-order-preview.dart b/lib/pages/pharmacies/screens/cart-order-preview.dart index f6e1d392..ec2828ce 100644 --- a/lib/pages/pharmacies/screens/cart-order-preview.dart +++ b/lib/pages/pharmacies/screens/cart-order-preview.dart @@ -3,6 +3,7 @@ import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/order_detail.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/payment-checkout-data.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; @@ -79,20 +80,18 @@ class _OrderPreviewPageState extends State { SizedBox( height: 10, ), - Consumer( - builder: (ctx, paymentData, _) => - paymentData.lacumInformation != null - ? Container( - child: Column( - children: [ - LakumWidget(model), - SizedBox( - height: 10, - ), - ], - ), - ) - : Container()), + model.paymentCheckoutData.lacumInformation != null + ? Container( + child: Column( + children: [ + LakumWidget(model), + SizedBox( + height: 10, + ), + ], + ), + ) + : Container(), Container( color: Colors.white, width: double.infinity, @@ -227,7 +226,8 @@ class _OrderPreviewPageState extends State { ], ) : Container(), - ) + ), + SizedBox(height: model.cartResponse.shoppingCarts != null ? height * 0.10 : 0,) ], ), ), @@ -284,162 +284,161 @@ class _SelectAddressWidgetState extends State { @override Widget build(BuildContext context) { - return Consumer( - builder: (ctx, paymentData, _) => Container( - color: Colors.white, - child: address == null - ? InkWell( - onTap: () => {_navigateToAddressPage()}, + OrderPreviewViewModel model = Provider.of(context); + return Container( + color: Colors.white, + child: address == null + ? InkWell( + onTap: () => {_navigateToAddressPage()}, + child: Container( + margin: EdgeInsets.symmetric(vertical: 12, horizontal: 12), + child: Row( + children: [ + Image.asset( + "assets/images/pharmacy_module/ic_shipping_address.png", + width: 30.0, + height: 30.0, + fit: BoxFit.scaleDown, + ), + Expanded( child: Container( - margin: EdgeInsets.symmetric(vertical: 12, horizontal: 12), - child: Row( - children: [ - Image.asset( - "assets/images/pharmacy_module/ic_shipping_address.png", - width: 30.0, - height: 30.0, - fit: BoxFit.scaleDown, - ), - Expanded( - child: Container( - padding: - EdgeInsets.symmetric(vertical: 0, horizontal: 6), - child: Texts( - TranslationBase.of(context).selectAddress, - fontSize: 14, - fontWeight: FontWeight.bold, - color: Color(0xff0000ff), - ), - ), - ), - Icon( - Icons.arrow_forward_ios, - size: 20, - color: Colors.grey.shade400, - ), - ], + padding: + EdgeInsets.symmetric(vertical: 0, horizontal: 6), + child: Texts( + TranslationBase.of(context).selectAddress, + fontSize: 14, + fontWeight: FontWeight.bold, + color: Color(0xff0000ff), ), ), - ) - : Container( - child: Container( - margin: EdgeInsets.symmetric(vertical: 12, horizontal: 12), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Image.asset( - "assets/images/pharmacy_module/ic_shipping_mark.png", - width: 30.0, - height: 30.0, - fit: BoxFit.scaleDown, - ), - Expanded( - child: Container( - padding: EdgeInsets.symmetric( - vertical: 0, horizontal: 6), - child: Texts( - TranslationBase.of(context).shippingAddress, - fontSize: 14, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ), - ), - InkWell( - onTap: () => {_navigateToAddressPage()}, - child: Texts( - TranslationBase.of(context).changeAddress, - fontSize: 12, - fontWeight: FontWeight.normal, - color: Color(0xff0000ff), - ), - ), - ], - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 8), - child: Texts( - "${address.firstName} ${address.lastName}", - fontSize: 14, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 8), - child: Texts( - "${address.address1} ${address.address2} ${address.address2},, ${address.city}, ${address.country} ${address.zipPostalCode}", - fontSize: 12, - fontWeight: FontWeight.normal, - color: Colors.grey.shade500, - ), - ), - Row( - children: [ - Container( - margin: const EdgeInsets.only(right: 8), - child: Icon( - Icons.phone, - size: 20, - color: Colors.black, - ), - ), - Texts( - "${address.phoneNumber}", - fontSize: 14, - fontWeight: FontWeight.bold, - color: Colors.grey, - ), - ], - ), - Container( - margin: EdgeInsets.symmetric(vertical: 8), - child: SizedBox( - height: 2, - width: double.infinity, - child: Container( - color: Color(0xffefefef), - ), - ), - ), - Row( - children: [ - Image.asset( - "assets/images/pharmacy_module/ic_shipping_truck.png", - width: 30.0, - height: 30.0, - fit: BoxFit.scaleDown, - ), - Container( - padding: EdgeInsets.symmetric( - vertical: 0, horizontal: 6), - child: Texts( - "${TranslationBase.of(context).shipBy}", - fontSize: 12, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ), - Container( - child: Image.asset( - paymentData.shippingOption - .shippingRateComputationMethodSystemName == - "Shipping.FixedOrByWeight" - ? "assets/images/pharmacy_module/payment/hmg_shipping_logo.png" - : "assets/images/pharmacy_module/payment/aramex_shipping_logo.png", - fit: BoxFit.contain, - ), - margin: EdgeInsets.symmetric(horizontal: 8), - ), - ], + ), + Icon( + Icons.arrow_forward_ios, + size: 20, + color: Colors.grey.shade400, + ), + ], + ), + ), + ) + : Container( + child: Container( + margin: EdgeInsets.symmetric(vertical: 12, horizontal: 12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Image.asset( + "assets/images/pharmacy_module/ic_shipping_mark.png", + width: 30.0, + height: 30.0, + fit: BoxFit.scaleDown, + ), + Expanded( + child: Container( + padding: EdgeInsets.symmetric( + vertical: 0, horizontal: 6), + child: Texts( + TranslationBase.of(context).shippingAddress, + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.black, ), - ], + ), + ), + InkWell( + onTap: () => {_navigateToAddressPage()}, + child: Texts( + TranslationBase.of(context).changeAddress, + fontSize: 12, + fontWeight: FontWeight.normal, + color: Color(0xff0000ff), + ), ), + ], + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 8), + child: Texts( + "${address.firstName} ${address.lastName}", + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.black, ), - ), // ic_shipping_mark.png - ), + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 8), + child: Texts( + "${address.address1} ${address.address2} ${address.address2},, ${address.city}, ${address.country} ${address.zipPostalCode}", + fontSize: 12, + fontWeight: FontWeight.normal, + color: Colors.grey.shade500, + ), + ), + Row( + children: [ + Container( + margin: const EdgeInsets.only(right: 8), + child: Icon( + Icons.phone, + size: 20, + color: Colors.black, + ), + ), + Texts( + "${address.phoneNumber}", + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.grey, + ), + ], + ), + Container( + margin: EdgeInsets.symmetric(vertical: 8), + child: SizedBox( + height: 2, + width: double.infinity, + child: Container( + color: Color(0xffefefef), + ), + ), + ), + Row( + children: [ + Image.asset( + "assets/images/pharmacy_module/ic_shipping_truck.png", + width: 30.0, + height: 30.0, + fit: BoxFit.scaleDown, + ), + Container( + padding: EdgeInsets.symmetric( + vertical: 0, horizontal: 6), + child: Texts( + "${TranslationBase.of(context).shipBy}", + fontSize: 12, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + Container( + child: Image.asset( + model.paymentCheckoutData.shippingOption==null?"": model.paymentCheckoutData.shippingOption + .shippingRateComputationMethodSystemName == + "Shipping.FixedOrByWeight" + ? "assets/images/pharmacy_module/payment/hmg_shipping_logo.png" + : "assets/images/pharmacy_module/payment/aramex_shipping_logo.png", + fit: BoxFit.contain, + ), + margin: EdgeInsets.symmetric(horizontal: 8), + ), + ], + ), + ], + ), + ), + ), // ic_shipping_mark.png ); } } @@ -465,7 +464,6 @@ class _SelectPaymentOptionWidgetState extends State { paymentOption = result; widget.model.paymentCheckoutData.paymentOption = paymentOption; - widget.model.paymentCheckoutData.updateData(); } }) }); @@ -744,105 +742,103 @@ class PaymentBottomWidget extends StatelessWidget { Widget build(BuildContext context) { final scaffold = Scaffold.of(context); this.context = context; - + OrderPreviewViewModel orderPreviewViewModel = Provider.of(context); return Container( margin: EdgeInsets.symmetric(horizontal: 10, vertical: 0), - child: Consumer( - builder: (ctx, paymentData, _) => paymentData.cartDataVisible - ? Container( - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - margin: - EdgeInsets.symmetric(horizontal: 0, vertical: 4), - child: Row( - children: [ - Texts( - "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}", - fontSize: 14, - fontWeight: FontWeight.bold, - color: Color(0xff929295), - ), - Padding( - padding: - const EdgeInsets.symmetric(horizontal: 4), - child: Texts( - "${TranslationBase.of(context).inclusiveVat}", - fontSize: 8, - color: Color(0xff929295), - fontWeight: FontWeight.w600, - ), - ), - ], - ), - ), - Texts( - "${model.cartResponse.quantityCount} ${TranslationBase.of(context).items}", - fontSize: 10, - color: Colors.grey, - fontWeight: FontWeight.bold, - ), - ], - ), - Container( - child: RaisedButton( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - side: BorderSide( - color: Color(0xff929295), - width: 1, - ), - ), - onPressed: (paymentData.address != null && - paymentData.paymentOption != null) - ? () async { - await model.makeOrder(); - if (model.state == ViewState.Idle) { - AppToast.showSuccessToast( - message: - "Order has been placed successfully!!"); - openPayment( - model.orderListModel[0], model.user); - } else { - AppToast.showErrorToast(message: model.error); - } - Navigator.pop(context); - Navigator.pop(context); - } - : null, - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 16), - child: new Text( - "${TranslationBase.of(context).proceedPay}", - style: new TextStyle( - color: (paymentData.address != null && - paymentData.paymentOption != null) - ? Colors.white - : Colors.grey.shade400, - fontWeight: FontWeight.bold, - fontSize: 12), - ), + child: orderPreviewViewModel.paymentCheckoutData.cartDataVisible + ? Container( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Container( + margin: + EdgeInsets.symmetric(horizontal: 0, vertical: 4), + child: Row( + children: [ + Texts( + "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}", + fontSize: 14, + fontWeight: FontWeight.bold, + color: Color(0xff929295), + ), + Padding( + padding: + const EdgeInsets.symmetric(horizontal: 4), + child: Texts( + "${TranslationBase.of(context).inclusiveVat}", + fontSize: 8, + color: Color(0xff929295), + fontWeight: FontWeight.w600, ), - color: (paymentData.address != null && - paymentData.paymentOption != null) - ? Colors.green - : Color(0xff929295), - disabledColor: (paymentData.address != null && - paymentData.paymentOption != null) - ? Colors.green - : Color(0xff929295), ), - ), - ], + ], + ), ), - ) - : Container(), - ), + Texts( + "${model.cartResponse.quantityCount} ${TranslationBase.of(context).items}", + fontSize: 10, + color: Colors.grey, + fontWeight: FontWeight.bold, + ), + ], + ), + Container( + child: RaisedButton( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8), + side: BorderSide( + color: Color(0xff929295), + width: 1, + ), + ), + onPressed: (orderPreviewViewModel.paymentCheckoutData.address != null && + orderPreviewViewModel.paymentCheckoutData.paymentOption != null) + ? () async { + await model.makeOrder(); + if (model.state == ViewState.Idle) { + AppToast.showSuccessToast( + message: + "Order has been placed successfully!!"); + openPayment( + model.orderListModel[0], model.user); + } else { + AppToast.showErrorToast(message: model.error); + } + Navigator.pop(context); + Navigator.pop(context); + } + : null, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 16), + child: new Text( + "${TranslationBase.of(context).proceedPay}", + style: new TextStyle( + color: (orderPreviewViewModel.paymentCheckoutData.address != null && + orderPreviewViewModel.paymentCheckoutData.paymentOption != null) + ? Colors.white + : Colors.grey.shade400, + fontWeight: FontWeight.bold, + fontSize: 12), + ), + ), + color: (orderPreviewViewModel.paymentCheckoutData.address != null && + orderPreviewViewModel.paymentCheckoutData.paymentOption != null) + ? Colors.green + : Color(0xff929295), + disabledColor: (orderPreviewViewModel.paymentCheckoutData.address != null && + orderPreviewViewModel.paymentCheckoutData.paymentOption != null) + ? Colors.green + : Color(0xff929295), + ), + ), + ], + ), + ) + : Container(), ); } diff --git a/lib/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart b/lib/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart index 51256e11..8670f0d2 100644 --- a/lib/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart +++ b/lib/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart @@ -78,6 +78,8 @@ class _PharmacyAddressesState extends State { }, ), ), + SizedBox(height: height * 0.10,) + ], ), ), From 75fdadafbd160eb7f3695d1515351fe2242008c6 Mon Sep 17 00:00:00 2001 From: Elham Rababh Date: Tue, 12 Oct 2021 10:39:33 +0300 Subject: [PATCH 03/11] refactor widget in the cart preview --- lib/pages/landing/landing_page_pharmcy.dart | 2 +- .../screens/cart-order-preview.dart | 899 ------------------ .../{ => cart-page}/cart-order-page.dart | 9 +- .../screens/cart-page/cart-order-preview.dart | 238 +++++ .../screens/cart-page/lakum_widget.dart | 187 ++++ .../cart-page/payment_bottom_widget.dart | 195 ++++ .../cart-page/select_address_widget.dart | 226 +++++ .../select_payment_option_widget.dart | 146 +++ .../product-details/footor/footer-widget.dart | 2 +- .../shared/product_details_app_bar.dart | 2 +- lib/widgets/others/app_scaffold_widget.dart | 2 +- lib/widgets/pharmacy/product_tile.dart | 2 +- 12 files changed, 1000 insertions(+), 910 deletions(-) delete mode 100644 lib/pages/pharmacies/screens/cart-order-preview.dart rename lib/pages/pharmacies/screens/{ => cart-page}/cart-order-page.dart (97%) create mode 100644 lib/pages/pharmacies/screens/cart-page/cart-order-preview.dart create mode 100644 lib/pages/pharmacies/screens/cart-page/lakum_widget.dart create mode 100644 lib/pages/pharmacies/screens/cart-page/payment_bottom_widget.dart create mode 100644 lib/pages/pharmacies/screens/cart-page/select_address_widget.dart create mode 100644 lib/pages/pharmacies/screens/cart-page/select_payment_option_widget.dart diff --git a/lib/pages/landing/landing_page_pharmcy.dart b/lib/pages/landing/landing_page_pharmcy.dart index 5094db04..8b2204f4 100644 --- a/lib/pages/landing/landing_page_pharmcy.dart +++ b/lib/pages/landing/landing_page_pharmcy.dart @@ -5,7 +5,7 @@ import 'package:diplomaticquarterapp/core/service/client/base_app_client.dart'; import 'package:diplomaticquarterapp/core/service/parmacyModule/parmacy_module_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-detail.dart'; -import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-page/cart-order-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/pharmacy_module_page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/wishlist.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/profile/profile.dart'; diff --git a/lib/pages/pharmacies/screens/cart-order-preview.dart b/lib/pages/pharmacies/screens/cart-order-preview.dart deleted file mode 100644 index ec2828ce..00000000 --- a/lib/pages/pharmacies/screens/cart-order-preview.dart +++ /dev/null @@ -1,899 +0,0 @@ -import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; -import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart'; -import 'package:diplomaticquarterapp/core/model/pharmacies/order_detail.dart'; -import 'package:diplomaticquarterapp/core/model/pharmacies/payment-checkout-data.dart'; -import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart'; -import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart'; -import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; -import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; -import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; -import 'package:diplomaticquarterapp/pages/base/base_view.dart'; -import 'package:diplomaticquarterapp/pages/pharmacies/screens/payment-method-select-page.dart'; -import 'package:diplomaticquarterapp/pages/pharmacies/widgets/ProductOrderPreviewItem.dart'; -import 'package:diplomaticquarterapp/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart'; -import 'package:diplomaticquarterapp/uitl/app_toast.dart'; -import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; -import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; -import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; -import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; -import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart'; -import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; - -class OrderPreviewPage extends StatefulWidget { - final List addresses; - - OrderPreviewPage(this.addresses); - - @override - _OrderPreviewPageState createState() => _OrderPreviewPageState(); -} - -class _OrderPreviewPageState extends State { - MyInAppBrowser browser; - bool isLoading = true; - - @override - void initState() { - super.initState(); - getData(); - } - - void getData() async { - if (isLoading) - await Provider.of(context, listen: false) - .getShoppingCart(); - setState(() { - isLoading = false; - }); - } - - @override - Widget build(BuildContext context) { - - final mediaQuery = MediaQuery.of(context); - final height = mediaQuery.size.height - 60 - mediaQuery.padding.top; - OrderPreviewViewModel model = Provider.of(context); - return AppScaffold( - appBarTitle: "${TranslationBase.of(context).checkOut}", - isShowAppBar: true, - isPharmacy: true, - isShowDecPage: false, - isLoading: isLoading, - isLocalLoader: true, - backgroundColor: Colors.white, - // baseViewModel: model, - body: Container( - color: Color(0xFFF1F1F1), - height: height * 0.90, - child: SingleChildScrollView( - child: Container( - color: Color(0xFFF1F1F1), - child: Column( - children: [ - SelectAddressWidget(model, widget.addresses), - SizedBox( - height: 10, - ), - SelectPaymentOptionWidget(model), - SizedBox( - height: 10, - ), - model.paymentCheckoutData.lacumInformation != null - ? Container( - child: Column( - children: [ - LakumWidget(model), - SizedBox( - height: 10, - ), - ], - ), - ) - : Container(), - Container( - color: Colors.white, - width: double.infinity, - padding: EdgeInsets.all(8), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Texts( - TranslationBase.of(context).reviewOrder, - fontSize: 14, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ...List.generate( - model.cartResponse.shoppingCarts != null - ? model.cartResponse.shoppingCarts.length - : 0, - (index) => ProductOrderPreviewItem( - model.cartResponse.shoppingCarts[index]), - ), - ], - ), - ), - Container( - width: double.infinity, - padding: EdgeInsets.all(8), - child: model.cartResponse.subtotal != null - ? Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Texts( - TranslationBase.of(context).orderSummary, - fontSize: 14, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - SizedBox( - height: 20, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Texts( - "${TranslationBase.of(context).subtotal}", - fontSize: 14, - color: Colors.black, - fontWeight: FontWeight.w500, - ), - Texts( - "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}", - fontSize: 14, - color: Colors.black, - fontWeight: FontWeight.w500, - ), - ], - ), - const Divider( - color: Color(0xFFD6D6D6), - height: 20, - thickness: 1, - indent: 0, - endIndent: 0, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Texts( - "${TranslationBase.of(context).shipping}", - fontSize: 14, - color: Colors.black, - fontWeight: FontWeight.w500, - ), - Texts( - "${TranslationBase.of(context).sar} ${(model.totalAdditionalShippingCharge).toStringAsFixed(2)}", - fontSize: 14, - color: Colors.black, - fontWeight: FontWeight.w500, - ), - ], - ), - const Divider( - color: Color(0xFFD6D6D6), - height: 20, - thickness: 1, - indent: 0, - endIndent: 0, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Texts( - "${TranslationBase.of(context).vat}", - fontSize: 14, - color: Colors.black, - fontWeight: FontWeight.w500, - ), - Texts( - "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotalVatAmount).toStringAsFixed(2)}", - fontSize: 14, - color: Colors.black, - fontWeight: FontWeight.w500, - ), - ], - ), - const Divider( - color: Color(0xFFD6D6D6), - height: 20, - thickness: 1, - indent: 0, - endIndent: 0, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Texts( - TranslationBase.of(context).total, - fontSize: 14, - color: Colors.black, - fontWeight: FontWeight.bold, - ), - Texts( - "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}", - fontSize: 14, - color: Colors.black, - fontWeight: FontWeight.bold, - ), - ], - ), - SizedBox( - height: 10, - ), - ], - ) - : Container(), - ), - SizedBox(height: model.cartResponse.shoppingCarts != null ? height * 0.10 : 0,) - ], - ), - ), - ), - ), - bottomSheet: Container( - height: model.cartResponse.shoppingCarts != null ? height * 0.10 : 0, - color: Colors.white, - child: PaymentBottomWidget(model), - ), - ); - } -} - -class SelectAddressWidget extends StatefulWidget { - final OrderPreviewViewModel model; - final List addresses; - - SelectAddressWidget(this.model, this.addresses); - - @override - _SelectAddressWidgetState createState() => _SelectAddressWidgetState(); -} - -class _SelectAddressWidgetState extends State { - Addresses address; - - _navigateToAddressPage() { - Navigator.push(context, FadePage(page: PharmacyAddressesPage())) - .then((result) { - if (result != null) { - address = result; - widget.model.paymentCheckoutData.address = address; - widget.model.getInformationsByAddress(); - } - - /* setState(() { - if (result != null) { - address = result; - widget.model.paymentCheckoutData.address = address; - widget.model.getInformationsByAddress(); - } - })*/ - }); - } - - @override - void initState() { - if (widget.model.paymentCheckoutData.address != null) { - address = widget.model.paymentCheckoutData.address; - } - super.initState(); - } - - @override - Widget build(BuildContext context) { - OrderPreviewViewModel model = Provider.of(context); - return Container( - color: Colors.white, - child: address == null - ? InkWell( - onTap: () => {_navigateToAddressPage()}, - child: Container( - margin: EdgeInsets.symmetric(vertical: 12, horizontal: 12), - child: Row( - children: [ - Image.asset( - "assets/images/pharmacy_module/ic_shipping_address.png", - width: 30.0, - height: 30.0, - fit: BoxFit.scaleDown, - ), - Expanded( - child: Container( - padding: - EdgeInsets.symmetric(vertical: 0, horizontal: 6), - child: Texts( - TranslationBase.of(context).selectAddress, - fontSize: 14, - fontWeight: FontWeight.bold, - color: Color(0xff0000ff), - ), - ), - ), - Icon( - Icons.arrow_forward_ios, - size: 20, - color: Colors.grey.shade400, - ), - ], - ), - ), - ) - : Container( - child: Container( - margin: EdgeInsets.symmetric(vertical: 12, horizontal: 12), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Image.asset( - "assets/images/pharmacy_module/ic_shipping_mark.png", - width: 30.0, - height: 30.0, - fit: BoxFit.scaleDown, - ), - Expanded( - child: Container( - padding: EdgeInsets.symmetric( - vertical: 0, horizontal: 6), - child: Texts( - TranslationBase.of(context).shippingAddress, - fontSize: 14, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ), - ), - InkWell( - onTap: () => {_navigateToAddressPage()}, - child: Texts( - TranslationBase.of(context).changeAddress, - fontSize: 12, - fontWeight: FontWeight.normal, - color: Color(0xff0000ff), - ), - ), - ], - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 8), - child: Texts( - "${address.firstName} ${address.lastName}", - fontSize: 14, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 8), - child: Texts( - "${address.address1} ${address.address2} ${address.address2},, ${address.city}, ${address.country} ${address.zipPostalCode}", - fontSize: 12, - fontWeight: FontWeight.normal, - color: Colors.grey.shade500, - ), - ), - Row( - children: [ - Container( - margin: const EdgeInsets.only(right: 8), - child: Icon( - Icons.phone, - size: 20, - color: Colors.black, - ), - ), - Texts( - "${address.phoneNumber}", - fontSize: 14, - fontWeight: FontWeight.bold, - color: Colors.grey, - ), - ], - ), - Container( - margin: EdgeInsets.symmetric(vertical: 8), - child: SizedBox( - height: 2, - width: double.infinity, - child: Container( - color: Color(0xffefefef), - ), - ), - ), - Row( - children: [ - Image.asset( - "assets/images/pharmacy_module/ic_shipping_truck.png", - width: 30.0, - height: 30.0, - fit: BoxFit.scaleDown, - ), - Container( - padding: EdgeInsets.symmetric( - vertical: 0, horizontal: 6), - child: Texts( - "${TranslationBase.of(context).shipBy}", - fontSize: 12, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ), - Container( - child: Image.asset( - model.paymentCheckoutData.shippingOption==null?"": model.paymentCheckoutData.shippingOption - .shippingRateComputationMethodSystemName == - "Shipping.FixedOrByWeight" - ? "assets/images/pharmacy_module/payment/hmg_shipping_logo.png" - : "assets/images/pharmacy_module/payment/aramex_shipping_logo.png", - fit: BoxFit.contain, - ), - margin: EdgeInsets.symmetric(horizontal: 8), - ), - ], - ), - ], - ), - ), - ), // ic_shipping_mark.png - ); - } -} - -class SelectPaymentOptionWidget extends StatefulWidget { - final OrderPreviewViewModel model; - - SelectPaymentOptionWidget(this.model); - - @override - _SelectPaymentOptionWidgetState createState() => - _SelectPaymentOptionWidgetState(); -} - -class _SelectPaymentOptionWidgetState extends State { - PaymentOption paymentOption; - - _navigateToPaymentOption() { - Navigator.push(context, FadePage(page: PaymentMethodSelectPage())) - .then((result) => { - setState(() { - if (result != null) { - paymentOption = result; - widget.model.paymentCheckoutData.paymentOption = - paymentOption; - } - }) - }); - } - - @override - void initState() { - if (widget.model.paymentCheckoutData.paymentOption != null) { - paymentOption = widget.model.paymentCheckoutData.paymentOption; - } - super.initState(); - } - - @override - Widget build(BuildContext context) { - return Container( - color: Colors.white, - child: paymentOption == null - ? InkWell( - onTap: () => {_navigateToPaymentOption()}, - child: Container( - margin: EdgeInsets.symmetric(vertical: 12, horizontal: 12), - child: Row( - children: [ - Image.asset( - "assets/images/pharmacy_module/ic_payment_option.png", - width: 30.0, - height: 30.0, - fit: BoxFit.scaleDown, - ), - Expanded( - child: Container( - padding: - EdgeInsets.symmetric(vertical: 0, horizontal: 6), - child: Texts( - TranslationBase.of(context).selectPaymentOption, - fontSize: 14, - fontWeight: FontWeight.bold, - color: Color(0xff0000ff), - ), - ), - ), - Icon( - Icons.arrow_forward_ios, - size: 20, - color: Colors.grey.shade400, - ), - ], - ), - ), - ) - : Container( - margin: EdgeInsets.symmetric(vertical: 12, horizontal: 12), - child: Row( - children: [ - Image.asset( - "assets/images/pharmacy_module/ic_payment_option.png", - width: 30.0, - height: 30.0, - fit: BoxFit.scaleDown, - ), - Container( - margin: EdgeInsets.symmetric(horizontal: 8), - padding: EdgeInsets.symmetric(horizontal: 4, vertical: 0), - decoration: new BoxDecoration( - color: Colors.grey.shade100, - shape: BoxShape.rectangle, - ), - child: Image.asset( - widget.model.getPaymentOptionImage(paymentOption), - width: 30.0, - height: 30.0, - fit: BoxFit.scaleDown, - ), - ), - Expanded( - child: Container( - padding: EdgeInsets.symmetric(vertical: 0, horizontal: 6), - child: Texts( - widget.model.getPaymentOptionName(paymentOption), - fontSize: 14, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ), - ), - InkWell( - onTap: () => {_navigateToPaymentOption()}, - child: Texts( - TranslationBase.of(context).changeMethod, - fontSize: 12, - fontWeight: FontWeight.normal, - color: Color(0xff0000ff), - ), - ), - ], - ), - ), - ); - } -} - -class LakumWidget extends StatefulWidget { - final OrderPreviewViewModel model; - - LakumWidget(this.model); - - @override - _LakumWidgetState createState() => _LakumWidgetState(); -} - -class _LakumWidgetState extends State { - TextEditingController _pointsController = new TextEditingController(); - - @override - Widget build(BuildContext context) { - ProjectViewModel projectProvider = Provider.of(context); - - return Container( - color: Colors.white, - padding: EdgeInsets.symmetric(vertical: 12, horizontal: 12), - child: Row( - children: [ - Image.asset( - "assets/images/pharmacy_module/lakum/lakum_checkout.png", - width: 30.0, - fit: BoxFit.scaleDown, - ), - Container( - decoration: BoxDecoration(color: Color(0x99ffffff)), - padding: const EdgeInsets.symmetric(horizontal: 8), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Texts( - "${TranslationBase.of(context).lakumPoints}", - fontSize: 12, - fontWeight: FontWeight.bold, - ), - Texts( - "${widget.model.paymentCheckoutData.lacumInformation.lakumInquiryInformationObjVersion.pointsBalanceAmount}", - fontSize: 12, - fontWeight: FontWeight.normal, - ), - ], - ), - ), - Expanded( - child: Container( - decoration: BoxDecoration(color: Color(0x99ffffff)), - padding: const EdgeInsets.symmetric(horizontal: 8), - child: Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Texts( - "${TranslationBase.of(context).riyal}", - fontSize: 12, - fontWeight: FontWeight.bold, - ), - Container( - margin: projectProvider.isArabic - ? EdgeInsets.only(right: 4) - : EdgeInsets.only(left: 4), - width: 60, - height: 50, - child: TextField( - decoration: InputDecoration( - border: OutlineInputBorder( - borderSide: - BorderSide(color: Colors.black, width: 0.2), - gapPadding: 0, - borderRadius: projectProvider.isArabic - ? BorderRadius.only( - topRight: Radius.circular(8), - bottomRight: Radius.circular(8)) - : BorderRadius.only( - topLeft: Radius.circular(8), - bottomLeft: Radius.circular(8)), - ), - disabledBorder: OutlineInputBorder( - borderSide: - BorderSide(color: Colors.black, width: 0.4), - gapPadding: 0, - borderRadius: BorderRadius.only( - topLeft: Radius.circular(8), - bottomLeft: Radius.circular(8)), - ), - ), - controller: _pointsController, - keyboardType: TextInputType.number, - style: TextStyle( - fontSize: 14, - color: widget - .model - .paymentCheckoutData - .lacumInformation - .lakumInquiryInformationObjVersion - .pointsBalanceAmount > - 0 - ? Colors.black - : Colors.grey, - ), - enabled: widget - .model - .paymentCheckoutData - .lacumInformation - .lakumInquiryInformationObjVersion - .pointsBalanceAmount == - 0 - ? false - : true, - onChanged: (val) { - var value = int.tryParse(val); - if (value != null && - value <= - widget - .model - .paymentCheckoutData - .lacumInformation - .lakumInquiryInformationObjVersion - .pointsBalanceAmount) { - widget.model.paymentCheckoutData.usedLakumPoints = - value; - } else { - widget.model.paymentCheckoutData.usedLakumPoints = 0; - } - _pointsController.text = - "${widget.model.paymentCheckoutData.usedLakumPoints}"; - }, - ), - ), - Container( - height: 50, - padding: EdgeInsets.symmetric(horizontal: 8, vertical: 12), - decoration: new BoxDecoration( - color: Color(0xff3666E0), - shape: BoxShape.rectangle, - borderRadius: projectProvider.isArabic - ? BorderRadius.only( - topLeft: Radius.circular(6), - bottomLeft: Radius.circular(6)) - : BorderRadius.only( - topRight: Radius.circular(6), - bottomRight: Radius.circular(6)), - border: Border.fromBorderSide(BorderSide( - color: Color(0xff3666E0), - width: 0.8, - )), - ), - child: Texts( - "${TranslationBase.of(context).use}", - fontSize: 12, - color: Colors.white, - fontWeight: FontWeight.bold, - ), - ), - ], - ), - ), - ), - ], - ), - ); - } -} - -class PaymentBottomWidget extends StatelessWidget { - final OrderPreviewViewModel model; - - BuildContext context; - MyInAppBrowser browser; - - PaymentBottomWidget(this.model); - - @override - Widget build(BuildContext context) { - final scaffold = Scaffold.of(context); - this.context = context; - OrderPreviewViewModel orderPreviewViewModel = Provider.of(context); - return Container( - margin: EdgeInsets.symmetric(horizontal: 10, vertical: 0), - child: orderPreviewViewModel.paymentCheckoutData.cartDataVisible - ? Container( - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - margin: - EdgeInsets.symmetric(horizontal: 0, vertical: 4), - child: Row( - children: [ - Texts( - "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}", - fontSize: 14, - fontWeight: FontWeight.bold, - color: Color(0xff929295), - ), - Padding( - padding: - const EdgeInsets.symmetric(horizontal: 4), - child: Texts( - "${TranslationBase.of(context).inclusiveVat}", - fontSize: 8, - color: Color(0xff929295), - fontWeight: FontWeight.w600, - ), - ), - ], - ), - ), - Texts( - "${model.cartResponse.quantityCount} ${TranslationBase.of(context).items}", - fontSize: 10, - color: Colors.grey, - fontWeight: FontWeight.bold, - ), - ], - ), - Container( - child: RaisedButton( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - side: BorderSide( - color: Color(0xff929295), - width: 1, - ), - ), - onPressed: (orderPreviewViewModel.paymentCheckoutData.address != null && - orderPreviewViewModel.paymentCheckoutData.paymentOption != null) - ? () async { - await model.makeOrder(); - if (model.state == ViewState.Idle) { - AppToast.showSuccessToast( - message: - "Order has been placed successfully!!"); - openPayment( - model.orderListModel[0], model.user); - } else { - AppToast.showErrorToast(message: model.error); - } - Navigator.pop(context); - Navigator.pop(context); - } - : null, - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 16), - child: new Text( - "${TranslationBase.of(context).proceedPay}", - style: new TextStyle( - color: (orderPreviewViewModel.paymentCheckoutData.address != null && - orderPreviewViewModel.paymentCheckoutData.paymentOption != null) - ? Colors.white - : Colors.grey.shade400, - fontWeight: FontWeight.bold, - fontSize: 12), - ), - ), - color: (orderPreviewViewModel.paymentCheckoutData.address != null && - orderPreviewViewModel.paymentCheckoutData.paymentOption != null) - ? Colors.green - : Color(0xff929295), - disabledColor: (orderPreviewViewModel.paymentCheckoutData.address != null && - orderPreviewViewModel.paymentCheckoutData.paymentOption != null) - ? Colors.green - : Color(0xff929295), - ), - ), - ], - ), - ) - : Container(), - ); - } - - openPayment( - OrderDetailModel order, - AuthenticatedUser authenticatedUser, - ) { - browser = new MyInAppBrowser( - onExitCallback: onBrowserExit, onLoadStartCallback: onBrowserLoadStart); - - browser.openPharmacyPaymentBrowser( - order, - order.orderTotal, - 'ePharmacy Order', - order.id, - order.billingAddress.email, - order.customValuesXml, - "${authenticatedUser.firstName} ${authenticatedUser.middleName} ${authenticatedUser.lastName}", - authenticatedUser.patientID, - authenticatedUser, - browser); - } - - onBrowserLoadStart(String url) { - print("onBrowserLoadStart"); - print(url); - - MyInAppBrowser.successURLS.forEach((element) { - if (url.contains(element)) { - if (browser.isOpened()) browser.close(); - MyInAppBrowser.isPaymentDone = true; - return; - } - }); - - MyInAppBrowser.errorURLS.forEach((element) { - if (url.contains(element)) { - if (browser.isOpened()) browser.close(); - MyInAppBrowser.isPaymentDone = false; - return; - } - }); - } - - onBrowserExit(AppoitmentAllHistoryResultList appo, bool isPaymentMade) { - print("onBrowserExit Called!!!!"); - if (isPaymentMade) { - AppToast.showSuccessToast( - message: "شكراً\nPayment status for your order is Paid"); - Navigator.pop(context); - Navigator.pop(context); - } else { - AppToast.showErrorToast( - message: - "Transaction Failed!\Your transaction is field to some reason please try again or contact to the administration"); - } - } -} diff --git a/lib/pages/pharmacies/screens/cart-order-page.dart b/lib/pages/pharmacies/screens/cart-page/cart-order-page.dart similarity index 97% rename from lib/pages/pharmacies/screens/cart-order-page.dart rename to lib/pages/pharmacies/screens/cart-page/cart-order-page.dart index fe469b32..ef4904b2 100644 --- a/lib/pages/pharmacies/screens/cart-order-page.dart +++ b/lib/pages/pharmacies/screens/cart-page/cart-order-page.dart @@ -1,13 +1,10 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart'; -import 'package:diplomaticquarterapp/core/model/pharmacies/ShoppingCartResponse.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart'; import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; -import 'package:diplomaticquarterapp/pages/base/base_view.dart'; -import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-preview.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-page/cart-order-preview.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/pharmacy-terms-conditions-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/widgets/ProductOrderItem.dart'; -import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/widgets/buttons/GestureIconButton.dart'; @@ -16,7 +13,6 @@ import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; -import 'package:http/http.dart'; import 'package:provider/provider.dart'; class CartOrderPage extends StatefulWidget { @@ -55,7 +51,8 @@ class _CartOrderPageState extends State { showHomeAppBarIcon: false, isShowDecPage: true, baseViewModel: model, - backButtonTab: widget.changeTab != null ? () => widget.changeTab(0) : null, + backButtonTab: + widget.changeTab != null ? () => widget.changeTab(0) : null, backgroundColor: Colors.white, body: !(model.cartResponse.shoppingCarts == null || model.cartResponse.shoppingCarts.length == 0) diff --git a/lib/pages/pharmacies/screens/cart-page/cart-order-preview.dart b/lib/pages/pharmacies/screens/cart-page/cart-order-preview.dart new file mode 100644 index 00000000..25c02dd0 --- /dev/null +++ b/lib/pages/pharmacies/screens/cart-page/cart-order-preview.dart @@ -0,0 +1,238 @@ +import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-page/payment_bottom_widget.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-page/select_address_widget.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-page/select_payment_option_widget.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/widgets/ProductOrderPreviewItem.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +import 'lakum_widget.dart'; + +class OrderPreviewPage extends StatefulWidget { + final List addresses; + + OrderPreviewPage(this.addresses); + + @override + _OrderPreviewPageState createState() => _OrderPreviewPageState(); +} + +class _OrderPreviewPageState extends State { + MyInAppBrowser browser; + bool isLoading = true; + + @override + void initState() { + super.initState(); + getData(); + } + + void getData() async { + if (isLoading) + await Provider.of(context, listen: false) + .getShoppingCart(); + setState(() { + isLoading = false; + }); + } + + @override + Widget build(BuildContext context) { + final mediaQuery = MediaQuery.of(context); + final height = mediaQuery.size.height - 60 - mediaQuery.padding.top; + OrderPreviewViewModel model = Provider.of(context); + return AppScaffold( + appBarTitle: "${TranslationBase.of(context).checkOut}", + isShowAppBar: true, + isPharmacy: true, + isShowDecPage: false, + isLoading: isLoading, + isLocalLoader: true, + backgroundColor: Colors.white, + // baseViewModel: model, + body: Container( + color: Color(0xFFF1F1F1), + height: height * 0.90, + child: SingleChildScrollView( + child: Container( + color: Color(0xFFF1F1F1), + child: Column( + children: [ + SelectAddressWidget(model, widget.addresses), + SizedBox( + height: 10, + ), + SelectPaymentOptionWidget(model), + SizedBox( + height: 10, + ), + model.paymentCheckoutData.lacumInformation != null + ? Container( + child: Column( + children: [ + LakumWidget(model), + SizedBox( + height: 10, + ), + ], + ), + ) + : Container(), + Container( + color: Colors.white, + width: double.infinity, + padding: EdgeInsets.all(8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Texts( + TranslationBase.of(context).reviewOrder, + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ...List.generate( + model.cartResponse.shoppingCarts != null + ? model.cartResponse.shoppingCarts.length + : 0, + (index) => ProductOrderPreviewItem( + model.cartResponse.shoppingCarts[index]), + ), + ], + ), + ), + Container( + width: double.infinity, + padding: EdgeInsets.all(8), + child: model.cartResponse.subtotal != null + ? Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Texts( + TranslationBase.of(context).orderSummary, + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + SizedBox( + height: 20, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Texts( + "${TranslationBase.of(context).subtotal}", + fontSize: 14, + color: Colors.black, + fontWeight: FontWeight.w500, + ), + Texts( + "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}", + fontSize: 14, + color: Colors.black, + fontWeight: FontWeight.w500, + ), + ], + ), + const Divider( + color: Color(0xFFD6D6D6), + height: 20, + thickness: 1, + indent: 0, + endIndent: 0, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Texts( + "${TranslationBase.of(context).shipping}", + fontSize: 14, + color: Colors.black, + fontWeight: FontWeight.w500, + ), + Texts( + "${TranslationBase.of(context).sar} ${(model.totalAdditionalShippingCharge).toStringAsFixed(2)}", + fontSize: 14, + color: Colors.black, + fontWeight: FontWeight.w500, + ), + ], + ), + const Divider( + color: Color(0xFFD6D6D6), + height: 20, + thickness: 1, + indent: 0, + endIndent: 0, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Texts( + "${TranslationBase.of(context).vat}", + fontSize: 14, + color: Colors.black, + fontWeight: FontWeight.w500, + ), + Texts( + "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotalVatAmount).toStringAsFixed(2)}", + fontSize: 14, + color: Colors.black, + fontWeight: FontWeight.w500, + ), + ], + ), + const Divider( + color: Color(0xFFD6D6D6), + height: 20, + thickness: 1, + indent: 0, + endIndent: 0, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Texts( + TranslationBase.of(context).total, + fontSize: 14, + color: Colors.black, + fontWeight: FontWeight.bold, + ), + Texts( + "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}", + fontSize: 14, + color: Colors.black, + fontWeight: FontWeight.bold, + ), + ], + ), + SizedBox( + height: 10, + ), + ], + ) + : Container(), + ), + SizedBox( + height: model.cartResponse.shoppingCarts != null + ? height * 0.10 + : 0, + ) + ], + ), + ), + ), + ), + bottomSheet: Container( + height: model.cartResponse.shoppingCarts != null ? height * 0.10 : 0, + color: Colors.white, + child: PaymentBottomWidget(model), + ), + ); + } +} diff --git a/lib/pages/pharmacies/screens/cart-page/lakum_widget.dart b/lib/pages/pharmacies/screens/cart-page/lakum_widget.dart new file mode 100644 index 00000000..cdd26ddc --- /dev/null +++ b/lib/pages/pharmacies/screens/cart-page/lakum_widget.dart @@ -0,0 +1,187 @@ +import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/order_detail.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/payment-checkout-data.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; +import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-page/payment_bottom_widget.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/payment-method-select-page.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/widgets/ProductOrderPreviewItem.dart'; +import 'package:diplomaticquarterapp/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart'; +import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class LakumWidget extends StatefulWidget { + final OrderPreviewViewModel model; + + LakumWidget(this.model); + + @override + _LakumWidgetState createState() => _LakumWidgetState(); +} + +class _LakumWidgetState extends State { + TextEditingController _pointsController = new TextEditingController(); + + @override + Widget build(BuildContext context) { + ProjectViewModel projectProvider = Provider.of(context); + + return Container( + color: Colors.white, + padding: EdgeInsets.symmetric(vertical: 12, horizontal: 12), + child: Row( + children: [ + Image.asset( + "assets/images/pharmacy_module/lakum/lakum_checkout.png", + width: 30.0, + fit: BoxFit.scaleDown, + ), + Container( + decoration: BoxDecoration(color: Color(0x99ffffff)), + padding: const EdgeInsets.symmetric(horizontal: 8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Texts( + "${TranslationBase.of(context).lakumPoints}", + fontSize: 12, + fontWeight: FontWeight.bold, + ), + Texts( + "${widget.model.paymentCheckoutData.lacumInformation.lakumInquiryInformationObjVersion.pointsBalanceAmount}", + fontSize: 12, + fontWeight: FontWeight.normal, + ), + ], + ), + ), + Expanded( + child: Container( + decoration: BoxDecoration(color: Color(0x99ffffff)), + padding: const EdgeInsets.symmetric(horizontal: 8), + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Texts( + "${TranslationBase.of(context).riyal}", + fontSize: 12, + fontWeight: FontWeight.bold, + ), + Container( + margin: projectProvider.isArabic + ? EdgeInsets.only(right: 4) + : EdgeInsets.only(left: 4), + width: 60, + height: 50, + child: TextField( + decoration: InputDecoration( + border: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.black, width: 0.2), + gapPadding: 0, + borderRadius: projectProvider.isArabic + ? BorderRadius.only( + topRight: Radius.circular(8), + bottomRight: Radius.circular(8)) + : BorderRadius.only( + topLeft: Radius.circular(8), + bottomLeft: Radius.circular(8)), + ), + disabledBorder: OutlineInputBorder( + borderSide: + BorderSide(color: Colors.black, width: 0.4), + gapPadding: 0, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(8), + bottomLeft: Radius.circular(8)), + ), + ), + controller: _pointsController, + keyboardType: TextInputType.number, + style: TextStyle( + fontSize: 14, + color: widget + .model + .paymentCheckoutData + .lacumInformation + .lakumInquiryInformationObjVersion + .pointsBalanceAmount > + 0 + ? Colors.black + : Colors.grey, + ), + enabled: widget + .model + .paymentCheckoutData + .lacumInformation + .lakumInquiryInformationObjVersion + .pointsBalanceAmount == + 0 + ? false + : true, + onChanged: (val) { + var value = int.tryParse(val); + if (value != null && + value <= + widget + .model + .paymentCheckoutData + .lacumInformation + .lakumInquiryInformationObjVersion + .pointsBalanceAmount) { + widget.model.paymentCheckoutData.usedLakumPoints = + value; + } else { + widget.model.paymentCheckoutData.usedLakumPoints = 0; + } + _pointsController.text = + "${widget.model.paymentCheckoutData.usedLakumPoints}"; + }, + ), + ), + Container( + height: 50, + padding: EdgeInsets.symmetric(horizontal: 8, vertical: 12), + decoration: new BoxDecoration( + color: Color(0xff3666E0), + shape: BoxShape.rectangle, + borderRadius: projectProvider.isArabic + ? BorderRadius.only( + topLeft: Radius.circular(6), + bottomLeft: Radius.circular(6)) + : BorderRadius.only( + topRight: Radius.circular(6), + bottomRight: Radius.circular(6)), + border: Border.fromBorderSide(BorderSide( + color: Color(0xff3666E0), + width: 0.8, + )), + ), + child: Texts( + "${TranslationBase.of(context).use}", + fontSize: 12, + color: Colors.white, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/pages/pharmacies/screens/cart-page/payment_bottom_widget.dart b/lib/pages/pharmacies/screens/cart-page/payment_bottom_widget.dart new file mode 100644 index 00000000..e0063878 --- /dev/null +++ b/lib/pages/pharmacies/screens/cart-page/payment_bottom_widget.dart @@ -0,0 +1,195 @@ +import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/order_detail.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart'; +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class PaymentBottomWidget extends StatelessWidget { + final OrderPreviewViewModel model; + + BuildContext context; + MyInAppBrowser browser; + + PaymentBottomWidget(this.model); + + @override + Widget build(BuildContext context) { + final scaffold = Scaffold.of(context); + this.context = context; + OrderPreviewViewModel orderPreviewViewModel = Provider.of(context); + return Container( + margin: EdgeInsets.symmetric(horizontal: 10, vertical: 0), + child: orderPreviewViewModel.paymentCheckoutData.cartDataVisible + ? Container( + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Container( + margin: + EdgeInsets.symmetric(horizontal: 0, vertical: 4), + child: Row( + children: [ + Texts( + "${TranslationBase.of(context).sar} ${(model.cartResponse.subtotal).toStringAsFixed(2)}", + fontSize: 14, + fontWeight: FontWeight.bold, + color: Color(0xff929295), + ), + Padding( + padding: + const EdgeInsets.symmetric(horizontal: 4), + child: Texts( + "${TranslationBase.of(context).inclusiveVat}", + fontSize: 8, + color: Color(0xff929295), + fontWeight: FontWeight.w600, + ), + ), + ], + ), + ), + Texts( + "${model.cartResponse.quantityCount} ${TranslationBase.of(context).items}", + fontSize: 10, + color: Colors.grey, + fontWeight: FontWeight.bold, + ), + ], + ), + Container( + child: RaisedButton( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8), + side: BorderSide( + color: Color(0xff929295), + width: 1, + ), + ), + onPressed: (orderPreviewViewModel + .paymentCheckoutData.address != + null && + orderPreviewViewModel + .paymentCheckoutData.paymentOption != + null) + ? () async { + await model.makeOrder(); + if (model.state == ViewState.Idle) { + AppToast.showSuccessToast( + message: + "Order has been placed successfully!!"); + openPayment( + model.orderListModel[0], model.user); + } else { + AppToast.showErrorToast(message: model.error); + } + Navigator.pop(context); + Navigator.pop(context); + } + : null, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 16), + child: new Text( + "${TranslationBase.of(context).proceedPay}", + style: new TextStyle( + color: (orderPreviewViewModel + .paymentCheckoutData.address != + null && + orderPreviewViewModel.paymentCheckoutData + .paymentOption != + null) + ? Colors.white + : Colors.grey.shade400, + fontWeight: FontWeight.bold, + fontSize: 12), + ), + ), + color: + (orderPreviewViewModel.paymentCheckoutData.address != + null && + orderPreviewViewModel + .paymentCheckoutData.paymentOption != + null) + ? Colors.green + : Color(0xff929295), + disabledColor: + (orderPreviewViewModel.paymentCheckoutData.address != + null && + orderPreviewViewModel + .paymentCheckoutData.paymentOption != + null) + ? Colors.green + : Color(0xff929295), + ), + ), + ], + ), + ) + : Container(), + ); + } + + openPayment( + OrderDetailModel order, + AuthenticatedUser authenticatedUser, + ) { + browser = new MyInAppBrowser( + onExitCallback: onBrowserExit, onLoadStartCallback: onBrowserLoadStart); + + browser.openPharmacyPaymentBrowser( + order, + order.orderTotal, + 'ePharmacy Order', + order.id, + order.billingAddress.email, + order.customValuesXml, + "${authenticatedUser.firstName} ${authenticatedUser.middleName} ${authenticatedUser.lastName}", + authenticatedUser.patientID, + authenticatedUser, + browser); + } + + onBrowserLoadStart(String url) { + print("onBrowserLoadStart"); + print(url); + + MyInAppBrowser.successURLS.forEach((element) { + if (url.contains(element)) { + if (browser.isOpened()) browser.close(); + MyInAppBrowser.isPaymentDone = true; + return; + } + }); + + MyInAppBrowser.errorURLS.forEach((element) { + if (url.contains(element)) { + if (browser.isOpened()) browser.close(); + MyInAppBrowser.isPaymentDone = false; + return; + } + }); + } + + onBrowserExit(AppoitmentAllHistoryResultList appo, bool isPaymentMade) { + print("onBrowserExit Called!!!!"); + if (isPaymentMade) { + AppToast.showSuccessToast( + message: "شكراً\nPayment status for your order is Paid"); + Navigator.pop(context); + Navigator.pop(context); + } else { + AppToast.showErrorToast( + message: + "Transaction Failed!\Your transaction is field to some reason please try again or contact to the administration"); + } + } +} diff --git a/lib/pages/pharmacies/screens/cart-page/select_address_widget.dart b/lib/pages/pharmacies/screens/cart-page/select_address_widget.dart new file mode 100644 index 00000000..bf958a36 --- /dev/null +++ b/lib/pages/pharmacies/screens/cart-page/select_address_widget.dart @@ -0,0 +1,226 @@ +import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/order_detail.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/payment-checkout-data.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; +import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-page/payment_bottom_widget.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/payment-method-select-page.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/widgets/ProductOrderPreviewItem.dart'; +import 'package:diplomaticquarterapp/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart'; +import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class SelectAddressWidget extends StatefulWidget { + final OrderPreviewViewModel model; + final List addresses; + + SelectAddressWidget(this.model, this.addresses); + + @override + _SelectAddressWidgetState createState() => _SelectAddressWidgetState(); +} + +class _SelectAddressWidgetState extends State { + Addresses address; + + _navigateToAddressPage() { + Navigator.push(context, FadePage(page: PharmacyAddressesPage())) + .then((result) { + if (result != null) { + address = result; + widget.model.paymentCheckoutData.address = address; + widget.model.getInformationsByAddress(); + } + + /* setState(() { + if (result != null) { + address = result; + widget.model.paymentCheckoutData.address = address; + widget.model.getInformationsByAddress(); + } + })*/ + }); + } + + @override + void initState() { + if (widget.model.paymentCheckoutData.address != null) { + address = widget.model.paymentCheckoutData.address; + } + super.initState(); + } + + @override + Widget build(BuildContext context) { + OrderPreviewViewModel model = Provider.of(context); + return Container( + color: Colors.white, + child: address == null + ? InkWell( + onTap: () => {_navigateToAddressPage()}, + child: Container( + margin: EdgeInsets.symmetric(vertical: 12, horizontal: 12), + child: Row( + children: [ + Image.asset( + "assets/images/pharmacy_module/ic_shipping_address.png", + width: 30.0, + height: 30.0, + fit: BoxFit.scaleDown, + ), + Expanded( + child: Container( + padding: + EdgeInsets.symmetric(vertical: 0, horizontal: 6), + child: Texts( + TranslationBase.of(context).selectAddress, + fontSize: 14, + fontWeight: FontWeight.bold, + color: Color(0xff0000ff), + ), + ), + ), + Icon( + Icons.arrow_forward_ios, + size: 20, + color: Colors.grey.shade400, + ), + ], + ), + ), + ) + : Container( + child: Container( + margin: EdgeInsets.symmetric(vertical: 12, horizontal: 12), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Image.asset( + "assets/images/pharmacy_module/ic_shipping_mark.png", + width: 30.0, + height: 30.0, + fit: BoxFit.scaleDown, + ), + Expanded( + child: Container( + padding: EdgeInsets.symmetric( + vertical: 0, horizontal: 6), + child: Texts( + TranslationBase.of(context).shippingAddress, + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + ), + InkWell( + onTap: () => {_navigateToAddressPage()}, + child: Texts( + TranslationBase.of(context).changeAddress, + fontSize: 12, + fontWeight: FontWeight.normal, + color: Color(0xff0000ff), + ), + ), + ], + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 8), + child: Texts( + "${address.firstName} ${address.lastName}", + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 8), + child: Texts( + "${address.address1} ${address.address2} ${address.address2},, ${address.city}, ${address.country} ${address.zipPostalCode}", + fontSize: 12, + fontWeight: FontWeight.normal, + color: Colors.grey.shade500, + ), + ), + Row( + children: [ + Container( + margin: const EdgeInsets.only(right: 8), + child: Icon( + Icons.phone, + size: 20, + color: Colors.black, + ), + ), + Texts( + "${address.phoneNumber}", + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.grey, + ), + ], + ), + Container( + margin: EdgeInsets.symmetric(vertical: 8), + child: SizedBox( + height: 2, + width: double.infinity, + child: Container( + color: Color(0xffefefef), + ), + ), + ), + Row( + children: [ + Image.asset( + "assets/images/pharmacy_module/ic_shipping_truck.png", + width: 30.0, + height: 30.0, + fit: BoxFit.scaleDown, + ), + Container( + padding: + EdgeInsets.symmetric(vertical: 0, horizontal: 6), + child: Texts( + "${TranslationBase.of(context).shipBy}", + fontSize: 12, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + Container( + child: Image.asset( + model.paymentCheckoutData.shippingOption == null + ? "" + : model.paymentCheckoutData.shippingOption + .shippingRateComputationMethodSystemName == + "Shipping.FixedOrByWeight" + ? "assets/images/pharmacy_module/payment/hmg_shipping_logo.png" + : "assets/images/pharmacy_module/payment/aramex_shipping_logo.png", + fit: BoxFit.contain, + ), + margin: EdgeInsets.symmetric(horizontal: 8), + ), + ], + ), + ], + ), + ), + ), // ic_shipping_mark.png + ); + } +} diff --git a/lib/pages/pharmacies/screens/cart-page/select_payment_option_widget.dart b/lib/pages/pharmacies/screens/cart-page/select_payment_option_widget.dart new file mode 100644 index 00000000..9234bb38 --- /dev/null +++ b/lib/pages/pharmacies/screens/cart-page/select_payment_option_widget.dart @@ -0,0 +1,146 @@ +import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/Addresses.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/order_detail.dart'; +import 'package:diplomaticquarterapp/core/model/pharmacies/payment-checkout-data.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreviewViewModel.dart'; +import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/order_model_view_model.dart'; +import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; +import 'package:diplomaticquarterapp/pages/base/base_view.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-page/payment_bottom_widget.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/payment-method-select-page.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/widgets/ProductOrderPreviewItem.dart'; +import 'package:diplomaticquarterapp/pages/pharmacy/pharmacyAddresses/PharmacyAddresses.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; +import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart'; +import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class SelectPaymentOptionWidget extends StatefulWidget { + final OrderPreviewViewModel model; + + SelectPaymentOptionWidget(this.model); + + @override + _SelectPaymentOptionWidgetState createState() => + _SelectPaymentOptionWidgetState(); +} + +class _SelectPaymentOptionWidgetState extends State { + PaymentOption paymentOption; + + _navigateToPaymentOption() { + Navigator.push(context, FadePage(page: PaymentMethodSelectPage())) + .then((result) => { + setState(() { + if (result != null) { + paymentOption = result; + widget.model.paymentCheckoutData.paymentOption = + paymentOption; + } + }) + }); + } + + @override + void initState() { + if (widget.model.paymentCheckoutData.paymentOption != null) { + paymentOption = widget.model.paymentCheckoutData.paymentOption; + } + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Container( + color: Colors.white, + child: paymentOption == null + ? InkWell( + onTap: () => {_navigateToPaymentOption()}, + child: Container( + margin: EdgeInsets.symmetric(vertical: 12, horizontal: 12), + child: Row( + children: [ + Image.asset( + "assets/images/pharmacy_module/ic_payment_option.png", + width: 30.0, + height: 30.0, + fit: BoxFit.scaleDown, + ), + Expanded( + child: Container( + padding: + EdgeInsets.symmetric(vertical: 0, horizontal: 6), + child: Texts( + TranslationBase.of(context).selectPaymentOption, + fontSize: 14, + fontWeight: FontWeight.bold, + color: Color(0xff0000ff), + ), + ), + ), + Icon( + Icons.arrow_forward_ios, + size: 20, + color: Colors.grey.shade400, + ), + ], + ), + ), + ) + : Container( + margin: EdgeInsets.symmetric(vertical: 12, horizontal: 12), + child: Row( + children: [ + Image.asset( + "assets/images/pharmacy_module/ic_payment_option.png", + width: 30.0, + height: 30.0, + fit: BoxFit.scaleDown, + ), + Container( + margin: EdgeInsets.symmetric(horizontal: 8), + padding: EdgeInsets.symmetric(horizontal: 4, vertical: 0), + decoration: new BoxDecoration( + color: Colors.grey.shade100, + shape: BoxShape.rectangle, + ), + child: Image.asset( + widget.model.getPaymentOptionImage(paymentOption), + width: 30.0, + height: 30.0, + fit: BoxFit.scaleDown, + ), + ), + Expanded( + child: Container( + padding: EdgeInsets.symmetric(vertical: 0, horizontal: 6), + child: Texts( + widget.model.getPaymentOptionName(paymentOption), + fontSize: 14, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + ), + InkWell( + onTap: () => {_navigateToPaymentOption()}, + child: Texts( + TranslationBase.of(context).changeMethod, + fontSize: 12, + fontWeight: FontWeight.normal, + color: Color(0xff0000ff), + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/pages/pharmacies/screens/product-details/footor/footer-widget.dart b/lib/pages/pharmacies/screens/product-details/footor/footer-widget.dart index 583c904f..d936b51c 100644 --- a/lib/pages/pharmacies/screens/product-details/footor/footer-widget.dart +++ b/lib/pages/pharmacies/screens/product-details/footor/footer-widget.dart @@ -10,7 +10,7 @@ import 'package:hexcolor/hexcolor.dart'; import '../../../../../locator.dart'; import '../../../../../routes.dart'; -import '../../cart-order-page.dart'; +import '../../cart-page/cart-order-page.dart'; import '../product-detail.dart'; class FooterWidget extends StatefulWidget { diff --git a/lib/pages/pharmacies/screens/product-details/shared/product_details_app_bar.dart b/lib/pages/pharmacies/screens/product-details/shared/product_details_app_bar.dart index ee1bcd60..b9612925 100644 --- a/lib/pages/pharmacies/screens/product-details/shared/product_details_app_bar.dart +++ b/lib/pages/pharmacies/screens/product-details/shared/product_details_app_bar.dart @@ -12,7 +12,7 @@ import 'package:provider/provider.dart'; import '../../../../../locator.dart'; import '../../../compare-list.dart'; -import '../../cart-order-page.dart'; +import '../../cart-page/cart-order-page.dart'; import 'icon_with_bg.dart'; class ProductAppBar extends StatelessWidget with PreferredSizeWidget { diff --git a/lib/widgets/others/app_scaffold_widget.dart b/lib/widgets/others/app_scaffold_widget.dart index f5ce682a..f80acf75 100644 --- a/lib/widgets/others/app_scaffold_widget.dart +++ b/lib/widgets/others/app_scaffold_widget.dart @@ -9,7 +9,7 @@ import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/OrderPreview import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart'; import 'package:diplomaticquarterapp/pages/insurance/insurance_update_screen.dart'; import 'package:diplomaticquarterapp/pages/landing/landing_page.dart'; -import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-page/cart-order-page.dart'; import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/services/robo_search/event_provider.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; diff --git a/lib/widgets/pharmacy/product_tile.dart b/lib/widgets/pharmacy/product_tile.dart index b6f73823..78ea12b0 100644 --- a/lib/widgets/pharmacy/product_tile.dart +++ b/lib/widgets/pharmacy/product_tile.dart @@ -1,6 +1,6 @@ import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart'; import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/product_detail_view_model.dart'; -import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-page/cart-order-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacy/order/ProductReview.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; From 66acda38a341824f08734ccd3edac2c59c369a66 Mon Sep 17 00:00:00 2001 From: hussam al-habibeh Date: Tue, 12 Oct 2021 11:22:39 +0300 Subject: [PATCH 04/11] add to cart fix --- .../product-details/footor/footer-widget.dart | 8 ++-- .../pharmacy/bottom_nav_pharmacy_item.dart | 48 ++++++++++++------- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/lib/pages/pharmacies/screens/product-details/footor/footer-widget.dart b/lib/pages/pharmacies/screens/product-details/footor/footer-widget.dart index 583c904f..b941fd33 100644 --- a/lib/pages/pharmacies/screens/product-details/footor/footer-widget.dart +++ b/lib/pages/pharmacies/screens/product-details/footor/footer-widget.dart @@ -185,7 +185,7 @@ class _FooterWidgetState extends State { width: MediaQuery.of(context).size.width * 0.45, child: SecondaryButton( label: TranslationBase.of(context).addToCart.toUpperCase(), - disabled: !widget.isAvailable && widget.quantity > 0 || + disabled: !widget.isAvailable && widget.quantity == 0 || widget.quantity > widget.quantityLimit || widget.item.rxMessage != null, disableColor: Color(0xFF4CAF50), @@ -196,9 +196,9 @@ class _FooterWidgetState extends State { ); } else await widget.addToCartFunction( - quantity: widget.quantity, - itemID: widget.item.id, - model: widget.model); + quantity: widget.quantity, + itemID: widget.item.id, + model: widget.model); }, fontWeight: FontWeight.w600, borderColor: Color(0xFF4CAF50), diff --git a/lib/widgets/pharmacy/bottom_nav_pharmacy_item.dart b/lib/widgets/pharmacy/bottom_nav_pharmacy_item.dart index 94e260d0..880615a4 100644 --- a/lib/widgets/pharmacy/bottom_nav_pharmacy_item.dart +++ b/lib/widgets/pharmacy/bottom_nav_pharmacy_item.dart @@ -47,7 +47,7 @@ class BottomNavPharmacyItem extends StatelessWidget { splashColor: Colors.transparent, onTap: () { if (!Provider.of(context, listen: false) - .isLogin && + .isLogin && (currentIndex == 2 || currentIndex == 3)) Navigator.push( context, @@ -65,19 +65,19 @@ class BottomNavPharmacyItem extends StatelessWidget { ), currentIndex == index ? Divider( - color: Color(0xff5AB145), - thickness: 3.5, - ) + color: Color(0xff5AB145), + thickness: 3.5, + ) : Divider( - thickness: 0, - ), + thickness: 0, + ), Container( child: Icon(currentIndex == index ? activeIcon : icon, color: isHome ? Color(0xff5AB145) : currentIndex == index - ? Colors.grey - : Colors.grey, + ? Colors.grey + : Colors.grey, size: 22.0), ), SizedBox( @@ -89,26 +89,40 @@ class BottomNavPharmacyItem extends StatelessWidget { title, textAlign: TextAlign.center, color: currentIndex == index ? Colors.grey : Colors.grey, - fontWeight: - currentIndex == index ? FontWeight.bold : FontWeight.w400, + fontWeight: currentIndex == index + ? FontWeight.bold + : FontWeight.w400, fontSize: currentIndex == index ? 13 : 11, ), ], ), ), ), - if(currentIndex == 3 &&Provider.of(context, listen: false).cartResponse.quantityCount !=0) + if (currentIndex == 3 && + Provider.of(context, listen: false) + .cartResponse + .quantityCount != + 0) Positioned( - top: 5, right: -3.5, + top: 11.5, + right: -4.5, child: Container( decoration: BoxDecoration( - color: Colors.red, - borderRadius: BorderRadius.circular(15), - + color: Colors.red, + borderRadius: BorderRadius.circular(15), ), - padding: EdgeInsets.only(left: 5, right: 4.5), + padding: EdgeInsets.only(left: 7, right: 6.5), height: 18, - child: Center(child: Texts(Provider.of(context, listen: false).cartResponse.quantityCount.toString(), style: "caption", medium: true, color: Colors.white,)), + child: Center( + child: Texts( + Provider.of(context, listen: false) + .cartResponse + .quantityCount + .toString(), + style: "caption", + medium: true, + color: Colors.white, + )), ), ) ], From a8fb7152b174c99e441010a76815f86afadbe48c Mon Sep 17 00:00:00 2001 From: hussam al-habibeh Date: Tue, 12 Oct 2021 11:27:47 +0300 Subject: [PATCH 05/11] add to cart fix --- .../pharmacy/bottom_nav_pharmacy_item.dart | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/lib/widgets/pharmacy/bottom_nav_pharmacy_item.dart b/lib/widgets/pharmacy/bottom_nav_pharmacy_item.dart index acfaa63a..ff0cac32 100644 --- a/lib/widgets/pharmacy/bottom_nav_pharmacy_item.dart +++ b/lib/widgets/pharmacy/bottom_nav_pharmacy_item.dart @@ -50,7 +50,7 @@ class BottomNavPharmacyItem extends StatelessWidget { splashColor: Colors.transparent, onTap: () { if (!Provider.of(context, listen: false) - .isLogin && + .isLogin && (currentIndex == 2 || currentIndex == 3)) Navigator.push( context, @@ -68,19 +68,19 @@ class BottomNavPharmacyItem extends StatelessWidget { ), currentIndex == index ? Divider( - color: Color(0xff5AB145), - thickness: 3.5, - ) + color: Color(0xff5AB145), + thickness: 3.5, + ) : Divider( - thickness: 0, - ), + thickness: 0, + ), Container( child: Icon(currentIndex == index ? activeIcon : icon, color: isHome ? Color(0xff5AB145) : currentIndex == index - ? Colors.grey - : Colors.grey, + ? Colors.grey + : Colors.grey, size: 22.0), ), SizedBox( @@ -92,8 +92,9 @@ class BottomNavPharmacyItem extends StatelessWidget { title, textAlign: TextAlign.center, color: currentIndex == index ? Colors.grey : Colors.grey, - fontWeight: - currentIndex == index ? FontWeight.bold : FontWeight.w400, + fontWeight: currentIndex == index + ? FontWeight.bold + : FontWeight.w400, fontSize: currentIndex == index ? 13 : 11, ), ], @@ -110,13 +111,18 @@ class BottomNavPharmacyItem extends StatelessWidget { right: -4.5, child: Container( decoration: BoxDecoration( - color: Colors.red, - borderRadius: BorderRadius.circular(15), - + color: Colors.red, + borderRadius: BorderRadius.circular(15), ), padding: EdgeInsets.only(left: 7, right: 6.5), height: 18, - child: Center(child: Texts(orderPreviewViewModel.cartResponse.quantityCount.toString(), style: "caption", medium: true, color: Colors.white,)), + child: Center( + child: Texts( + orderPreviewViewModel.cartResponse.quantityCount.toString(), + style: "caption", + medium: true, + color: Colors.white, + )), ), ) ], From 30a1353be637374a2d2fee81d3c39e6e2b4e6cbf Mon Sep 17 00:00:00 2001 From: Fatimah Alshammari Date: Wed, 13 Oct 2021 11:19:42 +0300 Subject: [PATCH 06/11] 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 07/11] 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 08/11] 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]; From 3be7f7f8990abed5832c90fa59840d82ad5a39fa Mon Sep 17 00:00:00 2001 From: Fatimah Alshammari Date: Mon, 18 Oct 2021 11:23:12 +0300 Subject: [PATCH 09/11] fixed loader issue --- lib/pages/final_products_page.dart | 9 ++++----- lib/pages/parent_categorise_page.dart | 8 ++++---- lib/pages/sub_categorise_page.dart | 9 ++++----- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/lib/pages/final_products_page.dart b/lib/pages/final_products_page.dart index 7e8385f0..854b66a6 100644 --- a/lib/pages/final_products_page.dart +++ b/lib/pages/final_products_page.dart @@ -621,19 +621,18 @@ class _FinalProductsPageState extends State { size: 18, color: Colors.blue,), onPressed: () async { - GifLoaderDialogUtils.showMyDialog(context); if(model.finalProducts[index].rxMessage == null){ + GifLoaderDialogUtils.showMyDialog(context); await addToCartFunction(1, model.finalProducts[index].id); -// GifLoaderDialogUtils.hideDialog(context); + GifLoaderDialogUtils.hideDialog(context); Navigator.push( context, - FadePage(page: CartOrderPage()), - ); + FadePage(page: CartOrderPage())); } else{ AppToast.showErrorToast(message: TranslationBase.of(context).needPrescription); } - GifLoaderDialogUtils.hideDialog(context); +// } ), diff --git a/lib/pages/parent_categorise_page.dart b/lib/pages/parent_categorise_page.dart index 1ac20946..18133bb2 100644 --- a/lib/pages/parent_categorise_page.dart +++ b/lib/pages/parent_categorise_page.dart @@ -1175,18 +1175,18 @@ class _ParentCategorisePageState extends State { size: 18, color: Colors.blue,), onPressed: () async { - GifLoaderDialogUtils.showMyDialog(context); if(model.parentProducts[index].rxMessage == null){ + GifLoaderDialogUtils.showMyDialog(context); await addToCartFunction(1, model.parentProducts[index].id); + GifLoaderDialogUtils.hideDialog(context); Navigator.push( context, - FadePage(page: CartOrderPage()), - ); + FadePage(page: CartOrderPage())); } else{ AppToast.showErrorToast(message: TranslationBase.of(context).needPrescription); } - GifLoaderDialogUtils.hideDialog(context); + } ), diff --git a/lib/pages/sub_categorise_page.dart b/lib/pages/sub_categorise_page.dart index 3fb1574f..6c41f550 100644 --- a/lib/pages/sub_categorise_page.dart +++ b/lib/pages/sub_categorise_page.dart @@ -1072,18 +1072,17 @@ class _SubCategorisePageState extends State { size: 18, color: Colors.blue,), onPressed: () async { - GifLoaderDialogUtils.showMyDialog(context); if(model.subProducts[index].rxMessage == null){ + GifLoaderDialogUtils.showMyDialog(context); await addToCartFunction(1, model.subProducts[index].id); -// GifLoaderDialogUtils.hideDialog(context); + GifLoaderDialogUtils.hideDialog(context); Navigator.push( context, - FadePage(page: CartOrderPage()), - );} + FadePage(page: CartOrderPage()));} else{ AppToast.showErrorToast(message: TranslationBase.of(context).needPrescription); } - GifLoaderDialogUtils.hideDialog(context); + } ), From e494c9304db55e962d6ccfbd1311ba272392f8ee Mon Sep 17 00:00:00 2001 From: Fatimah Alshammari Date: Sun, 24 Oct 2021 15:54:03 +0300 Subject: [PATCH 10/11] fixed issues --- .../model/pharmacies/PharmacyProduct.dart | 2 +- lib/core/model/pharmacies/orders_model.dart | 10 +- .../pharmacies/ProductCheckTypeWidget.dart | 1 + .../pharmacies/widgets/ProductOrderItem.dart | 3 +- lib/pages/pharmacy/order/Order.dart | 587 +++++++++--------- lib/pages/pharmacy/order/OrderDetails.dart | 3 +- .../bottom_nav_pharmacy_home_item.dart | 23 +- .../pharmacy/bottom_nav_pharmacy_item.dart | 19 +- lib/widgets/pharmacy/product_tile.dart | 46 +- 9 files changed, 359 insertions(+), 335 deletions(-) diff --git a/lib/core/model/pharmacies/PharmacyProduct.dart b/lib/core/model/pharmacies/PharmacyProduct.dart index dbef5737..8f846480 100644 --- a/lib/core/model/pharmacies/PharmacyProduct.dart +++ b/lib/core/model/pharmacies/PharmacyProduct.dart @@ -20,7 +20,7 @@ class PharmacyProduct { bool allowCustomerReviews; int approvedRatingSum; int notApprovedRatingSum; - int approvedTotalReviews; + dynamic approvedTotalReviews; int notApprovedTotalReviews; dynamic sku; bool isRx; diff --git a/lib/core/model/pharmacies/orders_model.dart b/lib/core/model/pharmacies/orders_model.dart index 0ad94767..cef20c30 100644 --- a/lib/core/model/pharmacies/orders_model.dart +++ b/lib/core/model/pharmacies/orders_model.dart @@ -24,7 +24,7 @@ class OrdersModel { class Orders { String id; int productCount; - double orderTotal; + dynamic orderTotal; String createdOnUtc; int orderStatusId; String orderStatus; @@ -32,9 +32,9 @@ class Orders { bool canCancel; bool canRefund; dynamic customerId; - double orderSubtotalExclTax; + dynamic orderSubtotalExclTax; dynamic orderShippingExclTax; - double orderTax; + dynamic orderTax; Orders( @@ -64,9 +64,9 @@ class Orders { canCancel = json['can_cancel']; canRefund = json['can_refund']; customerId = json['customer_id']; - orderSubtotalExclTax= json["order_subtotal_excl_tax"].toDouble(); + orderSubtotalExclTax= json["order_subtotal_excl_tax"]; orderShippingExclTax= json["order_shipping_excl_tax"]; - orderTax= json["order_tax"].toDouble(); + orderTax= json["order_tax"]; }catch(e){ print(e); } diff --git a/lib/pages/pharmacies/ProductCheckTypeWidget.dart b/lib/pages/pharmacies/ProductCheckTypeWidget.dart index aac971a0..2b88d30a 100644 --- a/lib/pages/pharmacies/ProductCheckTypeWidget.dart +++ b/lib/pages/pharmacies/ProductCheckTypeWidget.dart @@ -32,6 +32,7 @@ class _ProductCheckTypeWidgetState extends State { : widget.model.wishListList[index].product.name, productPrice: widget.model.wishListList[index].subtotal, productRate: double.parse(widget.model.wishListList[index].subtotalVatRate), + approvedTotalReviews:widget.model.wishListList[index].product.approvedTotalReviews, productImage: widget.model.wishListList[index].product.images[0].src, productID: widget.model.wishListList[index].product.id, onDelete: deleteWishListItem, diff --git a/lib/pages/pharmacies/widgets/ProductOrderItem.dart b/lib/pages/pharmacies/widgets/ProductOrderItem.dart index cb7c59fd..11976175 100644 --- a/lib/pages/pharmacies/widgets/ProductOrderItem.dart +++ b/lib/pages/pharmacies/widgets/ProductOrderItem.dart @@ -4,6 +4,7 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.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'; class ProductOrderItem extends StatefulWidget { @@ -39,7 +40,7 @@ class _ProductOrderItemState extends State { leading: InkWell( onTap: () => {widget.deleteCartItems()}, child: Icon( - Icons.delete_outline_sharp, + FontAwesomeIcons.trashAlt,size: 15, color: Colors.grey.shade700, ), ), diff --git a/lib/pages/pharmacy/order/Order.dart b/lib/pages/pharmacy/order/Order.dart index 7ffcbdbd..4e4a0cc9 100644 --- a/lib/pages/pharmacy/order/Order.dart +++ b/lib/pages/pharmacy/order/Order.dart @@ -70,6 +70,7 @@ class _OrderPageState extends State TabBar( labelPadding: EdgeInsets.only(left: 3.0, right: 3.0), labelColor: Colors.black, + indicatorColor: Colors.green, tabs: [ Tab(text: TranslationBase.of(context).delivered), Tab(text: TranslationBase.of(context).processing), @@ -127,86 +128,86 @@ class _OrderPageState extends State return Container( child: Column( children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Container( - margin: EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Row( - children: [ - Container( - margin: EdgeInsets.only(right: 5), - child: Text( - TranslationBase.of(context) - .orderNumber, - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.bold, + InkWell( + onTap: () { + Navigator.push( + context, + FadePage( + page: OrderDetailsPage( + orderModel: + deliveredOrderList[ + index]), + )); + }, + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Container( + margin: EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + margin: EdgeInsets.only(right: 5), + child: Text( + TranslationBase.of(context) + .orderNumber, + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + ), ), ), - ), - Container( - child: Text( - deliveredOrderList[index] - .id - .toString(), - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.bold, + Container( + child: Text( + deliveredOrderList[index] + .id + .toString(), + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + ), ), ), - ), - ], - ), - SizedBox( - height: 5, - ), - Row( - children: [ - Container( - margin: EdgeInsets.only(right: 5), - child: Text( - TranslationBase.of(context) - .orderDate, - style: TextStyle( - fontSize: 14.0, + ], + ), + SizedBox( + height: 5, + ), + Row( + children: [ + Container( + margin: EdgeInsets.only(right: 5), + child: Text( + TranslationBase.of(context) + .orderDate, + style: TextStyle( + fontSize: 14.0, + ), ), ), - ), - Container( - child: Text( - deliveredOrderList[index] - .createdOnUtc - .toString() - .substring(0, 10), - style: TextStyle( - fontSize: 14.0, + Container( + child: Text( + deliveredOrderList[index] + .createdOnUtc + .toString() + .substring(0, 10), + style: TextStyle( + fontSize: 14.0, + ), ), ), - ), - ], - ), - ], + ], + ), + ], + ), ), - ), - Container( - margin: EdgeInsets.all(8.0), - child: InkWell( - onTap: () { - Navigator.push( - context, - FadePage( - page: OrderDetailsPage( - orderModel: - deliveredOrderList[ - index]), - )); - }, + Container( + margin: EdgeInsets.all(8.0), child: SvgPicture.asset( languageID == "ar" ? 'assets/images/pharmacy/arrow_left.svg' @@ -215,8 +216,8 @@ class _OrderPageState extends State width: 20, ), ), - ), - ], + ], + ), ), Divider( color: Colors.grey[350], @@ -394,85 +395,85 @@ class _OrderPageState extends State return Container( child: Column( children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Container( - margin: EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Row( - children: [ - Container( - margin: EdgeInsets.only(right: 5), - child: Text( - TranslationBase.of(context) - .orderNumber, - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.bold, + InkWell( + onTap: () { + Navigator.push( + context, + FadePage( + page: OrderDetailsPage( + orderModel: + processingOrderList[ + index]))); + }, + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Container( + margin: EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + margin: EdgeInsets.only(right: 5), + child: Text( + TranslationBase.of(context) + .orderNumber, + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + ), ), ), - ), - Container( - child: Text( - processingOrderList[index] - .id - .toString(), - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.bold, + Container( + child: Text( + processingOrderList[index] + .id + .toString(), + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + ), ), ), - ), - ], - ), - SizedBox( - height: 5, - ), - Row( - children: [ - Container( - margin: EdgeInsets.only(right: 5), - child: Text( - TranslationBase.of(context) - .orderDate, - style: TextStyle( - fontSize: 14.0, + ], + ), + SizedBox( + height: 5, + ), + Row( + children: [ + Container( + margin: EdgeInsets.only(right: 5), + child: Text( + TranslationBase.of(context) + .orderDate, + style: TextStyle( + fontSize: 14.0, + ), ), ), - ), - Container( - child: Text( - processingOrderList[index] - .createdOnUtc - .toString() - .substring(0, 10), - style: TextStyle( - fontSize: 14.0, + Container( + child: Text( + processingOrderList[index] + .createdOnUtc + .toString() + .substring(0, 10), + style: TextStyle( + fontSize: 14.0, + ), ), ), - ), - ], - ), - ], + ], + ), + ], + ), ), - ), - Container( - margin: EdgeInsets.all(8.0), - child: InkWell( - onTap: () { - Navigator.push( - context, - FadePage( - page: OrderDetailsPage( - orderModel: - processingOrderList[ - index]))); - }, + Container( + margin: EdgeInsets.all(8.0), child: SvgPicture.asset( languageID == "ar" ? 'assets/images/pharmacy/arrow_left.svg' @@ -481,8 +482,8 @@ class _OrderPageState extends State width: 20, ), ), - ), - ], + ], + ), ), Divider( color: Colors.grey[350], @@ -837,87 +838,87 @@ class _OrderPageState extends State child: SingleChildScrollView( child: Column( children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Container( - margin: EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Row( - children: [ - Container( - margin: - EdgeInsets.only(right: 5), - child: Text( - TranslationBase.of(context) - .orderNumber, - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.bold, + InkWell( + onTap: () { + Navigator.push( + context, + FadePage( + page: OrderDetailsPage( + orderModel: + pendingOrderList[ + index]))); + }, + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Container( + margin: EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + margin: + EdgeInsets.only(right: 5), + child: Text( + TranslationBase.of(context) + .orderNumber, + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + ), ), ), - ), - Container( - child: Text( - pendingOrderList[index] - .id - .toString(), - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.bold, + Container( + child: Text( + pendingOrderList[index] + .id + .toString(), + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + ), ), ), - ), - ], - ), - SizedBox( - height: 5, - ), - Row( - children: [ - Container( - margin: - EdgeInsets.only(right: 5), - child: Text( - TranslationBase.of(context) - .orderDate, - style: TextStyle( - fontSize: 14.0, + ], + ), + SizedBox( + height: 5, + ), + Row( + children: [ + Container( + margin: + EdgeInsets.only(right: 5), + child: Text( + TranslationBase.of(context) + .orderDate, + style: TextStyle( + fontSize: 14.0, + ), ), ), - ), - Container( - child: Text( - pendingOrderList[index] - .createdOnUtc - .toString() - .substring(0, 10), - style: TextStyle( - fontSize: 14.0, + Container( + child: Text( + pendingOrderList[index] + .createdOnUtc + .toString() + .substring(0, 10), + style: TextStyle( + fontSize: 14.0, + ), ), ), - ), - ], - ), - ], + ], + ), + ], + ), ), - ), - Container( - margin: EdgeInsets.all(8.0), - child: InkWell( - onTap: () { - Navigator.push( - context, - FadePage( - page: OrderDetailsPage( - orderModel: - pendingOrderList[ - index]))); - }, + Container( + margin: EdgeInsets.all(8.0), child: SvgPicture.asset( languageID == "ar" ? 'assets/images/pharmacy/arrow_left.svg' @@ -926,8 +927,8 @@ class _OrderPageState extends State width: 20, ), ), - ), - ], + ], + ), ), Divider( color: Colors.grey[350], @@ -1106,87 +1107,87 @@ class _OrderPageState extends State child: SingleChildScrollView( child: Column( children: [ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Container( - margin: EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Row( - children: [ - Container( - margin: - EdgeInsets.only(right: 5), - child: Text( - TranslationBase.of(context) - .orderNumber, - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.bold, + InkWell( + onTap: () { + Navigator.push( + context, + FadePage( + page: OrderDetailsPage( + orderModel: + cancelledOrderList[ + index]))); + }, + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Container( + margin: EdgeInsets.all(8.0), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Row( + children: [ + Container( + margin: + EdgeInsets.only(right: 5), + child: Text( + TranslationBase.of(context) + .orderNumber, + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + ), ), ), - ), - Container( - child: Text( - cancelledOrderList[index] - .id - .toString(), - style: TextStyle( - fontSize: 16.0, - fontWeight: FontWeight.bold, + Container( + child: Text( + cancelledOrderList[index] + .id + .toString(), + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + ), ), ), - ), - ], - ), - SizedBox( - height: 5, - ), - Row( - children: [ - Container( - margin: - EdgeInsets.only(right: 5), - child: Text( - TranslationBase.of(context) - .orderDate, - style: TextStyle( - fontSize: 14.0, + ], + ), + SizedBox( + height: 5, + ), + Row( + children: [ + Container( + margin: + EdgeInsets.only(right: 5), + child: Text( + TranslationBase.of(context) + .orderDate, + style: TextStyle( + fontSize: 14.0, + ), ), ), - ), - Container( - child: Text( - cancelledOrderList[index] - .createdOnUtc - .toString() - .substring(0, 10), - style: TextStyle( - fontSize: 14.0, + Container( + child: Text( + cancelledOrderList[index] + .createdOnUtc + .toString() + .substring(0, 10), + style: TextStyle( + fontSize: 14.0, + ), ), ), - ), - ], - ), - ], + ], + ), + ], + ), ), - ), - Container( - margin: EdgeInsets.all(8.0), - child: InkWell( - onTap: () { - Navigator.push( - context, - FadePage( - page: OrderDetailsPage( - orderModel: - cancelledOrderList[ - index]))); - }, + Container( + margin: EdgeInsets.all(8.0), child: SvgPicture.asset( languageID == "ar" ? 'assets/images/pharmacy/arrow_left.svg' @@ -1195,8 +1196,8 @@ class _OrderPageState extends State width: 20, ), ), - ), - ], + ], + ), ), Divider( color: Colors.grey[350], diff --git a/lib/pages/pharmacy/order/OrderDetails.dart b/lib/pages/pharmacy/order/OrderDetails.dart index 1275042a..aadb5a90 100644 --- a/lib/pages/pharmacy/order/OrderDetails.dart +++ b/lib/pages/pharmacy/order/OrderDetails.dart @@ -321,8 +321,7 @@ class _OrderDetailsPageState extends State { margin: EdgeInsets.only(bottom: 10.0, top: 10.0), child: Text( model.orderListModel[0].paymentName - .toString() - .substring(12), + .toString(), style: TextStyle( fontSize: 13.0, fontWeight: FontWeight.bold, diff --git a/lib/widgets/pharmacy/bottom_nav_pharmacy_home_item.dart b/lib/widgets/pharmacy/bottom_nav_pharmacy_home_item.dart index fba53c1c..24986c74 100644 --- a/lib/widgets/pharmacy/bottom_nav_pharmacy_home_item.dart +++ b/lib/widgets/pharmacy/bottom_nav_pharmacy_home_item.dart @@ -45,9 +45,9 @@ class BottomNavHomeItem extends StatelessWidget { mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ - SizedBox( - height: 15, - ), +// SizedBox( +// height: 15, +// ), currentIndex == index ? Divider( // color: Color(0xff5AB145), @@ -57,19 +57,24 @@ class BottomNavHomeItem extends StatelessWidget { thickness: 0, ), Container( + margin: EdgeInsets.only(bottom: 5.0), child: Image.asset( 'assets/images/habib-logo.png', ), height: 22.0, + ), SizedBox( - height: 9, + height: 5, ), - Texts( - title, - textAlign: TextAlign.start, - color: currentIndex == index ? Colors.grey : Colors.grey, - fontSize: 11, + Container( + margin: EdgeInsets.only(bottom: 7.0), + child: Texts( + title, + textAlign: TextAlign.start, + color: currentIndex == index ? Colors.grey : Colors.grey, + fontSize: 11, + ), ), // Added TextAlign Property ], diff --git a/lib/widgets/pharmacy/bottom_nav_pharmacy_item.dart b/lib/widgets/pharmacy/bottom_nav_pharmacy_item.dart index ff0cac32..6e6a5f53 100644 --- a/lib/widgets/pharmacy/bottom_nav_pharmacy_item.dart +++ b/lib/widgets/pharmacy/bottom_nav_pharmacy_item.dart @@ -39,7 +39,7 @@ class BottomNavPharmacyItem extends StatelessWidget { return Expanded( child: SizedBox( - // height: 72.0, + height: 66.0, child: Stack( clipBehavior: Clip.none, children: [ @@ -63,17 +63,18 @@ class BottomNavPharmacyItem extends StatelessWidget { mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ - SizedBox( - height: 15, - ), +// SizedBox( +// height: 15, +// ), currentIndex == index ? Divider( - color: Color(0xff5AB145), + color: Color(0xff5AB133), thickness: 3.5, ) : Divider( thickness: 0, ), + Container( child: Icon(currentIndex == index ? activeIcon : icon, color: isHome @@ -81,7 +82,7 @@ class BottomNavPharmacyItem extends StatelessWidget { : currentIndex == index ? Colors.grey : Colors.grey, - size: 22.0), + size: 20.0), ), SizedBox( height: 11, @@ -93,7 +94,7 @@ class BottomNavPharmacyItem extends StatelessWidget { textAlign: TextAlign.center, color: currentIndex == index ? Colors.grey : Colors.grey, fontWeight: currentIndex == index - ? FontWeight.bold + ? FontWeight.normal : FontWeight.w400, fontSize: currentIndex == index ? 13 : 11, ), @@ -108,13 +109,13 @@ class BottomNavPharmacyItem extends StatelessWidget { 0) Positioned( top: 11.5, - right: -4.5, + right: -3.5, child: Container( decoration: BoxDecoration( color: Colors.red, borderRadius: BorderRadius.circular(15), ), - padding: EdgeInsets.only(left: 7, right: 6.5), + padding: EdgeInsets.only(left: 6.5, right: 6.5), height: 18, child: Center( child: Texts( diff --git a/lib/widgets/pharmacy/product_tile.dart b/lib/widgets/pharmacy/product_tile.dart index 78ea12b0..0d4c91e0 100644 --- a/lib/widgets/pharmacy/product_tile.dart +++ b/lib/widgets/pharmacy/product_tile.dart @@ -25,6 +25,7 @@ class productTile extends StatelessWidget { final PharmacyProduct product; final dynamic productID; final Function onDelete; + final dynamic approvedTotalReviews; // final VoidCallback deleteWishlistItems; productTile( @@ -43,6 +44,8 @@ class productTile extends StatelessWidget { this.product, this.productID, this.onDelete, + this.approvedTotalReviews, + }); @override @@ -112,22 +115,33 @@ class productTile extends StatelessWidget { ), ), this.isOrderDetails == false - ? Container( - margin: EdgeInsets.all(5), - child: Align( - alignment: Alignment.topLeft, - child: RatingBar.readOnly( - initialRating: productRate, - size: 15.0, - filledColor: Colors.yellow[700], - emptyColor: Colors.grey[500], - isHalfAllowed: true, - halfFilledIcon: Icons.star_half, - filledIcon: Icons.star, - emptyIcon: Icons.star, + ? Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + margin: EdgeInsets.all(5), + child: Align( + alignment: Alignment.topLeft, + child: RatingBar.readOnly( + initialRating: productRate, + size: 15.0, + filledColor: Colors.yellow[700], + emptyColor: Colors.grey[500], + isHalfAllowed: true, + halfFilledIcon: Icons.star_half, + filledIcon: Icons.star, + emptyIcon: Icons.star, + ), + ), ), + Text( '$approvedTotalReviews', + style: TextStyle( + fontWeight: FontWeight.bold, + color: Colors.grey, + fontSize: 13), ), - ) + ], + ) : Container(), ], ), @@ -150,7 +164,9 @@ class productTile extends StatelessWidget { height: 50, ), IconButton( - icon: Icon(FontAwesomeIcons.shoppingCart, size: 15), + icon: Icon(Icons.shopping_cart, + size: 18, + color: Colors.blue,), onPressed: () async { GifLoaderDialogUtils.showMyDialog(context); await addToCartFunction(1, productID); From a4f404386b09df7f4e2010d46b79b21a31060658 Mon Sep 17 00:00:00 2001 From: Fatimah Alshammari Date: Tue, 26 Oct 2021 13:41:05 +0300 Subject: [PATCH 11/11] fixed issues --- assets/images/pharmacy_module/payment.png | Bin 0 -> 15499 bytes lib/config/localized_values.dart | 2 +- .../pharmacies/screens/cart-order-page.dart | 8 +++++--- .../product-details/footor/footer-widget.dart | 4 +++- .../screens/product-details/product-detail.dart | 15 +++++++++++++++ .../widgets/home/GridViewButtons.dart | 6 +++++- 6 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 assets/images/pharmacy_module/payment.png diff --git a/assets/images/pharmacy_module/payment.png b/assets/images/pharmacy_module/payment.png new file mode 100644 index 0000000000000000000000000000000000000000..275aa40ac7941efaafe3ec10e9a62df4aad88802 GIT binary patch literal 15499 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 { endIndent: 0, ), Image.asset( - "assets/images/pharmacy_module/payment_image.png", + "assets/images/pharmacy_module/payment.png", width: mediaQuery.size.width - 20, height: 30.0, fit: BoxFit.scaleDown, @@ -348,6 +348,7 @@ class _OrderBottomWidgetState extends State { Icons.info, size: 25, color: Color(0xff005aff), +// color: Color(0xff005aff), ), ), ), @@ -420,8 +421,9 @@ class _OrderBottomWidgetState extends State { isAgree ? Colors.white : Colors.grey.shade300, fontSize: 14), ), - color: Color(0xff005aff), - disabledColor: Color(0xff005aff), + color: Color(0xFF4CAF50), + disabledColor:Color(0xFF4CAF50), +// disabledColor: Color(0xff005aff), ) // RaisedButton( // onPressed: isAgree diff --git a/lib/pages/pharmacies/screens/product-details/footor/footer-widget.dart b/lib/pages/pharmacies/screens/product-details/footor/footer-widget.dart index 3a3eba23..19286b6a 100644 --- a/lib/pages/pharmacies/screens/product-details/footor/footer-widget.dart +++ b/lib/pages/pharmacies/screens/product-details/footor/footer-widget.dart @@ -20,6 +20,7 @@ class FooterWidget extends StatefulWidget { final int quantityLimit; final PharmacyProduct item; final Function addToCartFunction; + final Function addToShoppingCartFunction; final ProductDetailViewModel model; int quantity; @@ -30,6 +31,7 @@ class FooterWidget extends StatefulWidget { {this.quantity, this.isOverQuantity = false, this.addToCartFunction, + this.addToShoppingCartFunction, this.model}); @override @@ -217,7 +219,7 @@ class _FooterWidgetState extends State { widget.quantity > widget.quantityLimit || widget.item.rxMessage != null, onTap: () async { - await widget.addToCartFunction( + await widget.addToShoppingCartFunction( quantity: widget.quantity, itemID: widget.item.id, model: widget.model); diff --git a/lib/pages/pharmacies/screens/product-details/product-detail.dart b/lib/pages/pharmacies/screens/product-details/product-detail.dart index 83a76a19..4cee4ba3 100644 --- a/lib/pages/pharmacies/screens/product-details/product-detail.dart +++ b/lib/pages/pharmacies/screens/product-details/product-detail.dart @@ -4,6 +4,7 @@ import 'package:diplomaticquarterapp/core/model/pharmacies/PharmacyProduct.dart' import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/product_detail_view_model.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/compare-list.dart'; +import 'package:diplomaticquarterapp/pages/pharmacies/screens/cart-order-page.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/product-name-and-price.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/recommended_products.dart'; import 'package:diplomaticquarterapp/pages/pharmacies/screens/product-details/reviews_info.dart'; @@ -13,6 +14,7 @@ import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; import 'availability_info.dart'; @@ -331,6 +333,7 @@ class __ProductDetailPageState extends State { quantity: quantity, isOverQuantity: isOverQuantity, addToCartFunction: addToCartFunction, + addToShoppingCartFunction: addToShoppingCartFunction, model: model, ), )); @@ -355,6 +358,18 @@ class __ProductDetailPageState extends State { await model.addToCartData(quantity, itemID); GifLoaderDialogUtils.hideDialog(context); } + + addToShoppingCartFunction( + {quantity, + itemID, + ProductDetailViewModel model}) async { + GifLoaderDialogUtils.showMyDialog(context); + await model.addToCartData(quantity, itemID); + GifLoaderDialogUtils.hideDialog(context); + Navigator.push( + context, + FadePage(page: CartOrderPage())); + } } diff --git a/lib/pages/pharmacies/widgets/home/GridViewButtons.dart b/lib/pages/pharmacies/widgets/home/GridViewButtons.dart index 5d979136..1a33ce74 100644 --- a/lib/pages/pharmacies/widgets/home/GridViewButtons.dart +++ b/lib/pages/pharmacies/widgets/home/GridViewButtons.dart @@ -1,6 +1,7 @@ import 'package:diplomaticquarterapp/core/viewModels/pharmacyModule/pharmacy_module_view_model.dart'; import 'package:diplomaticquarterapp/pages/landing/home_page.dart'; import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_home_page.dart'; +import 'package:diplomaticquarterapp/pages/search_products_page.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart'; import 'package:flutter/material.dart'; @@ -44,6 +45,9 @@ class GridViewButtons extends StatelessWidget { hasColorFilter: false, child: GridViewCard(TranslationBase.of(context).medicationRefill, 'assets/images/pharmacy_module/medication_icon.png', () { + Navigator.push( + context, FadePage(page: HomePrescriptionsPage())); + // model.checkUserIsActivated().then((isActivated) { // if (isActivated) { // Navigator.push(context, FadePage(page: LakumMainPage())); @@ -71,7 +75,7 @@ class GridViewButtons extends StatelessWidget { child: GridViewCard( TranslationBase.of(context).searchAndScanMedication, 'assets/images/pharmacy_module/search_scan_icon.png', - () {}), + () {Navigator.push(context, FadePage(page: SearchProductsPage()));}), ), ], ),