Untitled
unknown
dart
3 years ago
35 kB
4
Indexable
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:iketfaa_delivery/App/Common/Modules/SignIn/binding/signin_binding.dart'; import 'package:iketfaa_delivery/App/Common/Modules/SignIn/view/signin_view.dart'; import 'package:iketfaa_delivery/App/Common/Utilities/Constants/AppColors.dart'; import 'package:iketfaa_delivery/App/Common/Utilities/Constants/AppStyles.dart'; import 'package:iketfaa_delivery/App/Common/Utilities/Constants/Strings/Backend.dart'; import 'package:iketfaa_delivery/App/Common/Widgets/no_items_empty.dart'; import 'package:iketfaa_delivery/App/Common/Widgets/primary_button.dart'; import 'package:iketfaa_delivery/App/Delivery/Models/Main/PersonalAddress.dart'; import 'package:iketfaa_delivery/App/Delivery/Modules/DeliveryCart/Controller/delivery_cart_conroller.dart'; import 'package:iketfaa_delivery/App/Delivery/Modules/DeliveryUser/DeliveryUserAddressBook/binding/delivery_address_book_binding.dart'; import 'package:iketfaa_delivery/App/Delivery/Modules/DeliveryUser/DeliveryUserAddressBook/view/delivery_add_new_address_view.dart'; import 'package:iketfaa_delivery/App/Delivery/Utilities/Widgets/Drawer/delivery_tile_button_for_drawer.dart'; import 'package:iketfaa_delivery/App/Delivery/Utilities/Widgets/LocationTile.dart'; import 'package:iketfaa_delivery/App/Delivery/Utilities/Widgets/custimized_cupertino_dialog.dart'; import 'package:iketfaa_delivery/App/Delivery/Utilities/Widgets/DeliveryCartListCard.dart'; import 'package:iketfaa_delivery/App/Delivery/Utilities/Widgets/delivery_white_button.dart'; import 'package:iketfaa_delivery/App/Delivery/Utilities/Widgets/primary_app_bar.dart'; class DeliveryCartView extends GetView<DeliveryCartController> { @override Widget build(BuildContext context) { return Container( padding: EdgeInsets.all(15), decoration: BoxDecoration( gradient: LinearGradient( colors: [ AppColors.white, AppColors.greenyWhite, ], begin: Alignment.topCenter, end: Alignment.bottomCenter, ), ), child: Obx( () => Scaffold( appBar: PrimaryAppBar( title: 'shoppingCart'.tr, function: () { Get.back(); }, ), backgroundColor: Colors.transparent, body: controller.deliveryHomeController.deliveryHubController.cart .value.orders!.isEmpty ? EmptyCartView() : FilledCartView()), ), ); } } class EmptyCartView extends GetView<DeliveryCartController> { const EmptyCartView({ Key? key, }) : super(key: key); @override Widget build(BuildContext context) { return GestureDetector( onTap: () {}, child: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ Row(), Icon( Icons.shopping_cart, color: AppColors.primary, size: 80, ), SizedBox( height: 30.0, ), Text( 'noItemToShow'.tr, style: Get.textTheme.headline3, ), ], ), ); } } class RdButton extends GetView<DeliveryCartController> { const RdButton({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Container( child: Obx( () => Column( children: [ Row( children: [ Radio<PaymentMethod>( value: PaymentMethod.cash, groupValue: controller.character!.value, activeColor: AppColors.primary, onChanged: (PaymentMethod? value) { controller.character!.value = value!; controller.deliveryHomeController.deliveryHubController .cart.value.paymentType = 0; }), SizedBox(height: 7), Text('cash'.tr, style: Get.textTheme.headline5), ], ), Row( children: [ Radio<PaymentMethod>( value: PaymentMethod.Credit_card, groupValue: controller.character!.value, activeColor: AppColors.primary, onChanged: (PaymentMethod? value) { controller.character!.value = value!; controller.deliveryHomeController.deliveryHubController .cart.value.paymentType = 1; }), SizedBox(height: 7), Text('cridet card'.tr, style: Get.textTheme.headline5), ], ), Row( children: [ Radio<PaymentMethod>( value: PaymentMethod.wallet, groupValue: controller.character!.value, activeColor: AppColors.primary, onChanged: (PaymentMethod? value) { controller.character!.value = value!; controller.deliveryHomeController.deliveryHubController .cart.value.paymentType = 2; }), SizedBox(height: 7), Text('wallet'.tr, style: Get.textTheme.headline5), ], ), ], ), ), ); } } class FilledCartView extends GetView<DeliveryCartController> { const FilledCartView({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Container( child: SingleChildScrollView( child: Column( children: [ Obx( () => ListView.builder( physics: NeverScrollableScrollPhysics(), shrinkWrap: true, itemCount: controller.deliveryHomeController .deliveryHubController.cart.value.orders!.length, itemBuilder: (context, index) { final item = controller.deliveryHomeController .deliveryHubController.cart.value.orders!.length; return Dismissible( background: Container( height: 100, color: Colors.red, child: Center( child: Text( 'delete'.tr, style: Get.textTheme.headline5! .copyWith(color: AppColors.white), ), ), ), key: Key(item.toString()), confirmDismiss: (direction) async { await showDialog( context: context, builder: (context) => CustimizedCupertinoDialog( onPressed: () async { controller .deliveryHomeController.deliveryHubController .removeItem(index); controller.deliveryHomeController .deliveryHubController.cart .refresh(); controller.deliveryHomeController .deliveryHubController.cartLength - 1; controller.deliveryHomeController .deliveryHubController.cartLength .refresh(); Get.back(); if (controller .deliveryHomeController .deliveryHubController .cart .value .orders! .length != 0) { controller.deliveryHomeController.distance.value = await controller.authManager.deliveryTools .calculateAllDistanceForPrice(controller .deliveryHomeController .deliveryHubController .cart .value .orders!); await controller.deliveryHomeController .deliveryHubController.globalStorage .write( 'deliveryCartFromLocal', controller.deliveryHomeController .deliveryHubController.cart .toJson()); } else { await controller.deliveryHomeController .deliveryHubController.globalStorage .remove('deliveryCartFromLocal'); controller.deliveryHomeController.distance.value = await controller.authManager.deliveryTools .calculateAllDistanceForPrice(controller .deliveryHomeController .deliveryHubController .cart .value .orders!); } controller.authManager.commonTools .showSuccessSnackBar( 'order has been deleted successfully'.tr); }, title: 'do you want to remove this order?'.tr, ), ); }, child: DeliveryCartListCard( index: index, orderItem: controller .deliveryHomeController .deliveryHubController .cart .value .orders![index] .orderItems!, storeOrder: controller.deliveryHomeController .deliveryHubController.cart.value.orders![index], onTap: () {}, ), ); }, ), ), const SizedBox(height: 30), Row( children: [ SvgPicture.asset( 'assets/svg/person location.svg', width: 30, ), Text( 'location'.tr, style: Get.textTheme.headline6, ), ], ), SizedBox(height: 10), Obx( () => DeliveryWhiteButton( onTap: () { controller.authManager.commonTools.showCustomBottomSheet( context, controller.authManager.isLogged.value ? "chooseDeliveryLocation".tr : 'pleaseSignIn'.tr, controller.authManager.isLogged.value ? StreamBuilder<QuerySnapshot>( stream: FirebaseFirestore.instance .collection(DELIVERY_USERS_COLLECTION) .doc(controller.authManager.appUser.value.id) .collection(PERSONAL_ADDRESS_COLLECTION) .orderBy(DATE_FIELD, descending: true) .snapshots(), builder: (context, snapshot) { if (snapshot.data == null) { return Container( height: Get.width * 0.6, width: Get.width, child: CupertinoActivityIndicator(), ); } if (!snapshot.hasData) { return Container( height: Get.width * 0.6, width: Get.width, child: CupertinoActivityIndicator(), ); } return !snapshot.data!.docs.isEmpty ? Container( height: Get.width * 0.8, padding: EdgeInsets.symmetric( horizontal: 25), child: ListView( shrinkWrap: true, children: [ Container( child: ListView.builder( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), itemCount: snapshot.data!.docs.length, itemBuilder: (context, index) { DocumentSnapshot doc = snapshot .data!.docs[index]; PersonalAddress? address = PersonalAddress.fromMap( doc.data() as Map< String, dynamic>); return LocationTile( withCricle: true, address: address, active: controller .deliveryHomeController .deliveryHubController .currentPersonalAddress .value .adID == address.adID, onTap: () async { await controller .setCurrentAddress( address); controller .deliveryHomeController .calculateAllData(); controller .deliveryHomeController .deliveryHubController .cart .refresh(); Get.back(); }, ); }, ), ), ListTile( onTap: () async { controller .deliveryHomeController .cartAddressFlag .value = true; Get.to( () => DeliveryAddNewAddressView(), binding: DeliveryAddressBookBinding(), ); controller .deliveryHomeController .deliveryHubController .cart .refresh(); }, title: Text('addNewAddress'.tr, style: Get.textTheme.headline4), leading: SvgPicture.asset( 'assets/svg/gen011-021.svg', width: 25, ), ), Divider(), ListTile( onTap: () async { controller .deliveryHomeController .deliveryHubController .currentPersonalAddress .value = PersonalAddress(); await controller .setCurrentAddress(controller .deliveryHomeController .deliveryHubController .currentPersonalAddress .value); controller .deliveryHomeController .calculateAllData(); controller .deliveryHomeController .deliveryHubController .cart .refresh(); Get.back(); }, title: Text('currentLocation'.tr, style: Get.textTheme.headline4), leading: SvgPicture.asset( 'assets/svg/gen011-021.svg', width: 25, ), ) ], ), ) : Container( padding: EdgeInsets.all(10), child: Column( children: [ ListTile( onTap: () { controller .deliveryHomeController .cartAddressFlag .value = true; Get.to( () => DeliveryAddNewAddressView(), binding: DeliveryAddressBookBinding(), ); }, title: Text('addNewAddress'.tr, style: Get.textTheme.headline4), leading: SvgPicture.asset( 'assets/svg/gen011-021.svg', width: 25, ), ), Divider(), ListTile( onTap: () { controller .deliveryHomeController .deliveryHubController .currentPersonalAddress .value = PersonalAddress(); print(controller .deliveryHomeController .deliveryHubController .currentPersonalAddress .value .lat); Get.back(); }, title: Text('currentLocation'.tr, style: Get.textTheme.headline4), leading: SvgPicture.asset( 'assets/svg/gen011-021.svg', width: 25, ), ) ], ), ); }, ) : Column( mainAxisAlignment: MainAxisAlignment.end, children: [ Container( height: 10, color: AppColors.white, ), Container( color: AppColors.white, child: Column( children: [ DelvieryTileButtonForDrawer( title: 'login'.tr, onTap: () { Get.offAll(() => SignInView(), binding: SignInBinding()); }, icon: Icon(Icons.login, color: AppColors.primary), ), Container( height: 30, color: AppColors.white, ), ], ), ), ], )); }, title: controller.deliveryHomeController.deliveryHubController .currentPersonalAddress.value.adID == null ? 'currentLocation'.tr : controller.deliveryHomeController.deliveryHubController .currentPersonalAddress.value.title!, ), ), const SizedBox(height: 25), Column( children: [ Row( children: [ SvgPicture.asset( 'assets/svg/Icon payment.svg', width: 18, ), const SizedBox(width: 5), Text( 'Choose your preferred payment method'.tr, style: Get.textTheme.headline6, ), ], ), const SizedBox(height: 10), RdButton(), const SizedBox(height: 10), Divider( endIndent: 2, indent: 2, thickness: 1.2, ), controller.deliveryHomeController.deliveryHubController.cart .value.orderType == 0 ? Obx( () => controller .deliveryHomeController .deliveryHubController .currentPersonalAddress .value .adID != null ? SizedBox() : Container( margin: EdgeInsets.only( bottom: 15.0, top: 15.0, right: 5.0, left: 5.0), padding: EdgeInsets.all(10.0), decoration: BoxDecoration( borderRadius: BorderRadius.circular(10.0), color: AppColors.white, boxShadow: [AppStyles.primaryShadow]), child: Row( children: [ Icon( Icons.report_outlined, color: AppColors.notification, ), SizedBox( width: 10.0, ), Expanded( child: Text( "pleaseSelectOrderAddressInCart".tr, style: Get.textTheme.headline4! .copyWith(height: 1.5), ), ), ], ), ), ) : SizedBox(), controller.deliveryHomeController.deliveryHubController.cart .value.orders![0].storeName! != 'directOrder' ? Column( children: [ const SizedBox(height: 10), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Estimate Delivery Fee'.tr, style: Get.textTheme.headline5, ), Obx( () => Text( controller.deliveryHomeController.price .value == 0.0 ? '-' : controller.deliveryHomeController.price .value .toString() + ' - ' + (controller.deliveryHomeController .price.value + 5.0) .toString() + ' ' + 'SAR'.tr, style: Get.textTheme.headline5, ), ), ], ), const SizedBox(height: 10), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( 'Total Distance'.tr, style: Get.textTheme.headline5, ), Obx( () => Text( controller.deliveryHomeController.distance .value == 0.0 ? '-' : controller.authManager.deliveryTools .getDistanceString(controller .deliveryHomeController .distance .value), style: Get.textTheme.headline5, ), ), ], ), ], ) : Container(), const SizedBox(height: 30), Column( children: [ PrimaryButton( text: 'Send', function: () async { if (!controller.authManager.isLogged.value) { controller.authManager.commonTools .showFailedSnackBar('pleaseLogin'); return; } // if (controller // .deliveryHomeController // .deliveryHubController // .currentPersonalAddress // .value // .lat == // null) { // controller.authManager.commonTools.showFailedSnackBar( // 'pleaseSelectOrderAddressInCart'); // return; // } controller.authManager.commonTools.showLoading(); await controller.sendOrder(); }, ), const SizedBox(height: 15), PrimaryButton( text: 'clearthebasket'.tr, function: () { showDialog( context: context, builder: (context) => CustimizedCupertinoDialog( onPressed: () async { controller .deliveryHomeController.deliveryHubController .clearCart(); Get.back(); Get.back(); if (controller .deliveryHomeController .deliveryHubController .cart .value .orderType == 0) { controller .deliveryHomeController.distance.value = await controller.authManager.deliveryTools .calculateAllDistanceForPrice(controller .deliveryHomeController .deliveryHubController .cart .value .orders!); } await controller.deliveryHomeController .deliveryHubController.globalStorage .remove('deliveryCartFromLocal'); }, title: 'do you want to clear this cart?'.tr, ), ); }, buttonColor: AppColors.white, fontColor: AppColors.black, ) ], ), const SizedBox(height: 30), ], ), ], ), ), ); } }
Editor is loading...