Merge branch 'faiz_kiosk'

master
FaizHashmiCS22 6 months ago
commit 106e3a15e7

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 30 KiB

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="100px" height="100px" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3 15H21M3 19H15M3 7H11M3 11H11M19.4 11H16.6C16.0399 11 15.7599 11 15.546 10.891C15.3578 10.7951 15.2049 10.6422 15.109 10.454C15 10.2401 15 9.96005 15 9.4V6.6C15 6.03995 15 5.75992 15.109 5.54601C15.2049 5.35785 15.3578 5.20487 15.546 5.10899C15.7599 5 16.0399 5 16.6 5H19.4C19.9601 5 20.2401 5 20.454 5.10899C20.6422 5.20487 20.7951 5.35785 20.891 5.54601C21 5.75992 21 6.03995 21 6.6V9.4C21 9.96005 21 10.2401 20.891 10.454C20.7951 10.6422 20.6422 10.7951 20.454 10.891C20.2401 11 19.9601 11 19.4 11Z" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 824 B

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="100px" height="100px" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 0H6V2H10V4H8.86807C8.57073 5.66996 7.78574 7.17117 6.6656 8.35112C7.46567 8.73941 8.35737 8.96842 9.29948 8.99697L10.2735 6H12.7265L15.9765 16H13.8735L13.2235 14H9.77647L9.12647 16H7.0235L8.66176 10.9592C7.32639 10.8285 6.08165 10.3888 4.99999 9.71246C3.69496 10.5284 2.15255 11 0.5 11H0V9H0.5C1.5161 9 2.47775 8.76685 3.33437 8.35112C2.68381 7.66582 2.14629 6.87215 1.75171 6H4.02179C4.30023 6.43491 4.62904 6.83446 4.99999 7.19044C5.88743 6.33881 6.53369 5.23777 6.82607 4H0V2H4V0ZM12.5735 12L11.5 8.69688L10.4265 12H12.5735Z" fill="#000000"/>
</svg>

After

Width:  |  Height:  |  Size: 825 B

@ -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<String, WidgetBuilder> routes = {
splash: (context) => const SplashScreen(),
kioskMainScreen: (context) => const KioskMainScreen(),
mainQueueScreen: (context) => const MainQueueScreen(),
};
}

