Untitled

 avatar
unknown
dart
a year ago
17 kB
9
Indexable
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:takamol_user/app/app_ui.dart';
import 'package:takamol_user/app/enums/enums.dart';
import 'package:takamol_user/app/modules/hospitality/current_order/controllers/hospitality_current_order_controller.dart';
import 'package:takamol_user/app/modules/hospitality/current_order/widget/current_order_list.dart';
import 'package:takamol_user/app/widgets/back_button_widget.dart';
import 'package:takamol_user/app/widgets/bottom_sheet.dart';
import 'package:takamol_user/app/widgets/takamol/main_taxt.dart';
import 'package:takamol_user/app/widgets/takamol/takamol_button.dart';
import 'package:takamol_user/resources/assets_svg_generated.dart';
import 'package:takamol_user/resources/strings_generated.dart';

class HospitalityCurrentOrder
    extends GetView<HospitalityCurrentOrderController> {
  final BottomSheetWidget bottomSheet = BottomSheetWidget();

  HospitalityCurrentOrder({
    super.key,
  });

  @override
  Widget build(BuildContext context) {
    return GetBuilder<HospitalityCurrentOrderController>(builder: (c) {
      return Scaffold(
        body: Stack(
          alignment: Alignment.bottomCenter,
          children: [
            Container(
              color: const Color(0xffFCF2E0),
              child: Align(
                alignment: Alignment.topCenter,
                child: Container(
                  padding: const EdgeInsets.all(60),
                  decoration: BoxDecoration(
                    shape: BoxShape.circle,
                    gradient: LinearGradient(
                      colors: [
                        appColors.whiteColor,
                        appColors.whiteColor.withOpacity(0.1),
                      ],
                      begin: Alignment.bottomCenter,
                      end: Alignment.topCenter,
                    ),
                  ),
                  child: AppSVGAssets.getWidget(
                    'assets/svgs/icons/coffee.svg',
                    height: 60,
                  ),
                ),
              ).paddingOnly(top: 150),
            ),
            SafeArea(
              child: Align(
                alignment: Alignment.topRight,
                child: BackButtonWidget(
                  onTap: Get.back,
                  backgroundColor: appColors.whiteColor,
                  iconColor: appColors.blackColor,
                  svgIcon: 'assets/svgs/icons/home.svg',
                ),
              ),
            ).paddingSymmetric(horizontal: 20, vertical: 12),
            // WaitApproveStage(),
            // WaitDriverStage(),
            bottomSheet.bottomSheetWidget(
              Container(
                padding: const EdgeInsets.all(16),
                decoration: const BoxDecoration(
                  borderRadius: BorderRadius.vertical(
                    top: Radius.circular(25),
                  ),
                ),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        MainText(
                          text: c.getOrderType(),
                          fontSize: 14,
                        ),
                        if (c.restaurantOrder.orderNumber != null) ...[
                          MainText(
                            text: '#${c.restaurantOrder.orderNumber}',
                            fontSize: 14,
                          ),
                        ],
                      ],
                    ),
                    SizedBox(
                      height: 16.h,
                    ),
                    Container(
                      decoration: BoxDecoration(
                        color: appColors.lightGreyColor,
                        borderRadius: BorderRadius.circular(15),
                      ),
                      child: Padding(
                        padding: const EdgeInsets.all(16.0),
                        child: Row(
                          children: [
                            AppSVGAssets.getWidget(
                              'assets/svgs/icons/chef.svg',
                            ),
                            SizedBox(
                              width: 12.h,
                            ),
                            MainText(
                              text: c.restaurantOrder.waiter?.name ??
                                  AppStrings.waitingForOrderWaiter,
                            ),
                          ],
                        ),
                      ),
                    ),
                    SizedBox(
                      height: 16.h,
                    ),
                    if (c.restaurantOrder.status == OrderStatus.canceled) ...[
                      Center(
                        child: MainText(
                          text: AppStrings.canceledOrder,
                          fontSize: 16,
                          fontWeight: FontWeight.w600,
                          color: AppColors.instanse.red,
                        ),
                      ),
                      if (c.restaurantOrder.rejectedReason?.reason != null) ...[
                        SizedBox(
                          height: 6.h,
                        ),
                        Center(
                          child: MainText(
                            text: c.restaurantOrder.rejectedReason!.reason!,
                            fontSize: 16,
                          ),
                        ),
                      ],
                    ],
                    if (c.restaurantOrder.status != OrderStatus.canceled)
                      OrderStatusStepper(
                        orderStatus: c.restaurantOrder.status.toInt ?? 0,
                      ),
                    SizedBox(
                      height: 16.h,
                    ),
                    Container(
                      padding: const EdgeInsets.all(8),
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(10),
                        border: Border.all(color: appColors.lightGreyColor),
                      ),
                      child: Column(
                        crossAxisAlignment: CrossAxisAlignment.start,
                        children: [
                          if (c.restaurantOrder.status !=
                              OrderStatus.canceled) ...[
                            Row(
                              children: [
                                Container(
                                  padding: const EdgeInsets.all(8),
                                  decoration: BoxDecoration(
                                    color: appColors.takamolgrey,
                                    shape: BoxShape.circle,
                                  ),
                                  child: AppSVGAssets.getWidget(
                                    'assets/svgs/icons/clock1.svg',
                                  ),
                                ),
                                SizedBox(
                                  width: 12.w,
                                ),
                                Column(
                                  crossAxisAlignment: CrossAxisAlignment.start,
                                  children: [
                                    MainText(
                                      text: AppStrings
                                          .expectedDateForOrderDelivery,
                                      color: appColors.mediumGreyColor,
                                      fontSize: 14,
                                    ),
                                    SizedBox(
                                      height: 4.h,
                                    ),
                                    MainText(
                                      text: c.getOrderEstimatedTime(),
                                      color: appColors.blackColor,
                                      fontSize: 14,
                                    ),
                                  ],
                                ),
                              ],
                            ),
                            const Divider(
                              height: 24,
                            ),
                          ],
                          Row(
                            children: [
                              Container(
                                padding: const EdgeInsets.all(8),
                                decoration: BoxDecoration(
                                  color: appColors.takamolgrey,
                                  shape: BoxShape.circle,
                                ),
                                child: AppSVGAssets.getWidget(
                                  'assets/svgs/icons/marker.svg',
                                ),
                              ),
                              SizedBox(
                                width: 12.w,
                              ),
                              Column(
                                crossAxisAlignment: CrossAxisAlignment.start,
                                children: [
                                  MainText(
                                    text: AppStrings.myOffice,
                                    color: appColors.mediumGreyColor,
                                    fontSize: 14,
                                  ),
                                  SizedBox(
                                    height: 4.h,
                                  ),
                                  FittedBox(
                                    child: MainText(
                                      text: controller.getOrderLocation(),
                                      color: appColors.blackColor,
                                      fontSize: 14,
                                    ),
                                  ),
                                ],
                              ),
                            ],
                          ),
                        ],
                      ),
                    ),
                    if (c.restaurantOrder.items.isNotEmpty) ...[
                      CurrentOrderList(
                        items: c.restaurantOrder.items,
                      ),
                    ],
                    if (c.restaurantOrder.status == OrderStatus.pending) ...[
                      SizedBox(
                        height: 8.h,
                      ),
                      TakamolButton(
                        onPressed: () => c.confirmCancelOrder(),
                        text: AppStrings.cancelOrder,
                        width: Get.width,
                        height: Get.width * 0.14,
                        color: Colors.red.withOpacity(0.05),
                        textColor: appColors.red,
                        fontSize: 16,
                        fontWeight: FontWeight.bold,
                      ),
                    ],
                  ],
                ),
              ),
              height: (Get.height * 0.53).h,
            ),
          ],
        ),
      );
    });
  }
}

// ignore: must_be_immutable
class OrderStatusStepper extends StatelessWidget {
  const OrderStatusStepper({
    super.key,
    required this.orderStatus,
  });

  final int orderStatus;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Builder(
              builder: (_) => orderStatus < 0
                  ? Transform.scale(
                      scale: 1.2,
                      child: AppSVGAssets.getWidget(
                          'assets/svgs/icons/grey_point.svg'),
                    )
                  : orderStatus == 0
                      ? Transform.scale(
                          scale: 1.2,
                          child: AppSVGAssets.getWidget(
                              'assets/svgs/icons/orange_point.svg'),
                        )
                      : orderStatus > 0
                          ? Transform.scale(
                              scale: 1.2,
                              child: AppSVGAssets.getWidget(
                                  'assets/svgs/icons/check.svg',
                                  width: 16),
                            )
                          : Transform.scale(
                              scale: 1.2,
                              child: AppSVGAssets.getWidget(
                                  'assets/svgs/icons/grey_point.svg'),
                            ),
            ),
            const Expanded(
              child: Divider(
                thickness: 1.5,
                color: Color(0xffECECEC),
              ),
            ),
            Builder(
              builder: (_) => orderStatus < 1
                  ? Transform.scale(
                      scale: 1.2,
                      child: AppSVGAssets.getWidget(
                          'assets/svgs/icons/grey_point.svg'),
                    )
                  : orderStatus == 1
                      ? Transform.scale(
                          scale: 1.2,
                          child: AppSVGAssets.getWidget(
                              'assets/svgs/icons/orange_point.svg'),
                        )
                      : orderStatus > 1
                          ? Transform.scale(
                              scale: 1.2,
                              child: AppSVGAssets.getWidget(
                                  'assets/svgs/icons/check.svg',
                                  width: 16),
                            )
                          : Transform.scale(
                              scale: 1.2,
                              child: AppSVGAssets.getWidget(
                                  'assets/svgs/icons/grey_point.svg'),
                            ),
            ),
            const Expanded(
              child: Divider(
                thickness: 1.5,
                color: Color(0xffECECEC),
              ),
            ),
            Builder(
              builder: (_) => orderStatus < 2
                  ? Transform.scale(
                      scale: 1.2,
                      child: AppSVGAssets.getWidget(
                          'assets/svgs/icons/grey_point.svg'),
                    )
                  : orderStatus == 2
                      ? Transform.scale(
                          scale: 1.2,
                          child: AppSVGAssets.getWidget(
                              'assets/svgs/icons/orange_point.svg'),
                        )
                      : orderStatus > 2
                          ? Transform.scale(
                              scale: 1.2,
                              child: AppSVGAssets.getWidget(
                                  'assets/svgs/icons/check.svg',
                                  width: 16),
                            )
                          : Transform.scale(
                              scale: 1.2,
                              child: AppSVGAssets.getWidget(
                                  'assets/svgs/icons/grey_point.svg'),
                            ),
            ),
          ],
        ).paddingSymmetric(horizontal: 24),
        SizedBox(height: 8.h),
        Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            MainText(
              text: AppStrings.pending,
              fontSize: 14,
            ),
            MainText(
              text: AppStrings.preparing,
              fontSize: 14,
            ),
            MainText(
              text: AppStrings.delivered,
              fontSize: 14,
            ),
          ],
        ),
      ],
    );
  }
}
Editor is loading...
Leave a Comment