import 'package:flutter/material.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/utilities/lifecycle_handler.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_general_widgets.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/main_queue_screen/components/priority_tickets.dart'; import 'package:hmg_qline/views/main_queue_screen/components/priority_tickets_sidelist.dart'; import 'package:provider/provider.dart'; class MainQueueScreen extends StatefulWidget { const MainQueueScreen({super.key}); @override State createState() => _MainQueueScreenState(); } class _MainQueueScreenState extends State { late LifecycleHandler lifecycleHandler; @override void initState() { super.initState(); final ScreenConfigViewModel screenConfigViewModel = context.read(); lifecycleHandler = LifecycleHandler( onResumed: () => screenConfigViewModel.onAppResumed(), onPaused: () => screenConfigViewModel.onAppPaused(), ); lifecycleHandler.register(); } @override void dispose() { lifecycleHandler.unregister(); super.dispose(); } Widget dataContent({required BuildContext context}) { return Consumer2( builder: (BuildContext context, ScreenConfigViewModel screenConfigViewModel, QueuingViewModel queuingViewModel, Widget? child) { // // // TODO: FOR TEST // queuingViewModel.textToSpeechService.speechText( // globalConfigurationsModel: screenConfigViewModel.globalConfigurationsModel, // ticket: queuingViewModel.currentTickets.first, // ); // screenConfigViewModel.getNextPrayerToShow(); Widget widget = const SizedBox(); String text = AppStrings.awaitingArrivalEng; String fontFamily = AppStrings.fontNamePoppins; if (screenConfigViewModel.currentQTypeEnum == QTypeEnum.general) { text = AppStrings.awaitingQueueNumberEng; } if (screenConfigViewModel.globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic) { if (screenConfigViewModel.currentQTypeEnum == QTypeEnum.general) { text = AppStrings.awaitingQueueNumberAr; } text = AppStrings.awaitingArrivalAr; fontFamily = AppStrings.fontNameCairo; } if (screenConfigViewModel.state == ViewState.error && queuingViewModel.currentTickets.isEmpty) { widget = intimationWidget( text: AppStrings.configurationIssueContactAdmin, fontName: AppStrings.fontNamePoppins, isForRoomLevel: false, isRoomNoRequired: false, isForError: true, counterNo: 0, roomText: '', ); } else if (queuingViewModel.currentTickets.isEmpty) { bool isForRoomLevel = screenConfigViewModel.globalConfigurationsModel.screenTypeEnum == ScreenTypeEnum.roomLevelScreen; widget = intimationWidget( text: text, fontName: fontFamily, isForRoomLevel: isForRoomLevel, isRoomNoRequired: screenConfigViewModel.globalConfigurationsModel.isRoomNoRequired ?? true, counterNo: screenConfigViewModel.globalConfigurationsModel.roomNo ?? 0, roomText: screenConfigViewModel.globalConfigurationsModel.roomText ?? AppStrings.counterNo, ); } else if (screenConfigViewModel.globalConfigurationsModel.screenTypeEnum == ScreenTypeEnum.roomLevelScreen) { widget = Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ counterNoText( counterNo: screenConfigViewModel.globalConfigurationsModel.roomNo ?? 0, roomText: screenConfigViewModel.globalConfigurationsModel.roomText ?? AppStrings.counterNo, isRoomNoRequired: screenConfigViewModel.globalConfigurationsModel.isRoomNoRequired ?? true, ), PriorityTickets( tickets: [queuingViewModel.currentTickets.first], globalConfigurationsModel: screenConfigViewModel.globalConfigurationsModel, ), const SizedBox.shrink() ], ), ], ); } else if (queuingViewModel.currentTickets.length > AppConstants.thresholdForListUI) { widget = PriorityTicketsWithSidelist( tickets: queuingViewModel.currentTickets, globalConfigurationsModel: screenConfigViewModel.globalConfigurationsModel, screenOrientationEnum: screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum, ); } else { widget = PriorityTickets( tickets: queuingViewModel.currentTickets, globalConfigurationsModel: screenConfigViewModel.globalConfigurationsModel, ); } return widget; }, ); } 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().testSpeech(); return RotatedBox( quarterTurns: screenOrientationEnum.getTurnsByOrientation(), child: AppScaffold( appBar: const AppHeader(), body: getBody(context: context), bottomNavigationBar: const AppFooter(), ), ); }, ); } }