From c46c475feb10525657de65379d181aad207c3496 Mon Sep 17 00:00:00 2001 From: Faiz Hashmi Date: Wed, 26 Mar 2025 11:27:30 +0300 Subject: [PATCH] Completed kiosk ui screens --- assets/images/hmglogo_pharmacy.svg | 34 ++++ assets/images/language_icon.svg | 4 + lib/config/routes.dart | 3 + lib/constants/app_constants.dart | 6 + lib/repositories/screen_details_repo.dart | 24 +++ lib/utilities/enums.dart | 9 +- lib/utilities/extensions.dart | 4 + lib/view_models/screen_config_view_model.dart | 24 ++- .../common_widgets/app_general_widgets.dart | 184 ++++++++++++++++++ lib/views/common_widgets/app_header.dart | 4 +- .../kiosk_screens/kiosk_main_screen.dart | 138 +++++++++++++ .../main_queue_screen/main_queue_screen.dart | 174 +---------------- lib/views/splash_screen/splash_screen.dart | 11 +- pubspec.lock | 30 +-- 14 files changed, 455 insertions(+), 194 deletions(-) create mode 100644 assets/images/hmglogo_pharmacy.svg create mode 100644 assets/images/language_icon.svg create mode 100644 lib/views/common_widgets/app_general_widgets.dart create mode 100644 lib/views/kiosk_screens/kiosk_main_screen.dart diff --git a/assets/images/hmglogo_pharmacy.svg b/assets/images/hmglogo_pharmacy.svg new file mode 100644 index 0000000..24a79de --- /dev/null +++ b/assets/images/hmglogo_pharmacy.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/language_icon.svg b/assets/images/language_icon.svg new file mode 100644 index 0000000..c740a6a --- /dev/null +++ b/assets/images/language_icon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/lib/config/routes.dart b/lib/config/routes.dart index 6ba96cd..65c8073 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -1,15 +1,18 @@ import 'package:flutter/cupertino.dart'; import 'package:hmg_qline/views/main_queue_screen/main_queue_screen.dart'; import 'package:hmg_qline/views/splash_screen/splash_screen.dart'; +import 'package:hmg_qline/views/kiosk_screens/kiosk_main_screen.dart'; class AppRoutes { //User static const String splash = "/splash"; static const String mainQueueScreen = "/mainQueueScreen"; + static const String kioskMainScreen = "/kioskMainScreen"; static const String initialRoute = splash; static final Map routes = { splash: (context) => const SplashScreen(), + kioskMainScreen: (context) => const KioskMainScreen(), mainQueueScreen: (context) => const MainQueueScreen(), }; } diff --git a/lib/constants/app_constants.dart b/lib/constants/app_constants.dart index dcabba5..2cbeb19 100644 --- a/lib/constants/app_constants.dart +++ b/lib/constants/app_constants.dart @@ -53,8 +53,10 @@ class AppColors { class AppAssets { static String hmgLogo = "assets/images/hmglogo.svg"; + static String hmgLogoPharmacy = "assets/images/hmglogo_pharmacy.svg"; static String noInternetImage = "assets/images/undraw_connected_world_wuay.png"; static String cloudLogo = "assets/images/cloud_logo.png"; + static String languageIcon = "assets/images/language_icon.svg"; //IconPaths static String vitalSignIcon = "assets/images/vitalsign_icon.svg"; @@ -93,6 +95,7 @@ class ApiConstants { static String baseUrl = 'https://ms.hmg.com/nscapi'; static String baseUrlHub = '$baseUrl/PatientCallingHub'; static String baseUrlApi = '$baseUrl/api'; + static String baseUrlApiGen = '$baseUrl/api/Gen/'; static String baseUrlApiPatientCall = '$baseUrlApi/PatientCall'; static String createTicket = '$baseUrlApiPatientCall/LAB_PatientCallNo_Get'; static String commonConfigGet = '$baseUrlApiPatientCall/Common_Config_GetByIP'; @@ -102,6 +105,9 @@ class ApiConstants { static String prayerTimeToday = "$baseUrlApiPatientCall/PrayerTime_Today"; static String ticketCallRequestUpdate = "$baseUrlApiPatientCall/CallRequest_QueueUpdate"; + //Generic + static String createTicketForKiosk = '$baseUrlApiGen/GEN_PatientCallNo_Get'; + // Signal R Constants static String sendQLinePatientCall = "SendQLinePatientCall"; diff --git a/lib/repositories/screen_details_repo.dart b/lib/repositories/screen_details_repo.dart index 4aa0c16..383c052 100644 --- a/lib/repositories/screen_details_repo.dart +++ b/lib/repositories/screen_details_repo.dart @@ -13,6 +13,8 @@ abstract class ScreenDetailsRepo { Future createNextTickets({required int ticketNumber}); + Future createTicketFromKiosk({required int queueId}); + Future getScreenConfigurationsByIP({required String ipAddress}); Future getWeatherDetailsByCity({required String cityId}); @@ -77,6 +79,28 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo { } } + @override + Future createTicketFromKiosk({required int queueId}) async { + try { + var params = { + "projectID": "15", + "createdBy": "101", + "isVidaPlus": true, + "apiKey": AppConstants.apiKey, + }; + GenericRespModel adsGenericModel = await apiClientInstance.postJsonForObject( + (json) => GenericRespModel.fromJson(json), + ApiConstants.createTicketForKiosk, + params, + ); + return adsGenericModel; + } catch (e) { + logger.e(e.toString()); + InfoComponents.showToast(e.toString()); + return null; + } + } + @override Future getScreenConfigurationsByIP({required String ipAddress}) async { try { diff --git a/lib/utilities/enums.dart b/lib/utilities/enums.dart index 7f9900e..86760f1 100644 --- a/lib/utilities/enums.dart +++ b/lib/utilities/enums.dart @@ -15,7 +15,8 @@ enum QTypeEnum { appointment, // 1 lab, // 2 rad, // 3 - pharmacy, // 4 + general, // 4 + pharmacy, // 5 } enum ScreenTypeEnum { @@ -23,6 +24,7 @@ enum ScreenTypeEnum { roomLevelScreen, // 2 receptionScreen, // 3 dashboardScreen, // 4 + kioskScreen, // 5 } enum LanguageEnum { @@ -30,3 +32,8 @@ enum LanguageEnum { arabic, } +enum KioskScreenStateEnums { + languageState, + queueSelectionState, + ticketNoState, +} diff --git a/lib/utilities/extensions.dart b/lib/utilities/extensions.dart index 9637459..d0ef02b 100644 --- a/lib/utilities/extensions.dart +++ b/lib/utilities/extensions.dart @@ -63,6 +63,8 @@ extension QTypeEnumExtension on int { case 3: return QTypeEnum.rad; case 4: + return QTypeEnum.general; + case 5: return QTypeEnum.pharmacy; default: return QTypeEnum.lab; @@ -89,6 +91,8 @@ extension ScreenTypeExtension on int { return ScreenTypeEnum.receptionScreen; case 4: return ScreenTypeEnum.dashboardScreen; + case 5: + return ScreenTypeEnum.kioskScreen; default: return ScreenTypeEnum.waitingAreaScreen; } diff --git a/lib/view_models/screen_config_view_model.dart b/lib/view_models/screen_config_view_model.dart index a812953..8c314dc 100644 --- a/lib/view_models/screen_config_view_model.dart +++ b/lib/view_models/screen_config_view_model.dart @@ -66,6 +66,20 @@ class ScreenConfigViewModel extends ChangeNotifier { notifyListeners(); } + KioskScreenStateEnums kioskScreenStateEnum = KioskScreenStateEnums.languageState; + + void updateKioskScreenState(KioskScreenStateEnums state) { + kioskScreenStateEnum = state; + notifyListeners(); + } + + LanguageEnum currentSelectedKioskLanguage = LanguageEnum.english; + + void updateCurrentSelectedKioskLanguage(LanguageEnum value) { + currentSelectedKioskLanguage = value; + notifyListeners(); + } + updateCurrentScreenRotation(ScreenOrientationEnum value) { globalConfigurationsModel.orientationTypeEnum = value; notifyListeners(); @@ -108,13 +122,19 @@ class ScreenConfigViewModel extends ChangeNotifier { GlobalConfigurationsModel globalConfigurationsModel = GlobalConfigurationsModel(); Future getGlobalConfigurationsByIP() async { + // TODO: TEST ONLY + updateCurrentScreenTypeEnum(ScreenTypeEnum.kioskScreen); + updateCurrentQTypeEnum(QTypeEnum.general); + GlobalConfigurationsModel? response = await screenDetailsRepo.getGlobalScreenConfigurations(ipAddress: currentScreenIP); if (response == null) { + log("response; ${response}"); return; } updateGlobalConfigurationsModel(value: response); - updateCurrentScreenTypeEnum(globalConfigurationsModel.screenTypeEnum); - updateCurrentQTypeEnum(globalConfigurationsModel.qTypeEnum); + // updateCurrentScreenTypeEnum(globalConfigurationsModel.screenTypeEnum); + // updateCurrentQTypeEnum(globalConfigurationsModel.qTypeEnum); + notifyListeners(); } diff --git a/lib/views/common_widgets/app_general_widgets.dart b/lib/views/common_widgets/app_general_widgets.dart new file mode 100644 index 0000000..02058bb --- /dev/null +++ b/lib/views/common_widgets/app_general_widgets.dart @@ -0,0 +1,184 @@ +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/view_models/screen_config_view_model.dart'; +import 'package:hmg_qline/views/common_widgets/app_texts_widget.dart'; +import 'package:hmg_qline/views/view_helpers/size_config.dart'; + +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, + ), + ], + ), + ), + ), + ); +} + +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 counterNoText(int counterNo) { + return AppText( + "${AppStrings.counterNo}$counterNo", + fontFamily: AppStrings.fontNamePoppins, + textAlign: TextAlign.center, + fontWeight: FontWeight.bold, + color: Colors.transparent, + 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 commonSelectionCardKiosk({required ScreenConfigViewModel screenConfigViewModel, required String title, required String icon, required VoidCallback onTap}) { + log("screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum: ${screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum}"); + return InkWell( + onTap: onTap, + child: SizedBox( + child: Container( + constraints: BoxConstraints(minWidth: SizeConfig.getWidthMultiplier() * 30), + padding: const EdgeInsets.all(5), + margin: const EdgeInsets.all(10), + decoration: AppColors.configWidgetDecoration, + child: Directionality( + textDirection: screenConfigViewModel.globalConfigurationsModel.textDirection, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + SvgPicture.asset(icon, height: SizeConfig.getWidthMultiplier() * 12), + const SizedBox(height: 15), + AppText( + title, + fontSize: SizeConfig.getWidthMultiplier() * 6, + fontHeight: 1, + fontFamily: screenConfigViewModel.globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins, + ), + ], + ), + ), + ), + ), + ); +} diff --git a/lib/views/common_widgets/app_header.dart b/lib/views/common_widgets/app_header.dart index 329d566..85d2f64 100644 --- a/lib/views/common_widgets/app_header.dart +++ b/lib/views/common_widgets/app_header.dart @@ -67,7 +67,7 @@ class AppHeader extends StatelessWidget implements PreferredSizeWidget { alignment: Alignment.center, height: SizeConfig.getHeightMultiplier() * 0.65, padding: const EdgeInsets.only(left: 20, right: 20), - decoration: BoxDecoration(color: AppColors.redColor), + decoration: BoxDecoration(color: AppColors.greenColor), child: Directionality( textDirection: globalConfigurationsModel.textDirection, child: Row( @@ -80,7 +80,7 @@ class AppHeader extends StatelessWidget implements PreferredSizeWidget { fontFamily: globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins, ), SvgPicture.asset( - AppAssets.hmgLogo, + AppAssets.hmgLogoPharmacy, height: SizeConfig.getHeightMultiplier() * 0.5, ), ], diff --git a/lib/views/kiosk_screens/kiosk_main_screen.dart b/lib/views/kiosk_screens/kiosk_main_screen.dart new file mode 100644 index 0000000..3de6796 --- /dev/null +++ b/lib/views/kiosk_screens/kiosk_main_screen.dart @@ -0,0 +1,138 @@ +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/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/view_helpers/size_config.dart'; +import 'package:provider/provider.dart'; + +class KioskMainScreen extends StatelessWidget { + const KioskMainScreen({super.key}); + + 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: dataContentKiosk(context: context)), + if (!screenConfigVM.globalConfigurationsModel.isWeatherReq && !screenConfigVM.globalConfigurationsModel.isPrayerTimeReq) ...[ + const SizedBox(height: 100), + ], + ], + ); + }, + ); + } + + Widget kioskLanguageStateWidget(ScreenConfigViewModel screenConfigViewModel) { + return GridView.builder( + itemCount: 2, + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2), + itemBuilder: (BuildContext context, int index) { + return Padding( + padding: const EdgeInsets.all(20), + child: commonSelectionCardKiosk( + screenConfigViewModel: screenConfigViewModel, + title: index == 0 ? "English" : "عربي", + icon: AppAssets.languageIcon, + onTap: () { + if (index == 0) { + screenConfigViewModel.updateCurrentSelectedKioskLanguage(LanguageEnum.english); + screenConfigViewModel.updateKioskScreenState(KioskScreenStateEnums.queueSelectionState); + } else { + screenConfigViewModel.updateCurrentSelectedKioskLanguage(LanguageEnum.arabic); + screenConfigViewModel.updateKioskScreenState(KioskScreenStateEnums.queueSelectionState); + } + }, + ), + ); + }, + ); + } + + Widget kioskQueueSelectionStateWidget(ScreenConfigViewModel screenConfigViewModel) { + return GridView.builder( + itemCount: 5, + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: (screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitUp || + screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitDown) + ? 3 + : 2, + ), + itemBuilder: (BuildContext context, int index) { + return Column(mainAxisSize: MainAxisSize.min, children: [ + commonSelectionCardKiosk( + screenConfigViewModel: screenConfigViewModel, + title: "New Latest Certificate Generation ${index + 1}", + icon: AppAssets.languageIcon, + onTap: () { + screenConfigViewModel.updateKioskScreenState(KioskScreenStateEnums.languageState); + }), + ]); + }); + } + + Widget kioskTicketNumberStateWidget(ScreenConfigViewModel screenConfigViewModel) { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + commonSelectionCardKiosk(screenConfigViewModel: screenConfigViewModel, title: "English", icon: AppAssets.languageIcon, onTap: () {}), + commonSelectionCardKiosk(screenConfigViewModel: screenConfigViewModel, title: "عربي", icon: AppAssets.languageIcon, onTap: () {}), + ], + ); + } + + Widget dataContentKiosk({required BuildContext context}) { + return Padding( + padding: const EdgeInsets.all(10), + child: Consumer(builder: (BuildContext context, ScreenConfigViewModel screenConfigViewModel, Widget? child) { + return switch (screenConfigViewModel.kioskScreenStateEnum) { + KioskScreenStateEnums.languageState => kioskLanguageStateWidget(screenConfigViewModel), + KioskScreenStateEnums.queueSelectionState => kioskQueueSelectionStateWidget(screenConfigViewModel), + KioskScreenStateEnums.ticketNoState => kioskTicketNumberStateWidget(screenConfigViewModel), + }; + }), + ); + } + + @override + Widget build(BuildContext context) { + return Selector( + selector: (context, screenConfigViewModel) => screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum, + builder: (BuildContext context, ScreenOrientationEnum screenOrientationEnum, Widget? child) { + return RotatedBox( + quarterTurns: screenOrientationEnum.getTurnsByOrientation(), + child: AppScaffold( + appBar: const AppHeader(), + body: getBody(context: context), + bottomNavigationBar: const AppFooter(), + ), + ); + }, + ); + } +} diff --git a/lib/views/main_queue_screen/main_queue_screen.dart b/lib/views/main_queue_screen/main_queue_screen.dart index a335647..50d0025 100644 --- a/lib/views/main_queue_screen/main_queue_screen.dart +++ b/lib/views/main_queue_screen/main_queue_screen.dart @@ -1,171 +1,20 @@ -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_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/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, - color: Colors.transparent, - 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) { @@ -215,27 +64,6 @@ class MainQueueScreen extends StatelessWidget { ); } - 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) { diff --git a/lib/views/splash_screen/splash_screen.dart b/lib/views/splash_screen/splash_screen.dart index c0a8d97..f32cbcb 100644 --- a/lib/views/splash_screen/splash_screen.dart +++ b/lib/views/splash_screen/splash_screen.dart @@ -4,6 +4,8 @@ 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:provider/provider.dart'; +import 'package:hmg_qline/utilities/enums.dart'; +import 'dart:developer'; class SplashScreen extends StatelessWidget { const SplashScreen({super.key}); @@ -44,7 +46,14 @@ class SplashScreen extends StatelessWidget { // If the data is loaded successfully if (snapshot.connectionState == ConnectionState.done) { - Future.delayed(const Duration(seconds: 1)).whenComplete(() => context.navigateReplaceTo(AppRoutes.mainQueueScreen)); + Future.delayed(const Duration(seconds: 1)).whenComplete(() { + log("context.read().currentScreenTypeEnum: ${context.read().currentScreenTypeEnum}"); + if (context.read().currentScreenTypeEnum == ScreenTypeEnum.kioskScreen) { + context.navigateReplaceTo(AppRoutes.kioskMainScreen); + } else { + context.navigateReplaceTo(AppRoutes.mainQueueScreen); + } + }); } return const Scaffold( diff --git a/pubspec.lock b/pubspec.lock index 80c01f2..bb55096 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -61,10 +61,10 @@ packages: dependency: transitive description: name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.19.0" connectivity_plus: dependency: "direct main" description: @@ -260,18 +260,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" + sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06" url: "https://pub.dev" source: hosted - version: "10.0.5" + version: "10.0.7" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" + sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379" url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.0.8" leak_tracker_testing: dependency: transitive description: @@ -556,7 +556,7 @@ packages: dependency: transitive description: flutter source: sdk - version: "0.0.99" + version: "0.0.0" source_span: dependency: transitive description: @@ -593,10 +593,10 @@ packages: dependency: transitive description: name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377" url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.12.0" stream_channel: dependency: transitive description: @@ -609,10 +609,10 @@ packages: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.0" term_glyph: dependency: transitive description: @@ -625,10 +625,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" + sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" url: "https://pub.dev" source: hosted - version: "0.7.2" + version: "0.7.3" tuple: dependency: transitive description: @@ -689,10 +689,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" + sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b url: "https://pub.dev" source: hosted - version: "14.2.5" + version: "14.3.0" wakelock_plus: dependency: "direct main" description: