import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:hmg_qline/constants/app_constants.dart'; import 'package:hmg_qline/utilities/enums.dart'; import 'package:hmg_qline/utilities/extensions.dart'; import 'package:hmg_qline/view_models/queuing_view_model.dart'; import 'package:hmg_qline/view_models/screen_config_view_model.dart'; import 'package:hmg_qline/views/common_widgets/app_footer.dart'; import 'package:hmg_qline/views/common_widgets/app_header.dart'; import 'package:hmg_qline/views/common_widgets/app_scaffold.dart'; import 'package:hmg_qline/views/common_widgets/app_texts_widget.dart'; import 'package:hmg_qline/views/main_queue_screen/components/priority_tickets.dart'; import 'package:hmg_qline/views/main_queue_screen/components/priority_tickets_sidelist.dart'; import 'package:hmg_qline/views/view_helpers/size_config.dart'; import 'package:provider/provider.dart'; class MainQueueScreen extends StatelessWidget { const MainQueueScreen({super.key}); Widget getWeatherWidget(ScreenConfigViewModel screenConfigViewModel) { if (screenConfigViewModel.weathersWidgetModel.maxTemp == null || screenConfigViewModel.weathersWidgetModel.minTemp == null || screenConfigViewModel.weathersWidgetModel.iconPhrase == null) { return const SizedBox.shrink(); } return Container( height: (screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitUp || screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitDown) ? SizeConfig.getHeightMultiplier() * 2 : SizeConfig.getHeightMultiplier() * 0.9, padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10), margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10), decoration: AppColors.configWidgetDecoration, child: Directionality( textDirection: screenConfigViewModel.globalConfigurationsModel.textDirection, child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ AppText( screenConfigViewModel.globalConfigurationsModel.weatherText, color: Colors.grey, fontSize: SizeConfig.getWidthMultiplier() * 2, fontFamily: screenConfigViewModel.globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins, ), AppText( "${screenConfigViewModel.globalConfigurationsModel.maxText}: ${screenConfigViewModel.weathersWidgetModel.maxTemp}°C , ${screenConfigViewModel.globalConfigurationsModel.minText}: ${screenConfigViewModel.weathersWidgetModel.minTemp}°C", fontSize: SizeConfig.getWidthMultiplier() * 3, fontHeight: 1, fontFamily: screenConfigViewModel.globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins, ), ], ), const SizedBox(width: 15), SvgPicture.asset( screenConfigViewModel.weathersWidgetModel.weatherIconPath ?? AppAssets.weatherIcon, height: SizeConfig.getHeightMultiplier() * 0.5, ), ], ), ), ); } Widget getPrayerWidget(ScreenConfigViewModel screenConfigViewModel) { if (screenConfigViewModel.nextPrayerToShowWithTime.isEmpty) { return const SizedBox.shrink(); } return SizedBox( child: Container( height: (screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitUp || screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitDown) ? SizeConfig.getHeightMultiplier() * 2 : SizeConfig.getHeightMultiplier() * 0.9, padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10), margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 10), decoration: AppColors.configWidgetDecoration, child: Directionality( textDirection: screenConfigViewModel.globalConfigurationsModel.textDirection, child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ AppText( screenConfigViewModel.globalConfigurationsModel.nextPrayerText, color: Colors.grey, fontSize: SizeConfig.getWidthMultiplier() * 1.5, fontFamily: screenConfigViewModel.globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins, ), AppText( screenConfigViewModel.nextPrayerToShowWithTime, fontSize: SizeConfig.getWidthMultiplier() * 3, fontHeight: 1, fontFamily: screenConfigViewModel.globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins, ), ], ), const SizedBox(width: 15), SvgPicture.asset( AppAssets.mosqueIcon, height: SizeConfig.getWidthMultiplier() * 7, ), ], ), ), ), ); } Widget counterNoText(int counterNo) { return AppText( "${AppStrings.counterNo}$counterNo", fontFamily: AppStrings.fontNamePoppins, textAlign: TextAlign.center, fontWeight: FontWeight.bold, fontSize: SizeConfig.getWidthMultiplier() * 8, ); } Widget noPatientInQueue({required String text, required String fontName, required bool isForRoomLevel, required int counterNo}) { Widget noPatientText = Center( child: AppText( text, fontFamily: fontName, textAlign: TextAlign.center, fontSize: SizeConfig.getWidthMultiplier() * 9, ), ); if (isForRoomLevel) { return Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [counterNoText(counterNo), noPatientText, const SizedBox.shrink()], ); } else { return noPatientText; } } Widget qamarsBirthdayWidget() { return Column( mainAxisAlignment: MainAxisAlignment.center, children: [ AppText("Good Bye", fontFamily: 'Poppins-SemiBold.ttf', fontSize: SizeConfig.getWidthMultiplier() * 15), Center( child: AppText("Syed Qamar :(", fontFamily: 'Poppins-SemiBold.ttf', fontSize: SizeConfig.getWidthMultiplier() * 11), ), ], ); } // if (globalConfigurationsModel.screenTypeEnum == ScreenTypeEnum.roomLevelScreen) ...[ // SizedBox(height: 20,), // AppText( // AppStrings.counterNo, // fontFamily: AppStrings.fontNamePoppins, // textAlign: TextAlign.center, // fontWeight: FontWeight.bold, // fontSize: SizeConfig.getWidthMultiplier() * 10, // ), // ] Widget dataContent({required BuildContext context}) { return Consumer2( builder: (BuildContext context, ScreenConfigViewModel screenConfigViewModel, QueuingViewModel queuingViewModel, Widget? child) { Widget widget = const SizedBox(); String text = AppStrings.awaitingArrivalEng; String fontFamily = AppStrings.fontNamePoppins; // queuingViewModel.voiceCallTicket(ticketData: queuingViewModel.currentTickets.first.ticketModel); if (screenConfigViewModel.globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic) { text = AppStrings.awaitingArrivalAr; fontFamily = AppStrings.fontNameCairo; } if (queuingViewModel.currentTickets.isEmpty) { bool isForRoomLevel = screenConfigViewModel.globalConfigurationsModel.screenTypeEnum == ScreenTypeEnum.roomLevelScreen; widget = noPatientInQueue(text: text, fontName: fontFamily, isForRoomLevel: isForRoomLevel, counterNo: screenConfigViewModel.globalConfigurationsModel.roomNo ?? 0); } else if (screenConfigViewModel.globalConfigurationsModel.screenTypeEnum == ScreenTypeEnum.roomLevelScreen) { widget = Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ counterNoText(screenConfigViewModel.globalConfigurationsModel.roomNo ?? 0), PriorityTickets( tickets: [queuingViewModel.currentTickets.first], globalConfigurationsModel: screenConfigViewModel.globalConfigurationsModel, ), const SizedBox.shrink() ], ), ], ); } else if (queuingViewModel.currentTickets.length > AppConstants.thresholdForListUI) { widget = PriorityTicketsSidelist( tickets: queuingViewModel.currentTickets, globalConfigurationsModel: screenConfigViewModel.globalConfigurationsModel, screenOrientationEnum: screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum, ); } else { widget = PriorityTickets( tickets: queuingViewModel.currentTickets, globalConfigurationsModel: screenConfigViewModel.globalConfigurationsModel, ); } return widget; }, ); } int getFlexForScreenTypes(ScreenConfigViewModel screenConfigVM) { int flex = 1; if (screenConfigVM.currentScreenTypeEnum == ScreenTypeEnum.roomLevelScreen) { if (screenConfigVM.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitUp || screenConfigVM.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitDown) { flex = 2; } else { flex = 3; } } else { if (screenConfigVM.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitUp || screenConfigVM.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitDown) { flex = 2; } else { flex = 1; } } return flex; } Widget getBody({required BuildContext context}) { return Consumer( builder: (BuildContext context, ScreenConfigViewModel screenConfigVM, Widget? child) { return Column( children: [ if (screenConfigVM.globalConfigurationsModel.screenTypeEnum != ScreenTypeEnum.roomLevelScreen) ...[ Expanded( flex: getFlexForScreenTypes(screenConfigVM), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: Row( children: [ if (screenConfigVM.globalConfigurationsModel.isWeatherReq) ...[ getWeatherWidget(screenConfigVM), ], const SizedBox(width: 20), if (screenConfigVM.globalConfigurationsModel.isPrayerTimeReq) ...[ getPrayerWidget(screenConfigVM), ], ], ), ), ) ], const SizedBox(height: 12), Expanded(flex: 10, child: dataContent(context: context)), if (!screenConfigVM.globalConfigurationsModel.isWeatherReq && !screenConfigVM.globalConfigurationsModel.isPrayerTimeReq) ...[ const SizedBox(height: 100), ], ], ); }, ); } @override Widget build(BuildContext context) { return Selector( selector: (context, screenConfigViewModel) => screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum, builder: (BuildContext context, ScreenOrientationEnum screenOrientationEnum, Widget? child) { //TODO: For Testing Only // context.read().createAutoTickets(numOfTicketsToCreate: 20); // // context.read().voiceCallTicket(ticketData: context.read().currentTickets.first.ticketModel); return RotatedBox( quarterTurns: screenOrientationEnum.getTurnsByOrientation(), child: AppScaffold( appBar: const AppHeader(), body: getBody(context: context), bottomNavigationBar: const AppFooter(), ), ); }, ); } }