diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 94e7349f..923a561c 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1734,4 +1734,6 @@ const Map localizedValues = { "points": {"en": "Points", "ar": "نقاط"}, "availableBalance": {"en": "Available Balance", "ar": "الرصيد المتوفر"}, "ordersDashboard": {"en": "My Orders", "ar": "طلباتي"}, + "productOutOfStock": {"en": "Out Of Stock", "ar": "إنتهى من المخزن"}, + }; 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 3520b305..e8f09a4c 100644 --- a/lib/pages/pharmacies/screens/product-details/footor/footer-widget.dart +++ b/lib/pages/pharmacies/screens/product-details/footor/footer-widget.dart @@ -28,8 +28,13 @@ class FooterWidget extends StatefulWidget { int quantity; bool isOverQuantity; - FooterWidget(this.isAvailable, this.maxQuantity, this.minQuantity, this.quantityLimit, this.item, - {this.quantity, this.isOverQuantity = false, this.addToCartFunction, this.addToShoppingCartFunction, this.model}); + FooterWidget(this.isAvailable, this.maxQuantity, this.minQuantity, + this.quantityLimit, this.item, + {this.quantity, + this.isOverQuantity = false, + this.addToCartFunction, + this.addToShoppingCartFunction, + this.model}); @override _FooterWidgetState createState() => _FooterWidgetState(); @@ -38,7 +43,8 @@ class FooterWidget extends StatefulWidget { class _FooterWidgetState extends State { double quantityUI = 80; bool showUI = false; - AuthenticatedUserObject authenticatedUserObject = locator(); + AuthenticatedUserObject authenticatedUserObject = + locator(); AppSharedPreferences sharedPref = new AppSharedPreferences(); @override @@ -74,7 +80,8 @@ class _FooterWidgetState extends State { padding: const EdgeInsets.all(8.0), child: Text( TranslationBase.of(context).quantity, - style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), + style: TextStyle( + fontSize: 15, fontWeight: FontWeight.bold), ), ), InkWell( @@ -97,7 +104,11 @@ class _FooterWidgetState extends State { SizedBox( width: 5, ), - for (int i = 1; i <= 10; i++) QuantityBox(label: i, onTapFunc: onChangeValue, isSelected: widget.quantity == i), + for (int i = 1; i <= 10; i++) + QuantityBox( + label: i, + onTapFunc: onChangeValue, + isSelected: widget.quantity == i), Container( width: 100, decoration: BoxDecoration( @@ -105,14 +116,16 @@ class _FooterWidgetState extends State { color: Colors.white, ), child: TextField( - decoration: InputDecoration(labelText: ' Quantity # '), + decoration: InputDecoration( + labelText: ' Quantity # '), onChanged: (text) { if (int.tryParse(text) == null) { text = ''; } else { setState(() { widget.quantity = int.parse(text); - if (widget.quantity >= widget.quantityLimit) { + if (widget.quantity >= + widget.quantityLimit) { widget.isOverQuantity = true; } else { widget.isOverQuantity = false; @@ -133,7 +146,7 @@ class _FooterWidgetState extends State { height: 20, ), Container( - height: 55, + height: 58, child: Row( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, @@ -177,6 +190,7 @@ class _FooterWidgetState extends State { : null, ), ), + SizedBox( width: 10, ), @@ -184,17 +198,22 @@ class _FooterWidgetState extends State { width: MediaQuery.of(context).size.width * 0.35, child: SecondaryButton( label: TranslationBase.of(context).addToCart.toUpperCase(), - disabled: (!widget.isAvailable && widget.quantity > 0) || widget.quantity > widget.quantityLimit || widget.item.isRx, + disabled: (!widget.isAvailable && widget.quantity > 0) || + widget.quantity > widget.quantityLimit || + widget.item.isRx, onTap: () async { if (!authenticatedUserObject.isLogin) { login(); } else - await widget.addToCartFunction(quantity: widget.quantity, itemID: widget.item.id, model: widget.model); + await widget.addToCartFunction( + quantity: widget.quantity, + itemID: widget.item.id, + model: widget.model); }, fontWeight: FontWeight.w600, - borderColor: Color(0xFF4CAF50), - borderRadius: 3, - color: Color(0xFF4CAF50), + borderColor: Color(0xFF4CAF50).withOpacity(0.7), + borderRadius: 6, + color: Color(0xFF5AB145).withOpacity(0.7), ), ), SizedBox( @@ -204,19 +223,28 @@ class _FooterWidgetState extends State { width: MediaQuery.of(context).size.width * 0.35, child: SecondaryButton( label: TranslationBase.of(context).buyNow.toUpperCase(), - disabled: (!widget.isAvailable && widget.quantity > 0) || (widget.quantity > widget.quantityLimit) || widget.item.isRx, + disabled: (!widget.isAvailable && widget.quantity > 0) || + (widget.quantity > widget.quantityLimit) || + widget.item.isRx, onTap: () async { if (!authenticatedUserObject.isLogin) { login(); } else { - await widget.addToShoppingCartFunction(quantity: widget.quantity, itemID: widget.item.id, model: widget.model); + await widget.addToShoppingCartFunction( + quantity: widget.quantity, + itemID: widget.item.id, + model: widget.model); } }, fontWeight: FontWeight.w600, - borderColor: Colors.grey[800], - borderRadius: 3, + borderColor: Colors.grey[800].withOpacity(0.7), + borderRadius: 6, disableColor: Colors.grey[700], - color: !widget.isAvailable && widget.quantity > 0 || widget.quantity > widget.quantityLimit || widget.item.isRx ? Colors.grey : Colors.grey[800], + color: !widget.isAvailable && widget.quantity > 0 || + widget.quantity > widget.quantityLimit || + widget.item.isRx + ? Color(0xFF535353).withOpacity(0.7) + : Colors.grey[800], ), ), ], @@ -239,7 +267,9 @@ class _FooterWidgetState extends State { Navigator.of(context).pushNamed(CONFIRM_LOGIN); } else { GifLoaderDialogUtils.showMyDialog(context); - authService.selectDeviceImei(DEVICE_TOKEN).then((SelectDeviceIMEIRES value) { + authService + .selectDeviceImei(DEVICE_TOKEN) + .then((SelectDeviceIMEIRES value) { GifLoaderDialogUtils.hideDialog(context); if (value != null) { setUserValues(value); diff --git a/lib/pages/pharmacies/screens/product-details/product-detail.dart b/lib/pages/pharmacies/screens/product-details/product-detail.dart index 1f9dcc52..926d5c37 100644 --- a/lib/pages/pharmacies/screens/product-details/product-detail.dart +++ b/lib/pages/pharmacies/screens/product-details/product-detail.dart @@ -13,6 +13,7 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:diplomaticquarterapp/widgets/text/app_texts_widget.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -121,12 +122,39 @@ class __ProductDetailPageState extends State { child: Column( children: [ if (widget.product.images.isNotEmpty) - Container( - height: MediaQuery.of(context).size.height * .40, - child: Image.network( - widget.product.images[0].src.trim(), - fit: BoxFit.contain, - ), + Stack( + children: [ + Container( + height: MediaQuery.of(context).size.height * .40, + child: Center( + child: Image.network( + widget.product.images[0].src.trim(), + fit: BoxFit.contain, + ), + ), + ), + if(model.isStockAvailable!= null && !model.isStockAvailable) + Container( + height: MediaQuery.of(context).size.height * .40, + color: Colors.white.withOpacity(0.75), + // child: AppText("Out of Stock"), + ), + if(model.isStockAvailable!= null && !model.isStockAvailable) + Positioned( + // bottom: 10, + top: MediaQuery.of(context).size.height *.088, + left: MediaQuery.of(context).size.width *.32, + child: Center( + child: Container( + height: MediaQuery.of(context).size.height * .40, + // color: Colors.white.withOpacity(0.75), + child: RotationTransition( + turns: new AlwaysStoppedAnimation(310 / 360), + child: AppText(TranslationBase.of(context).productOutOfStock ,color:Color(0xFF000000).withOpacity(0.1),fontSize: projectViewModel.isArabic?40: 50, fontWeight: FontWeight.bold ,)), + ), + ), + ), + ], ), if (widget.product.discountDescription != null) DiscountDescription(product: widget.product) ], @@ -251,7 +279,7 @@ class __ProductDetailPageState extends State { Column( children: [ FlatButton( - onPressed: model.isStockAvailable + onPressed: model.isStockAvailable !=null && model.isStockAvailable ? () async { GifLoaderDialogUtils.showMyDialog(context); await model.getProductLocationData(widget.product.sku); 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 fb608953..3d10f769 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 @@ -57,10 +57,12 @@ class ProductAppBar extends StatelessWidget with PreferredSizeWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( + mainAxisAlignment: MainAxisAlignment.start, children: [ IconWithBg( - icon: Icons.arrow_back, - color: Colors.grey, + icon: Icons.arrow_back_ios, + color: Color(0xFF2B353E), + onPress: () { Navigator.pop(context); }, diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 4a5c8a5d..c1270603 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -1827,6 +1827,7 @@ class TranslationBase { String get needPrescription => localizedValues['needPrescription'][locale.languageCode]; String get outOfStockMsg => localizedValues['outOfStockMsg'][locale.languageCode]; + String get productOutOfStock => localizedValues['productOutOfStock'][locale.languageCode]; String get noArabicLetters => localizedValues['noArabicLetters'][locale.languageCode];