@ -16,6 +16,8 @@ class AppStrings {
static String fontNameCairo = "Cairo";
static String noInternetConnection = "No Internet Connection";
static String awaitingArrivalEng = "Awaiting Patients Arrival";
static String awaitingQueueNumberEng = "Awaiting Queue Number";
static String awaitingQueueNumberAr = "في انتظار رقم قائمة الانتظار";
static String counterNo = "Counter Number: ";
static String awaitingArrivalAr = "في انتظار وصول المرضى";
}
@ -52,9 +54,14 @@ class AppColors {
}
class AppAssets {
static String poppinsMedium = "assets/fonts/Poppins/Poppins-Medium.ttf";
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";
static String kioskQueueIcon = "assets/images/kiosk_queue_icon.svg";
//IconPaths
static String vitalSignIcon = "assets/images/vitalsign_icon.svg";
@ -75,7 +82,6 @@ class AppAssets {
static String windIcon = "assets/icons/windy.svg";
//Tones
static String callTone = "assets/tones/call_tone.mp3";
}
@ -85,14 +91,16 @@ class AppConstants {
static String onlyLetters = "[a-zA-Z &'\"]";
static String onlyDate = "[0-9/]";
static String apiKey = 'EE17D21C7943485D9780223CCE55DCE5';
static String testIP = '10.20.10.30';
static String testIP = '12.4.5.1'; // projectID.QlineType.ScreenType.AnyNumber (1 to 10)
static int thresholdForListUI = 3;
}
class ApiConstants {
static String baseUrl = 'https://ms.hmg.com/nscapi';
static String baseUrl = 'https://ms.hmg.com/nscapi2';
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 +110,10 @@ class ApiConstants {
static String prayerTimeToday = "$baseUrlApiPatientCall/PrayerTime_Today";
static String ticketCallRequestUpdate = "$baseUrlApiPatientCall/CallRequest_QueueUpdate";
//Generic
static String createTicketForKiosk = '$baseUrlApiGen/GEN_PatientCallNo_Get';
static String ticketCallRequestUpdateForKiosk = '$baseUrlApiGen/GEN_TicketQueueAck_Insert';
// Signal R Constants
static String sendQLinePatientCall = "SendQLinePatientCall";
@ -111,3 +123,14 @@ class ApiConstants {
class CacheConstants {
static String lastTimeUpdated = "lastTimeUpdated";
}
// calling for pharmacy
// {
// "projectID": 12,
// "counterNo": 1,
// "queueID": 11,
// "isVidaPlus": false,
// "editedBy": 102,
// "apiKey": "EE17D21C7943485D9780223CCE55DCE5"
// }

@ -25,7 +25,7 @@ class MyApp extends StatelessWidget {
builder: (context, constraints) {
return OrientationBuilder(builder: (context, orientation) {
SizeConfig().init(constraints, orientation);
SystemChrome.setPreferredOrientations([DeviceOrientation.landscapeLeft]);
// SystemChrome.setPreferredOrientations([DeviceOrientation.portraitDown]);
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []);
return MultiProvider(
providers: [

@ -1,5 +1,5 @@
import 'dart:developer';
import 'dart:ui';
import 'package:hmg_qline/models/kiosk_queue_model.dart';
import 'package:hmg_qline/utilities/enums.dart';
import 'package:hmg_qline/utilities/extensions.dart';
@ -26,6 +26,7 @@ class GlobalConfigurationsModel {
String postVoiceText = "Please Visit Counter";
String? roomText;
int? roomNo;
bool? isRoomNoRequired;
String? counterText;
String? queueNoText;
String? callForText;
@ -59,6 +60,7 @@ class GlobalConfigurationsModel {
double? projectLatitude;
double? projectLongitude;
int? cityKey;
List<KioskQueueModel>? kioskQueueList;
GlobalConfigurationsModel({
this.id,
@ -83,6 +85,7 @@ class GlobalConfigurationsModel {
this.postVoiceText = "Please Visit Counter",
this.roomText,
this.roomNo,
this.isRoomNoRequired = true,
this.counterText,
this.queueNoText,
this.callForText,
@ -116,6 +119,7 @@ class GlobalConfigurationsModel {
this.projectLatitude,
this.projectLongitude,
this.cityKey,
this.kioskQueueList,
});
GlobalConfigurationsModel.fromJson(Map<String, dynamic> json) {
@ -142,6 +146,7 @@ class GlobalConfigurationsModel {
counterText = json['counterText'];
roomText = json['roomText'];
roomNo = json['roomNo'];
isRoomNoRequired = json['isRoomNoRequired'] ?? true;
queueNoText = json['queueNoText'];
callForText = json['callForText'];
currentServeText = json['currentServeText'];
@ -176,6 +181,9 @@ class GlobalConfigurationsModel {
projectLatitude = json['projectLatitude'] == 0 ? 0.0 : json['projectLatitude'];
projectLongitude = json['projectLongitude'] == 0 ? 0.0 : json['projectLongitude'];
cityKey = json['cityKey'];
if (json['kioskQueue'] != null) {
kioskQueueList = List<KioskQueueModel>.from(json['kioskQueue'].map((kioskQueueJson) => KioskQueueModel.fromJson(kioskQueueJson)));
}
}
}

@ -0,0 +1,56 @@
class KioskQueueModel {
int? id;
int? projectID;
String? projectName;
String? projectNameN;
int? queueID;
String? queueName;
String? queueNameN;
int? kioskID;
String? kioskName;
String? kioskNameN;
String? ipAddress;
bool? isActive;
int? createdBy;
String? createdOn;
dynamic editedBy;
dynamic editedOn;
KioskQueueModel({
this.id,
this.projectID,
this.projectName,
this.projectNameN,
this.queueID,
this.queueName,
this.queueNameN,
this.kioskID,
this.kioskName,
this.kioskNameN,
this.ipAddress,
this.isActive,
this.createdBy,
this.createdOn,
this.editedBy,
this.editedOn,
});
KioskQueueModel.fromJson(Map<String, dynamic> json) {
id = json['id'];
projectID = json['projectID'];
projectName = json['projectName'];
projectNameN = json['projectNameN'];
queueID = json['queueID'];
queueName = json['queueName'];
queueNameN = json['queueNameN'];
kioskID = json['kioskID'];
kioskName = json['kioskName'];
kioskNameN = json['kioskNameN'];
ipAddress = json['ipAddress'];
isActive = json['isActive'];
createdBy = json['createdBy'];
createdOn = json['createdOn'];
editedBy = json['editedBy'];
editedOn = json['editedOn'];
}
}

@ -0,0 +1,22 @@
class KioskPatientTicket {
String? patientCallNo;
int? projectID;
int? ticketQueueID;
int? result;
KioskPatientTicket({
this.patientCallNo,
this.projectID,
this.ticketQueueID,
this.result,
});
factory KioskPatientTicket.fromJson(Map<String, dynamic> json) {
return KioskPatientTicket(
patientCallNo: json['patientCallNo'],
projectID: json['projectID'],
ticketQueueID: json['ticketQueueID'],
result: json['result'],
);
}
}

@ -16,7 +16,12 @@ class TicketDetailsModel {
qTypeEnum = json['qType'] != null ? (json['qType'] as int).toQTypeEnum() : null;
screenTypeEnum = json['screenType'] != null ? (json['screenType'] as int).toScreenTypeEnum() : null;
connectionID = json['connectionID'];
ticketModel = json['data'] != null ? TicketData.fromJson(json['data']) : null;
ticketModel = json['data'] != null
? TicketData.fromJson(
json['data'],
qTypeEnum: json['qType'] != null ? (json['qType'] as int).toQTypeEnum() : null,
)
: null;
}
}
@ -69,7 +74,7 @@ class TicketData {
this.editedOn,
});
TicketData.fromJson(Map<String, dynamic> json) {
TicketData.fromJson(Map<String, dynamic> json, {QTypeEnum? qTypeEnum}) {
id = json['id'];
patientID = json['patientID'];
laBQGroupID = json['laB_QGroupID'];
@ -87,6 +92,9 @@ class TicketData {
postVoiceText = json['pleaseVisitCounterText'] ?? "Please Visit Counter";
patientGender = json['patientGender'] ?? 1;
roomNo = json['roomNo'].toString();
if (qTypeEnum != null && qTypeEnum == QTypeEnum.general) {
roomNo = json['counterNo'].toString();
}
isActive = json['isActive'];
createdBy = json['createdBy'];
editedBy = json['editedBy'];

@ -2,6 +2,7 @@ import 'package:hmg_qline/api/api_client.dart';
import 'package:hmg_qline/constants/app_constants.dart';
import 'package:hmg_qline/models/generic_response_model.dart';
import 'package:hmg_qline/models/global_config_model.dart';
import 'package:hmg_qline/models/kiosk_ticket_model.dart';
import 'package:hmg_qline/models/prayers_widget_model.dart';
import 'package:hmg_qline/models/rss_feed_model.dart';
import 'package:hmg_qline/models/weathers_widget_model.dart';
@ -13,6 +14,8 @@ abstract class ScreenDetailsRepo {
Future<GenericRespModel?> createNextTickets({required int ticketNumber});
Future<GenericRespModel?> createTicketFromKiosk({required int projectId, required int queueId});
Future<WidgetsConfigModel?> getScreenConfigurationsByIP({required String ipAddress});
Future<WeathersWidgetModel?> getWeatherDetailsByCity({required String cityId});
@ -77,6 +80,31 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo {
}
}
@override
Future<GenericRespModel?> createTicketFromKiosk({required int projectId, required int queueId}) async {
try {
var params = {
"projectID": "$projectId",
"queueID": "$queueId",
"isVidaPlus": false,
"createdBy": "101",
"apiKey": AppConstants.apiKey,
};
GenericRespModel genericRespModel = await apiClientInstance.postJsonForObject(
(json) => GenericRespModel.fromJson(json),
ApiConstants.createTicketForKiosk,
params,
);
genericRespModel.data = KioskPatientTicket.fromJson(genericRespModel.data);
return genericRespModel;
} catch (e) {
logger.e(e.toString());
InfoComponents.showToast(e.toString());
return null;
}
}
@override
Future<WidgetsConfigModel?> getScreenConfigurationsByIP({required String ipAddress}) async {
try {

@ -28,9 +28,18 @@ class TextToSpeechServiceImp implements TextToSpeechService {
@override
Future<void> speechTextTest(String test) async {
await textToSpeechInstance.setLanguage(LanguageEnum.arabic.enumToString());
textToSpeechInstance.setSpeechRate(0.45);
textToSpeechInstance.setPitch(0.9);
log("lang: ${await textToSpeechInstance.areLanguagesInstalled(["en", "ar"])}");
log("getDefaultEngine: ${await textToSpeechInstance.getDefaultEngine}");
log("getEngines: ${await textToSpeechInstance.getEngines}");
// await textToSpeechInstance.setLanguage(LanguageEnum.arabic.enumToString());
// textToSpeechInstance.setSpeechRate(0.45);
// textToSpeechInstance.setPitch(0.9);
await textToSpeechInstance.setLanguage(LanguageEnum.english.enumToString());
textToSpeechInstance.setSpeechRate(0.37);
textToSpeechInstance.setPitch(0.85);
await textToSpeechInstance.speak(test);
}
@ -94,6 +103,8 @@ class TextToSpeechServiceImp implements TextToSpeechService {
patientNumeric = queueNoArray[1];
}
patientAlpha = patientAlpha.split('').join(' .. ');
if (langEnum == LanguageEnum.english) {
await textToSpeechInstance.speak("$preVoice $patientAlpha .. $patientNumeric .. $postVoice $roomNo");
return;

@ -15,7 +15,7 @@ enum QTypeEnum {
appointment, // 1
lab, // 2
rad, // 3
pharmacy, // 4
general, // 4
}
enum ScreenTypeEnum {
@ -23,6 +23,7 @@ enum ScreenTypeEnum {
roomLevelScreen, // 2
receptionScreen, // 3
dashboardScreen, // 4
kioskScreen, // 5
}
enum LanguageEnum {
@ -30,3 +31,9 @@ enum LanguageEnum {
arabic,
}
enum KioskScreenStateEnums {
languageState,
queueSelectionState,
ticketNoState,
busyState,
}

@ -63,7 +63,7 @@ extension QTypeEnumExtension on int {
case 3:
return QTypeEnum.rad;
case 4:
return QTypeEnum.pharmacy;
return QTypeEnum.general;
default:
return QTypeEnum.lab;
}
@ -89,6 +89,8 @@ extension ScreenTypeExtension on int {
return ScreenTypeEnum.receptionScreen;
case 4:
return ScreenTypeEnum.dashboardScreen;
case 5:
return ScreenTypeEnum.kioskScreen;
default:
return ScreenTypeEnum.waitingAreaScreen;
}

@ -146,7 +146,7 @@ class QueuingViewModel extends ChangeNotifier {
}
Future<void> testSpeech() async {
textToSpeechService.speechTextTest("يرجى التوجه .. إلى العداد ..رقم .. 12");
textToSpeechService.speechTextTest("Ticket Number ... ABC One Tow Three.. Please visit Doctor.");
}
Future<void> voiceCallTicket({required TicketData? ticketData}) async {

@ -5,6 +5,8 @@ import 'package:hmg_qline/config/dependency_injection.dart';
import 'package:hmg_qline/constants/app_constants.dart';
import 'package:hmg_qline/models/generic_response_model.dart';
import 'package:hmg_qline/models/global_config_model.dart';
import 'package:hmg_qline/models/kiosk_queue_model.dart';
import 'package:hmg_qline/models/kiosk_ticket_model.dart';
import 'package:hmg_qline/models/prayers_widget_model.dart';
import 'package:hmg_qline/models/rss_feed_model.dart';
import 'package:hmg_qline/models/weathers_widget_model.dart';
@ -14,6 +16,7 @@ import 'package:hmg_qline/services/connectivity_service.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/views/view_helpers/info_components.dart';
class ScreenConfigViewModel extends ChangeNotifier {
final ScreenDetailsRepo screenDetailsRepo;
@ -66,6 +69,27 @@ class ScreenConfigViewModel extends ChangeNotifier {
notifyListeners();
}
KioskScreenStateEnums kioskScreenStateEnum = KioskScreenStateEnums.languageState;
void updateKioskScreenState(KioskScreenStateEnums state) {
kioskScreenStateEnum = state;
notifyListeners();
}
KioskPatientTicket? kioskPatientTicket = KioskPatientTicket();
void updateTicketGeneratedFromKiosk(KioskPatientTicket? value) {
kioskPatientTicket = value;
notifyListeners();
}
LanguageEnum currentSelectedKioskLanguage = LanguageEnum.english;
void updateCurrentSelectedKioskLanguage(LanguageEnum value) {
currentSelectedKioskLanguage = value;
notifyListeners();
}
updateCurrentScreenRotation(ScreenOrientationEnum value) {
globalConfigurationsModel.orientationTypeEnum = value;
notifyListeners();
@ -108,13 +132,19 @@ class ScreenConfigViewModel extends ChangeNotifier {
GlobalConfigurationsModel globalConfigurationsModel = GlobalConfigurationsModel();
Future<void> 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);
notifyListeners();
}
@ -302,4 +332,19 @@ class ScreenConfigViewModel extends ChangeNotifier {
log("last ticket is: $startTicket ");
}
Future<KioskPatientTicket?> createTicketFromKiosk({required int projectId, required int queueId}) async {
try {
GenericRespModel? response = await screenDetailsRepo.createTicketFromKiosk(projectId: projectId, queueId: queueId);
if (response == null || response.messageStatus != 1) {
logger.e("response null from createTicketFromKiosk");
return null;
}
return response.data;
} catch (e) {
InfoComponents.showToast(e.toString());
logger.i(e.toString());
return null;
}
}
}

@ -0,0 +1,191 @@
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({required int counterNo, required bool isRoomNoRequired, required String roomText}) {
return AppText(
"$roomText $counterNo",
fontFamily: AppStrings.fontNamePoppins,
textAlign: TextAlign.center,
fontWeight: FontWeight.bold,
color: isRoomNoRequired ? Colors.black : Colors.transparent,
fontSize: SizeConfig.getWidthMultiplier() * 8,
);
}
Widget noPatientInQueue({required String text, required String fontName, required String roomText, required bool isRoomNoRequired, 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: counterNo,
roomText: roomText,
isRoomNoRequired: isRoomNoRequired,
),
noPatientText,
const SizedBox.shrink()
],
);
} else {
return noPatientText;
}
}
Widget commonSelectionCardKiosk({required ScreenConfigViewModel screenConfigViewModel, required String title, required String icon, required VoidCallback onTap}) {
return InkWell(
onTap: onTap,
child: SizedBox(
child: Container(
constraints: BoxConstraints(minWidth: SizeConfig.getWidthMultiplier() * 40),
padding: const EdgeInsets.all(30),
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,
),
],
),
),
),
),
);
}

@ -24,11 +24,11 @@ class AppHeader extends StatelessWidget implements PreferredSizeWidget {
children: [
AppText(
"Network Status :",
fontSize: SizeConfig.getWidthMultiplier() * 2.6,
fontSize: SizeConfig.getWidthMultiplier() * 2,
),
AppText(
" ${screenConfigVM.isInternetConnected ? "Connected" : "Disconnected"}",
fontSize: SizeConfig.getWidthMultiplier() * 3,
fontSize: SizeConfig.getWidthMultiplier() * 2.5,
color: screenConfigVM.isInternetConnected ? AppColors.greenColor : AppColors.redColor,
),
],
@ -39,11 +39,11 @@ class AppHeader extends StatelessWidget implements PreferredSizeWidget {
children: [
AppText(
"Hub Status :",
fontSize: SizeConfig.getWidthMultiplier() * 2.6,
fontSize: SizeConfig.getWidthMultiplier() * 2,
),
AppText(
" ${screenConfigVM.isHubConnected ? "Connected" : "Disconnected"}",
fontSize: SizeConfig.getWidthMultiplier() * 3,
fontSize: SizeConfig.getWidthMultiplier() * 2.5,
color: screenConfigVM.isHubConnected ? AppColors.greenColor : AppColors.redColor,
),
],
@ -65,9 +65,9 @@ class AppHeader extends StatelessWidget implements PreferredSizeWidget {
children: [
Container(
alignment: Alignment.center,
height: SizeConfig.getHeightMultiplier() * 0.65,
padding: const EdgeInsets.only(left: 20, right: 20),
decoration: BoxDecoration(color: AppColors.redColor),
height: SizeConfig.getHeightMultiplier() * 0.6,
padding: const EdgeInsets.symmetric(horizontal: 20),
decoration: BoxDecoration(color: AppColors.greenColor),
child: Directionality(
textDirection: globalConfigurationsModel.textDirection,
child: Row(
@ -77,10 +77,11 @@ class AppHeader extends StatelessWidget implements PreferredSizeWidget {
AppText(
globalConfigurationsModel.currentServeText ?? "",
color: Colors.white,
fontSize: SizeConfig.getHeightMultiplier() * 0.1,
fontFamily: globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins,
),
SvgPicture.asset(
AppAssets.hmgLogo,
AppAssets.hmgLogoPharmacy,
height: SizeConfig.getHeightMultiplier() * 0.5,
),
],

@ -0,0 +1,227 @@
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:hmg_qline/constants/app_constants.dart';
import 'package:hmg_qline/models/generic_response_model.dart';
import 'package:hmg_qline/models/kiosk_queue_model.dart';
import 'package:hmg_qline/models/kiosk_ticket_model.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/common_widgets/app_texts_widget.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<ScreenConfigViewModel>(
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: () async {
if (index == 0) {
if (screenConfigViewModel.globalConfigurationsModel.kioskQueueList != null && screenConfigViewModel.globalConfigurationsModel.kioskQueueList!.length == 1) {
await generateTicketForQueue(
screenConfigViewModel: screenConfigViewModel,
kioskQueueModel: screenConfigViewModel.globalConfigurationsModel.kioskQueueList![0],
);
} else {
screenConfigViewModel.updateCurrentSelectedKioskLanguage(LanguageEnum.english);
screenConfigViewModel.updateKioskScreenState(KioskScreenStateEnums.queueSelectionState);
}
} else {
if (screenConfigViewModel.globalConfigurationsModel.kioskQueueList != null && screenConfigViewModel.globalConfigurationsModel.kioskQueueList!.length == 1) {
await generateTicketForQueue(
screenConfigViewModel: screenConfigViewModel,
kioskQueueModel: screenConfigViewModel.globalConfigurationsModel.kioskQueueList![0],
);
} else {
screenConfigViewModel.updateCurrentSelectedKioskLanguage(LanguageEnum.arabic);
screenConfigViewModel.updateKioskScreenState(KioskScreenStateEnums.queueSelectionState);
}
}
},
),
);
},
);
}
Widget kioskQueueSelectionStateWidget(ScreenConfigViewModel screenConfigViewModel) {
bool isEnglish = screenConfigViewModel.currentSelectedKioskLanguage == LanguageEnum.english;
return Directionality(
textDirection: isEnglish ? TextDirection.ltr : TextDirection.rtl,
child: GridView.builder(
itemCount: screenConfigViewModel.globalConfigurationsModel.kioskQueueList!.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: (screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitUp ||
screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitDown)
? 2
: 3,
),
itemBuilder: (BuildContext context, int index) {
KioskQueueModel kioskQueueModel = screenConfigViewModel.globalConfigurationsModel.kioskQueueList![index];
return Column(
mainAxisSize: MainAxisSize.min,
children: [
commonSelectionCardKiosk(
screenConfigViewModel: screenConfigViewModel,
title: screenConfigViewModel.currentSelectedKioskLanguage == LanguageEnum.english ? "${kioskQueueModel.queueName}" : "${kioskQueueModel.queueNameN}",
icon: AppAssets.kioskQueueIcon,
onTap: () async {
await generateTicketForQueue(screenConfigViewModel: screenConfigViewModel, kioskQueueModel: kioskQueueModel);
},
),
],
);
}),
);
}
Widget kioskTicketNumberStateWidget(ScreenConfigViewModel screenConfigViewModel) {
bool isEnglish = screenConfigViewModel.currentSelectedKioskLanguage == LanguageEnum.english;
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
AppText(
isEnglish ? "Your Ticket Number is: " : "رقم تذكرتك هو:",
fontSize: SizeConfig.getWidthMultiplier() * 6,
textDirection: isEnglish ? TextDirection.ltr : TextDirection.rtl,
fontHeight: 1,
fontFamily: isEnglish ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins,
),
const SizedBox(height: 20),
AppText(
screenConfigViewModel.kioskPatientTicket!.patientCallNo ?? "",
fontSize: SizeConfig.getWidthMultiplier() * 10,
fontHeight: 1,
fontWeight: FontWeight.bold,
textDirection: isEnglish ? TextDirection.ltr : TextDirection.rtl,
fontFamily: isEnglish ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins,
),
const SizedBox(height: 20),
AppText(
isEnglish ? "Please take the receipt and wait for your turn. \nThank you 😊" : "يرجى أخذ الإيصال وانتظار دورك.\n شكرًا لك 😊",
fontSize: SizeConfig.getWidthMultiplier() * 3,
textAlign: TextAlign.center,
textDirection: isEnglish ? TextDirection.ltr : TextDirection.rtl,
fontHeight: 1,
fontFamily: isEnglish ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins,
),
const SizedBox(height: 100),
InkWell(
onTap: () {
screenConfigViewModel.updateKioskScreenState(KioskScreenStateEnums.languageState);
},
child: AppText(
isEnglish ? "Go to Main Page" : "اذهب إلى الصفحة الرئيسية",
fontSize: SizeConfig.getWidthMultiplier() * 3,
textAlign: TextAlign.center,
textDecoration: TextDecoration.underline,
textDirection: isEnglish ? TextDirection.ltr : TextDirection.rtl,
fontHeight: 1,
fontFamily: isEnglish ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins,
),
),
],
);
}
Future<void> generateTicketForQueue({
required ScreenConfigViewModel screenConfigViewModel,
required KioskQueueModel kioskQueueModel,
}) async {
screenConfigViewModel.updateKioskScreenState(KioskScreenStateEnums.busyState);
KioskPatientTicket? kioskPatientTicket = await screenConfigViewModel.createTicketFromKiosk(
projectId: kioskQueueModel.projectID ?? 0,
queueId: kioskQueueModel.queueID ?? 0,
);
if (kioskPatientTicket == null) {
screenConfigViewModel.updateKioskScreenState(KioskScreenStateEnums.languageState);
return;
}
screenConfigViewModel.updateTicketGeneratedFromKiosk(kioskPatientTicket);
screenConfigViewModel.updateKioskScreenState(KioskScreenStateEnums.ticketNoState);
}
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),
KioskScreenStateEnums.busyState => const Center(child: CircularProgressIndicator()),
};
},
),
);
}
@override
Widget build(BuildContext context) {
return Selector<ScreenConfigViewModel, ScreenOrientationEnum>(
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(),
),
);
},
);
}
}

@ -1,184 +1,47 @@
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) {
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 (queuingViewModel.currentTickets.isEmpty) {
bool isForRoomLevel = screenConfigViewModel.globalConfigurationsModel.screenTypeEnum == ScreenTypeEnum.roomLevelScreen;
widget = noPatientInQueue(text: text, fontName: fontFamily, isForRoomLevel: isForRoomLevel, counterNo: screenConfigViewModel.globalConfigurationsModel.roomNo ?? 0);
widget = noPatientInQueue(
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,
@ -187,7 +50,11 @@ class MainQueueScreen extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
counterNoText(screenConfigViewModel.globalConfigurationsModel.roomNo ?? 0),
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,
@ -215,27 +82,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<ScreenConfigViewModel>(
builder: (BuildContext context, ScreenConfigViewModel screenConfigVM, Widget? child) {

@ -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,13 @@ 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(() {
if (context.read<ScreenConfigViewModel>().currentScreenTypeEnum == ScreenTypeEnum.kioskScreen) {
context.navigateReplaceTo(AppRoutes.kioskMainScreen);
} else {
context.navigateReplaceTo(AppRoutes.mainQueueScreen);
}
});
}
return const Scaffold(

@ -6,6 +6,10 @@
#include "generated_plugin_registrant.h"
#include <charset_converter/charset_converter_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) charset_converter_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "CharsetConverterPlugin");
charset_converter_plugin_register_with_registrar(charset_converter_registrar);
}

@ -3,6 +3,7 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
charset_converter
)
list(APPEND FLUTTER_FFI_PLUGIN_LIST

@ -1,6 +1,14 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
archive:
dependency: transitive
description:
name: archive
sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d
url: "https://pub.dev"
source: hosted
version: "3.6.1"
args:
dependency: transitive
description:
@ -49,6 +57,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.0"
charset_converter:
dependency: transitive
description:
name: charset_converter
sha256: a601f27b78ca86c3d88899d53059786d9c3f3c485b64974e9105c06c2569aef5
url: "https://pub.dev"
source: hosted
version: "2.3.0"
clock:
dependency: transitive
description:
@ -89,6 +105,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.0.6"
csslib:
dependency: transitive
description:
name: csslib
sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e"
url: "https://pub.dev"
source: hosted
version: "1.0.2"
cupertino_icons:
dependency: "direct main"
description:
@ -113,6 +137,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.0.7"
esc_pos_printer:
dependency: "direct main"
description:
name: esc_pos_printer
sha256: "312b05f909f3f7dd1e6a3332cf384dcee2c3a635138823654cd9c0133d8b5c45"
url: "https://pub.dev"
source: hosted
version: "4.1.0"
esc_pos_utils:
dependency: "direct main"
description:
name: esc_pos_utils
sha256: "8ec0013d7a7f1e790ced6b09b95ce3bf2c6f9468a3e2bc49ece000761d86c6f8"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
fading_edge_scrollview:
dependency: transitive
description:
@ -200,6 +240,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "8.2.8"
gbk_codec:
dependency: transitive
description:
name: gbk_codec
sha256: "3af5311fc9393115e3650ae6023862adf998051a804a08fb804f042724999f61"
url: "https://pub.dev"
source: hosted
version: "0.4.0"
get_it:
dependency: "direct main"
description:
@ -208,6 +256,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "8.0.3"
hex:
dependency: transitive
description:
name: hex
sha256: "4e7cd54e4b59ba026432a6be2dd9d96e4c5205725194997193bf871703b82c4a"
url: "https://pub.dev"
source: hosted
version: "0.2.0"
html:
dependency: transitive
description:
name: html
sha256: "1fc58edeaec4307368c60d59b7e15b9d658b57d7f3125098b6294153c75337ec"
url: "https://pub.dev"
source: hosted
version: "0.15.5"
http:
dependency: "direct main"
description:
@ -224,6 +288,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "4.0.2"
image:
dependency: transitive
description:
name: image
sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6"
url: "https://pub.dev"
source: hosted
version: "3.3.0"
intl:
dependency: "direct main"
description:

@ -51,6 +51,8 @@ dependencies:
marquee: ^2.2.3
logger: ^2.4.0
fluttertoast: ^8.2.8
esc_pos_printer: ^4.0.0 # Ensure you are using the latest version
esc_pos_utils: ^1.0.0
# win32: ^5.8.0
# tuple: ^2.0.2

@ -6,10 +6,13 @@
#include "generated_plugin_registrant.h"
#include <charset_converter/charset_converter_plugin.h>
#include <connectivity_plus/connectivity_plus_windows_plugin.h>
#include <flutter_tts/flutter_tts_plugin.h>
void RegisterPlugins(flutter::PluginRegistry* registry) {
CharsetConverterPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("CharsetConverterPlugin"));
ConnectivityPlusWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("ConnectivityPlusWindowsPlugin"));
FlutterTtsPluginRegisterWithRegistrar(

@ -3,6 +3,7 @@
#
list(APPEND FLUTTER_PLUGIN_LIST
charset_converter
connectivity_plus
flutter_tts
)

Loading…
Cancel
Save