Completed the updated design

qlline_design_update
Faiz Hashmi 1 month ago
parent 7f877fae73
commit d17c35e54e

@ -0,0 +1,3 @@
<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0H34C48.3594 0 60 11.6406 60 26V60H26C11.6406 60 0 48.3594 0 34V0Z" fill="#EC404C" fill-opacity="0.17"/>
</svg>

After

Width:  |  Height:  |  Size: 220 B

@ -31,9 +31,13 @@ class AppStrings {
static String openAppNativeFunctionName = "reopenApp"; static String openAppNativeFunctionName = "reopenApp";
static String dummyRssFeedText =
"Breaking: New Flutter 3.16 released with enhanced performance and stability features • Weather Update: Sunny skies expected throughout the week with temperatures reaching 25°C • Traffic Alert: Highway A1 experiencing delays due to construction work between exits 15-18 • Market Update: Stock indices show positive growth with technology sector leading gains • Company Announcement: Q4 results exceed expectations • New product launch scheduled for next month • Employee appreciation event on Friday • Special Offer: 20% discount on all services this week • Limited time promotion • Terms and conditions apply • Contact customer service for details • Welcome to our digital queue management system • Please follow the instructions on screen • For assistance, contact our support team • Thank you for your patience";
static List<String> prayersArray = ["الفجر", "الظهر", "العصر", "المغرب", "العشاء"]; static List<String> prayersArray = ["الفجر", "الظهر", "العصر", "المغرب", "العشاء"];
static String dummyRssFeedText =
"Latest News: Hospital announces new specialized cardiac unit opening next month • Health Update: Annual flu vaccination campaign starts Monday at all locations • Service Notice: Pharmacy hours extended until 10 PM on weekdays • Patient Advisory: New mobile app available for appointment booking and lab results • Emergency Drill: Fire safety exercise scheduled for 2 PM today • Visitor Information: Updated visiting hours now 8 AM to 8 PM daily • Maintenance Alert: Elevator B will be out of service from 6-8 AM tomorrow • Staff Recognition: Dr. Sarah Ahmed receives excellence award for patient care • Technology Update: New digital check-in kiosks now available in main lobby • Weather Advisory: Heavy rain expected - please allow extra travel time";
static String thankYouMessageAr = "نشكر لكم صبركم، ونتمنى لكم دوام الصحة والعافية";
static String thankYouMessageEn = "Thank you for your patience, we wish you good health and wellness";
} }
class AppColors { class AppColors {
@ -144,6 +148,7 @@ class AppAssets {
static String newVitalSignIcon = "assets/images/vitalsign_icon.svg"; static String newVitalSignIcon = "assets/images/vitalsign_icon.svg";
static String newDoctorIcon = "assets/images/doctor_icon.svg"; static String newDoctorIcon = "assets/images/doctor_icon.svg";
static String textBgLeaf = "assets/new_design_icons/text_bg_leaf.svg";
} }
class AppConstants { class AppConstants {

@ -201,11 +201,11 @@ class GlobalConfigurationsModel {
voiceTypeText = json['voiceTypeText']; voiceTypeText = json['voiceTypeText'];
screenLanguageEnum = (json['screenLanguage'] as int).toLanguageEnum(); screenLanguageEnum = (json['screenLanguage'] as int).toLanguageEnum();
screenLanguageText = json['screenLanguageText']; screenLanguageText = json['screenLanguageText'];
textDirection = json['textDirection'] == 2 ? TextDirection.rtl : TextDirection.ltr; // textDirection = json['textDirection'] == 2 ? TextDirection.rtl : TextDirection.ltr;
// textDirection = TextDirection.rtl; textDirection = TextDirection.rtl;
// screenMaxDisplayPatients = json['screenMaxDisplayPatients'] ?? 16; // screenMaxDisplayPatients = json['screenMaxDisplayPatients'] ?? 16;
// TODO: Uncomment this screenMaxDisplayPatients // TODO: Uncomment this screenMaxDisplayPatients
screenMaxDisplayPatients = 16; screenMaxDisplayPatients = 15;
voiceLanguageEnum = (json['voiceLanguage'] as int).toLanguageEnum(); voiceLanguageEnum = (json['voiceLanguage'] as int).toLanguageEnum();
voiceLanguageText = json['voiceLanguageText']; voiceLanguageText = json['voiceLanguageText'];
isNotiReq = json['isNotiReq']; isNotiReq = json['isNotiReq'];
@ -288,7 +288,7 @@ class GlobalConfigurationsModel {
vaccinationTextArb = json['vaccinationTextAr'] ?? "غرفة التطعيم"; vaccinationTextArb = json['vaccinationTextAr'] ?? "غرفة التطعيم";
nebulizationTextArb = json['nebulizationTextAr'] ?? "غرفة البخاخة"; nebulizationTextArb = json['nebulizationTextAr'] ?? "غرفة البخاخة";
callForVitalSignTextArb = json['callForVitalSignTextAr'] ?? " غرفة استدعاء للعلامات الحيوية"; callForVitalSignTextArb = json['callForVitalSignTextAr'] ?? " غرفة استدعاء للعلامات الحيوية";
callForDoctorTextArb = json['callForDoctorTextAr'] ?? "الرجاء التوّه إلى غرفة الطبيب"; callForDoctorTextArb = json['callForDoctorTextAr'] ?? "الرجاء التوجّه إلى غرفة الطبيب";
callForProcedureTextArb = json['callForProcedureTextAr'] ?? "الرجاء التوجّه إلى غرفة الإجراء"; callForProcedureTextArb = json['callForProcedureTextAr'] ?? "الرجاء التوجّه إلى غرفة الإجراء";
callForVaccinationTextArb = json['callForVaccinationTextAr'] ?? "الرجاء لتوجّه إلى غرفة التطعيم"; callForVaccinationTextArb = json['callForVaccinationTextAr'] ?? "الرجاء لتوجّه إلى غرفة التطعيم";
callForNebulizationTextArb = json['callForNebulizationTextAr'] ?? "الرجاء التوجّه إلى غرفة البخاخة"; callForNebulizationTextArb = json['callForNebulizationTextAr'] ?? "الرجاء التوجّه إلى غرفة البخاخة";

@ -34,9 +34,9 @@ class WeathersWidgetModel {
WeathersWidgetModel.fromJson(Map<String, dynamic> json) { WeathersWidgetModel.fromJson(Map<String, dynamic> json) {
id = json['id']; id = json['id'];
headline = json['headline']; headline = json['headline'];
maxTemp = json['maxTemp']; maxTemp = json['maxTemp'] ?? "42.2";
minTemp = json['minTemp']; minTemp = json['minTemp'] ?? "31.7";
iconPhrase = json['iconPhrase']; iconPhrase = json['iconPhrase'] ?? "Mostly sunny";
forecastDate = json['forecastDate']; forecastDate = json['forecastDate'];
cityID = json['cityID']; cityID = json['cityID'];
forecastDay = json['forecastDay']; forecastDay = json['forecastDay'];

@ -118,6 +118,21 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo {
@override @override
Future<WeathersWidgetModel?> getWeatherDetailsByCity({required String cityId}) async { Future<WeathersWidgetModel?> getWeatherDetailsByCity({required String cityId}) async {
WeathersWidgetModel constantWeathersWidgetModel = WeathersWidgetModel(
id: 12345,
headline: "Hot and sunny conditions expected",
maxTemp: 42.5,
minTemp: 28.3,
iconPhrase: "Mostly sunny",
forecastDate: "2024-12-19",
cityID: 287,
forecastDay: "Thursday",
createDateTime: "2024-12-19T08:30:00Z",
windSpeed: 12.5,
windDirection: "NW",
windDegrees: 315.0,
weatherIconPath: AppAssets.sunnyIcon,
);
try { try {
final body = {"cityID": cityId}; final body = {"cityID": cityId};
GenericRespModel genericRespModel = await apiClientInstance.postJsonForObject( GenericRespModel genericRespModel = await apiClientInstance.postJsonForObject(
@ -129,15 +144,14 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo {
List<WeathersWidgetModel> weathersWidgetModel = List.generate(genericRespModel.data.length, (index) => WeathersWidgetModel.fromJson(genericRespModel.data[index])); List<WeathersWidgetModel> weathersWidgetModel = List.generate(genericRespModel.data.length, (index) => WeathersWidgetModel.fromJson(genericRespModel.data[index]));
if (weathersWidgetModel.isNotEmpty) { if (weathersWidgetModel.isNotEmpty) {
loggerService.logToFile(message: weathersWidgetModel.toString(), source: "getWeatherDetailsByCity-> screen_details_repo.dart", type: LogTypeEnum.data); loggerService.logToFile(message: weathersWidgetModel.toString(), source: "getWeatherDetailsByCity-> screen_details_repo.dart", type: LogTypeEnum.data);
return weathersWidgetModel.first; return weathersWidgetModel.first;
} }
return null; return constantWeathersWidgetModel;
} catch (e) { } catch (e) {
loggerService.logError(e.toString()); loggerService.logError(e.toString());
loggerService.logToFile(message: e.toString(), source: "getWeatherDetailsByCity-> screen_details_repo.dart", type: LogTypeEnum.error); loggerService.logToFile(message: e.toString(), source: "getWeatherDetailsByCity-> screen_details_repo.dart", type: LogTypeEnum.error);
InfoComponents.showToast(e.toString()); InfoComponents.showToast(e.toString());
return null; return constantWeathersWidgetModel;
} }
} }

@ -3,6 +3,8 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:hmg_qline/view_models/screen_config_view_model.dart'; import 'package:hmg_qline/view_models/screen_config_view_model.dart';
import 'package:hmg_qline/views/common_widgets/app_general_widgets.dart'; import 'package:hmg_qline/views/common_widgets/app_general_widgets.dart';
import 'package:hmg_qline/views/common_widgets/date_display_widget.dart';
import 'package:hmg_qline/views/common_widgets/headline_tag_widget.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:hmg_qline/constants/app_constants.dart'; import 'package:hmg_qline/constants/app_constants.dart';
import 'package:hmg_qline/utilities/enums.dart'; import 'package:hmg_qline/utilities/enums.dart';
@ -111,12 +113,12 @@ class _AppFooterState extends State<AppFooter> {
children: [ children: [
AppText( AppText(
label, label,
fontSize: SizeConfig.getWidthMultiplier()! * 1.8, fontSize: SizeConfig.getWidthMultiplier()! * 1.5,
fontFamily: isForArabic ? AppStrings.fontNameGesTwo : AppStrings.fontNamePoppins, fontFamily: isForArabic ? AppStrings.fontNameGesTwo : AppStrings.fontNamePoppins,
), ),
AppText( AppText(
prayerName, prayerName,
fontSize: SizeConfig.getWidthMultiplier()! * 2, fontSize: SizeConfig.getWidthMultiplier()! * 1.8,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: AppColors.darkGreyTextColor, color: AppColors.darkGreyTextColor,
fontFamily: isForArabic ? AppStrings.fontNameGesTwo : AppStrings.fontNamePoppins, fontFamily: isForArabic ? AppStrings.fontNameGesTwo : AppStrings.fontNamePoppins,
@ -159,6 +161,115 @@ class _AppFooterState extends State<AppFooter> {
return "0"; return "0";
} }
bool _hasBothPrayerAndWeather(ScreenConfigViewModel screenConfigVM) {
return screenConfigVM.globalConfigurationsModel.isPrayerTimeReq && screenConfigVM.globalConfigurationsModel.isWeatherReq;
}
bool _isPortraitWithBothFeatures(ScreenConfigViewModel screenConfigVM) {
bool isPortrait = screenConfigVM.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitUp ||
screenConfigVM.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitDown;
return isPortrait && _hasBothPrayerAndWeather(screenConfigVM);
}
Widget _buildConnectionStatus(ScreenConfigViewModel screenConfigVM) {
bool isPortrait = screenConfigVM.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitUp ||
screenConfigVM.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitDown;
EdgeInsets padding;
if (_isPortraitWithBothFeatures(screenConfigVM)) {
padding = EdgeInsets.only(top: SizeConfig.getHeightMultiplier()! * 0.15);
} else if (isPortrait) {
padding = EdgeInsets.only(top: SizeConfig.getHeightMultiplier()! * 0.3);
} else {
padding = EdgeInsets.only(top: SizeConfig.getHeightMultiplier()! * 0.15);
}
Widget content;
if (_isPortraitWithBothFeatures(screenConfigVM)) {
content = Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildStatusRow("Hub Status ", screenConfigVM.isHubConnected),
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.05),
_buildStatusRow("Network Status ", screenConfigVM.isInternetConnected),
],
);
} else if (isPortrait) {
content = Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
_buildStatusRow("Hub Status ", screenConfigVM.isHubConnected),
SizedBox(width: SizeConfig.getWidthMultiplier()! * 2),
_buildStatusRow("Network Status ", screenConfigVM.isInternetConnected),
],
);
} else {
content = Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildStatusRow("Hub Status ", screenConfigVM.isHubConnected),
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.05),
_buildStatusRow("Network Status ", screenConfigVM.isInternetConnected),
],
);
}
return Padding(padding: padding, child: content);
}
Widget buildWeatherIcon(String? weatherIconPath) {
if (weatherIconPath != null) {
return SvgPicture.asset(
weatherIconPath,
height: SizeConfig.getHeightMultiplier() * 0.4,
);
}
return const SizedBox.shrink();
}
Widget buildCurrentCityTemp(String? currentCity, String? temp, bool isForArabic) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
if (temp != null)
AppText(
temp.toString(),
fontSize: SizeConfig.getWidthMultiplier()! * 2,
fontFamily: AppStrings.fontNamePoppins,
fontWeight: FontWeight.bold,
),
AppText(
currentCity.toString(),
fontSize: SizeConfig.getWidthMultiplier()! * 1.8,
fontFamily: isForArabic ? AppStrings.fontNameGesTwo : AppStrings.fontNamePoppins,
),
],
);
}
Widget buildTempDetails(String? iconPhrase, double? maxTempText, double? minTempText, bool isForArabic) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
SimpleDateDisplay(isForArabic: isForArabic),
if (iconPhrase != null)
AppText(
iconPhrase,
fontSize: SizeConfig.getWidthMultiplier()! * 1.5,
fontFamily: AppStrings.fontNamePoppins,
),
if (minTempText != null && maxTempText != null)
AppText(
"$minTempText°C / $maxTempText°C",
fontSize: SizeConfig.getWidthMultiplier()! * 1.5,
fontFamily: AppStrings.fontNamePoppins,
fontWeight: FontWeight.bold,
),
],
);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Consumer<ScreenConfigViewModel>( return Consumer<ScreenConfigViewModel>(
@ -167,159 +278,206 @@ class _AppFooterState extends State<AppFooter> {
screenConfigVM.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitDown; screenConfigVM.globalConfigurationsModel.orientationTypeEnum == ScreenOrientationEnum.portraitDown;
return Padding( return Padding(
padding: EdgeInsets.symmetric( padding: EdgeInsets.fromLTRB(
horizontal: SizeConfig.getWidthMultiplier() * 4, SizeConfig.getWidthMultiplier() * 4,
vertical: SizeConfig.getHeightMultiplier() * 0.14, SizeConfig.getHeightMultiplier() * 0.14,
0,
SizeConfig.getHeightMultiplier() * 0.05,
), ),
child: Row( child: Column(
mainAxisSize: MainAxisSize.min,
children: [ children: [
Expanded( Padding(
flex: 3, padding: EdgeInsets.only(right: SizeConfig.getWidthMultiplier() * 4),
child: customShadowSmoothContainer( child: Row(
height: SizeConfig.getHeightMultiplier() * 0.8, children: [
padding: EdgeInsets.symmetric( Expanded(
horizontal: SizeConfig.getWidthMultiplier() * 3, flex: screenConfigVM.globalConfigurationsModel.isWeatherReq && screenConfigVM.globalConfigurationsModel.isPrayerTimeReq ? 2 : 3,
vertical: SizeConfig.getHeightMultiplier() * 0.1, child: customShadowSmoothContainer(
), height: SizeConfig.getHeightMultiplier() * 0.8,
child: Row( padding: EdgeInsets.symmetric(
crossAxisAlignment: CrossAxisAlignment.end, horizontal: SizeConfig.getWidthMultiplier() * 3,
mainAxisAlignment: MainAxisAlignment.spaceBetween, vertical: SizeConfig.getHeightMultiplier() * 0.1,
children: [ ),
Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
children: [ mainAxisAlignment: MainAxisAlignment.spaceBetween,
Padding( children: [
padding: EdgeInsets.only(top: SizeConfig.getHeightMultiplier()! * 0.1), Row(
child: Column( crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
AppText( Padding(
AppStrings.poweredBy, padding: EdgeInsets.only(top: SizeConfig.getHeightMultiplier()! * 0.1),
fontSize: SizeConfig.getWidthMultiplier()! * 1.5, child: Column(
fontWeight: FontWeight.w400, mainAxisAlignment: MainAxisAlignment.center,
color: AppColors.darkGreyTextColor, children: [
AppText(
AppStrings.poweredBy,
fontSize: SizeConfig.getWidthMultiplier()! * 1.5,
fontWeight: FontWeight.w400,
color: AppColors.darkGreyTextColor,
),
AppText(
"v${screenConfigVM.currentScreenIP.replaceAll(".", "").replaceAll("0", "-")}(${AppConstants.currentBuildVersion})",
fontSize: SizeConfig.getWidthMultiplier()! * 1,
fontWeight: FontWeight.w400,
color: AppColors.darkGreyTextColor,
),
],
),
), ),
AppText( SizedBox(width: SizeConfig.getWidthMultiplier()!),
"v${screenConfigVM.currentScreenIP.replaceAll(".", "").replaceAll("0", "-")}(${AppConstants.currentBuildVersion})", Padding(
fontSize: SizeConfig.getWidthMultiplier()! * 1, padding: EdgeInsets.only(bottom: SizeConfig.getHeightMultiplier()! * 0.06),
fontWeight: FontWeight.w400, child: Image.asset(
color: AppColors.darkGreyTextColor, AppAssets.cloudLogo,
height: isPortrait ? SizeConfig.getHeightMultiplier()! * 0.6 : SizeConfig.getHeightMultiplier()! * 0.4,
),
), ),
], ],
), ),
), _buildConnectionStatus(screenConfigVM),
SizedBox(width: SizeConfig.getWidthMultiplier()!), ],
Padding( ),
padding: EdgeInsets.only(bottom: SizeConfig.getHeightMultiplier()! * 0.06), ),
child: Image.asset( ),
AppAssets.cloudLogo, if (screenConfigVM.globalConfigurationsModel.isPrayerTimeReq) ...[
height: isPortrait ? SizeConfig.getHeightMultiplier()! * 0.6 : SizeConfig.getHeightMultiplier()! * 0.4, SizedBox(width: SizeConfig.getWidthMultiplier()! * 1.7),
Directionality(
textDirection: screenConfigVM.globalConfigurationsModel.textDirection,
child: Expanded(
flex: 2,
child: customShadowSmoothContainer(
height: SizeConfig.getHeightMultiplier() * 0.8,
padding: EdgeInsets.symmetric(
horizontal: isPortrait ? SizeConfig.getWidthMultiplier() * 2.5 : SizeConfig.getWidthMultiplier() * 1.3,
vertical: SizeConfig.getHeightMultiplier() * 0.1,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
if (isPortrait) ...[
SvgPicture.asset(
AppAssets.salahTimeIcon,
height: SizeConfig.getHeightMultiplier() * 0.4,
),
],
Row(
children: [
if (screenConfigVM.nextPrayerToShowEng.isNotEmpty) ...[
_buildPrayerColumn(screenConfigVM.globalConfigurationsModel.nextPrayerTextEng, "${screenConfigVM.nextPrayerToShowEng} "),
],
if (screenConfigVM.nextPrayerToShowEng.isNotEmpty && screenConfigVM.nextPrayerToShowArb.isNotEmpty) ...[
Padding(
padding: EdgeInsets.fromLTRB(
SizeConfig.getWidthMultiplier()! * 0.1,
SizeConfig.getHeightMultiplier()! * 0.18,
SizeConfig.getWidthMultiplier()! * 0.1,
0,
),
child: AppText("|", fontSize: SizeConfig.getWidthMultiplier()! * 1.8, color: AppColors.darkGreyTextColor),
),
],
if (screenConfigVM.nextPrayerToShowArb.isNotEmpty) ...[
_buildPrayerColumn(screenConfigVM.globalConfigurationsModel.nextPrayerTextArb, screenConfigVM.nextPrayerToShowArb, isForArabic: true),
],
],
),
SizedBox(
width: SizeConfig.getWidthMultiplier() * 14,
child: Center(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.05),
Padding(
padding: EdgeInsets.only(left: SizeConfig.getWidthMultiplier()! * 0.5),
child: AppText(
_isMoreThanOneHour(_remainingTime) ? AppStrings.namazTimeText : AppStrings.timeRemainingText,
fontSize: SizeConfig.getWidthMultiplier()! * 1.5,
fontFamily: AppStrings.fontNamePoppins,
),
),
_isMoreThanOneHour(_remainingTime)
? AppText(
screenConfigVM.nextPrayerTime,
fontSize: SizeConfig.getWidthMultiplier()! * 2.5,
fontWeight: FontWeight.bold,
color: AppColors.newRedColor,
letterSpacing: 1.5,
)
: AppText(
_remainingTime,
fontSize: SizeConfig.getWidthMultiplier()! * 2.5,
fontWeight: FontWeight.bold,
color: AppColors.newRedColor,
letterSpacing: 1.5,
),
],
),
),
),
],
), ),
), ),
], ),
), ),
Padding( ],
padding: isPortrait ? EdgeInsets.only(top: SizeConfig.getHeightMultiplier()! * 0.3) : EdgeInsets.only(top: SizeConfig.getHeightMultiplier()! * 0.15), if (screenConfigVM.globalConfigurationsModel.isWeatherReq &&
child: isPortrait (screenConfigVM.globalConfigurationsModel.orientationTypeEnum != ScreenOrientationEnum.landscapeLeft &&
? Row( screenConfigVM.globalConfigurationsModel.orientationTypeEnum != ScreenOrientationEnum.landscapeRight)) ...[
mainAxisAlignment: MainAxisAlignment.spaceBetween, SizedBox(width: SizeConfig.getWidthMultiplier()! * 1.7),
Expanded(
flex: isPortrait ? 3 : 4,
child: customShadowSmoothContainer(
height: SizeConfig.getHeightMultiplier() * 0.8,
padding: EdgeInsets.symmetric(
horizontal: isPortrait ? SizeConfig.getWidthMultiplier() * 3 : SizeConfig.getWidthMultiplier() * 1.5,
vertical: SizeConfig.getHeightMultiplier() * 0.1,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
children: [ children: [
_buildStatusRow("Hub Status ", screenConfigVM.isHubConnected), buildWeatherIcon(screenConfigVM.weathersWidgetModel.weatherIconPath ?? AppAssets.weatherIcon),
SizedBox(width: SizeConfig.getWidthMultiplier()! * 2), SizedBox(width: SizeConfig.getWidthMultiplier() * 1.2),
_buildStatusRow("Network Status ", screenConfigVM.isInternetConnected), buildCurrentCityTemp("الرياض", "21 °C", true),
SizedBox(width: SizeConfig.getWidthMultiplier() * 1.2),
buildTempDetails(screenConfigVM.weathersWidgetModel.iconPhrase, screenConfigVM.weathersWidgetModel.maxTemp, screenConfigVM.weathersWidgetModel.minTemp, true),
], ],
) ),
: Column( Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
_buildStatusRow("Hub Status ", screenConfigVM.isHubConnected), buildCurrentCityTemp("Riyadh", "21 °C", false),
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.05), SizedBox(width: SizeConfig.getWidthMultiplier() * 1.2),
_buildStatusRow("Network Status ", screenConfigVM.isInternetConnected), buildTempDetails(screenConfigVM.weathersWidgetModel.iconPhrase, screenConfigVM.weathersWidgetModel.maxTemp, screenConfigVM.weathersWidgetModel.minTemp, false),
SizedBox(width: SizeConfig.getWidthMultiplier() * 1.2),
buildWeatherIcon(screenConfigVM.weathersWidgetModel.weatherIconPath ?? AppAssets.weatherIcon),
], ],
), ),
],
),
),
), ),
], ],
), ],
), ),
), ),
if (screenConfigVM.globalConfigurationsModel.isPrayerTimeReq) ...[ SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.1),
SizedBox(width: SizeConfig.getWidthMultiplier()! * 1.7), if (screenConfigVM.globalConfigurationsModel.isRssFeedReq && (screenConfigVM.rssFeedModel.rssFeed != null && screenConfigVM.rssFeedModel.rssFeed!.isNotEmpty)) ...[
Directionality( // if (true)...[
textDirection: screenConfigVM.globalConfigurationsModel.textDirection, customShadowSmoothContainer(
child: Expanded( removeRightBorder: true,
flex: isPortrait ? 2 : 3, height: SizeConfig.getHeightMultiplier()! * 0.3,
child: customShadowSmoothContainer( width: double.infinity,
height: SizeConfig.getHeightMultiplier() * 0.8, child: Row(
padding: EdgeInsets.symmetric( children: [
horizontal: isPortrait ? SizeConfig.getWidthMultiplier() * 3 : SizeConfig.getWidthMultiplier() * 1.5, const HmgNewsWidget(tagTitle: "HMG News"),
vertical: SizeConfig.getHeightMultiplier() * 0.1, rssFeedWidget(),
), // customShadowSmoothContainer(child: rssFeedWidget()),
child: Row( ],
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
SizedBox(
width: SizeConfig.getWidthMultiplier() * 15,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.05),
Padding(
padding: EdgeInsets.only(left: SizeConfig.getWidthMultiplier()! * 0.5),
child: AppText(
_isMoreThanOneHour(_remainingTime) ? AppStrings.namazTimeText : AppStrings.timeRemainingText,
fontSize: SizeConfig.getWidthMultiplier()! * 1.5,
fontFamily: AppStrings.fontNamePoppins,
),
),
_isMoreThanOneHour(_remainingTime)
? AppText(
screenConfigVM.nextPrayerTime,
fontSize: SizeConfig.getWidthMultiplier()! * 3,
fontWeight: FontWeight.bold,
color: AppColors.newRedColor,
letterSpacing: 1.5,
)
: AppText(
_remainingTime,
fontSize: SizeConfig.getWidthMultiplier()! * 3,
fontWeight: FontWeight.bold,
color: AppColors.newRedColor,
letterSpacing: 1.5,
),
],
),
),
Row(
children: [
if (screenConfigVM.nextPrayerToShowEng.isNotEmpty) ...[
_buildPrayerColumn(screenConfigVM.globalConfigurationsModel.nextPrayerTextEng, "${screenConfigVM.nextPrayerToShowEng} "),
],
if (screenConfigVM.nextPrayerToShowEng.isNotEmpty && screenConfigVM.nextPrayerToShowArb.isNotEmpty) ...[
Padding(
padding: EdgeInsets.fromLTRB(
SizeConfig.getWidthMultiplier()! * 0.1,
SizeConfig.getHeightMultiplier()! * 0.18,
SizeConfig.getWidthMultiplier()! * 0.1,
0,
),
child: AppText("|", fontSize: SizeConfig.getWidthMultiplier()! * 1.8, color: AppColors.darkGreyTextColor),
),
],
if (screenConfigVM.nextPrayerToShowArb.isNotEmpty) ...[
_buildPrayerColumn(screenConfigVM.globalConfigurationsModel.nextPrayerTextArb, screenConfigVM.nextPrayerToShowArb, isForArabic: true),
],
],
),
if (isPortrait) ...[
SvgPicture.asset(
AppAssets.salahTimeIcon,
height: SizeConfig.getHeightMultiplier() * 0.5,
),
],
],
),
),
), ),
), ),
], ],

@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:hmg_qline/constants/app_constants.dart'; import 'package:hmg_qline/constants/app_constants.dart';
import 'package:hmg_qline/utilities/enums.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/view_models/screen_config_view_model.dart';
import 'package:hmg_qline/views/common_widgets/app_texts_widget.dart'; import 'package:hmg_qline/views/common_widgets/app_texts_widget.dart';
import 'package:hmg_qline/views/view_helpers/size_config.dart'; import 'package:hmg_qline/views/view_helpers/size_config.dart';
@ -281,9 +280,11 @@ Widget engArabicTextWithSeparatorWidget({
mainAxisAlignment: mainAxisAlignment ?? MainAxisAlignment.start, mainAxisAlignment: mainAxisAlignment ?? MainAxisAlignment.start,
children: [ children: [
AppText( AppText(
englishText, arabicText,
fontSize: fontSize ?? SizeConfig.getWidthMultiplier() * 2.6,
color: color ?? AppColors.darkGreyTextColor, color: color ?? AppColors.darkGreyTextColor,
fontSize: fontSize ?? SizeConfig.getWidthMultiplier() * 2.6,
fontFamily: AppStrings.fontNameGesTwo,
fontWeight: FontWeight.bold,
), ),
AppText( AppText(
" | ", " | ",
@ -291,22 +292,109 @@ Widget engArabicTextWithSeparatorWidget({
color: color ?? AppColors.darkGreyTextColor, color: color ?? AppColors.darkGreyTextColor,
), ),
AppText( AppText(
arabicText, englishText,
color: color ?? AppColors.darkGreyTextColor,
fontSize: fontSize ?? SizeConfig.getWidthMultiplier() * 2.6, fontSize: fontSize ?? SizeConfig.getWidthMultiplier() * 2.6,
fontFamily: AppStrings.fontNameGesTwo, color: color ?? AppColors.darkGreyTextColor,
fontWeight: FontWeight.bold,
), ),
], ],
); );
} }
Widget buildTextContainer(bool isForArabic) {
return Container(
padding: EdgeInsets.all(SizeConfig.getHeightMultiplier() * 0.2),
child: Stack(
children: [
Positioned(
top: 0,
right: SizeConfig.getWidthMultiplier() * 2,
child: SvgPicture.asset(
AppAssets.textBgLeaf,
height: SizeConfig.getHeightMultiplier() * 0.4,
),
),
Padding(
padding: const EdgeInsets.only(top: 15),
child: AppText(
textAlign: TextAlign.center,
AppStrings.thankYouMessageAr,
fontSize: SizeConfig.getWidthMultiplier() * 3.6,
color: AppColors.darkGreyTextColor,
fontFamily: AppStrings.fontNameGesTwo,
),
),
],
),
);
}
Widget showThankyouWidget() {
return Expanded(
flex: 4,
child: Padding(
padding: EdgeInsets.all(SizeConfig.getHeightMultiplier() * 0.2),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Stack(
children: [
Positioned(
top: 0,
right: SizeConfig.getWidthMultiplier() * 2,
child: SvgPicture.asset(
AppAssets.textBgLeaf,
height: SizeConfig.getHeightMultiplier() * 0.4,
),
),
Padding(
padding: EdgeInsets.only(top: SizeConfig.getHeightMultiplier() * 0.1, right: SizeConfig.getWidthMultiplier() * 1),
child: AppText(
textAlign: TextAlign.center,
AppStrings.thankYouMessageAr,
fontSize: SizeConfig.getWidthMultiplier() * 3.6,
color: AppColors.darkGreyTextColor,
fontFamily: AppStrings.fontNameGesTwo,
),
),
],
),
SizedBox(height: SizeConfig.getHeightMultiplier() * 0.3),
Stack(
children: [
Positioned(
top: 0,
left: SizeConfig.getWidthMultiplier() * 3,
child: SvgPicture.asset(
AppAssets.textBgLeaf,
height: SizeConfig.getHeightMultiplier() * 0.4,
),
),
Padding(
padding: EdgeInsets.only(top: SizeConfig.getHeightMultiplier() * 0.1, left: SizeConfig.getWidthMultiplier() * 1.5),
child: AppText(
textAlign: TextAlign.center,
AppStrings.thankYouMessageEn,
fontSize: SizeConfig.getWidthMultiplier() * 3.6,
color: AppColors.darkGreyTextColor,
fontFamily: AppStrings.fontNamePoppins,
),
),
],
),
],
),
),
);
}
Widget customShadowSmoothContainer({ Widget customShadowSmoothContainer({
EdgeInsetsGeometry? padding, EdgeInsetsGeometry? padding,
EdgeInsetsGeometry? margin, EdgeInsetsGeometry? margin,
required Widget child, required Widget child,
double? height, double? height,
double? width, double? width,
bool removeRightBorder = false,
}) { }) {
return Container( return Container(
padding: padding, padding: padding,
@ -316,7 +404,14 @@ Widget customShadowSmoothContainer({
alignment: Alignment.center, alignment: Alignment.center,
decoration: BoxDecoration( decoration: BoxDecoration(
color: AppColors.whiteColor, color: AppColors.whiteColor,
borderRadius: BorderRadius.circular(SizeConfig.widthMultiplier! * 1.2), borderRadius: removeRightBorder
? BorderRadius.only(
topLeft: Radius.circular(SizeConfig.widthMultiplier! * 1.2), // Apply radius to top-left
bottomLeft: Radius.circular(SizeConfig.widthMultiplier! * 1.2), // Apply radius to bottom-left
topRight: Radius.zero, // Keep top-right corner sharp
bottomRight: Radius.zero, // Keep bottom-right corner sharp
)
: BorderRadius.circular(SizeConfig.widthMultiplier! * 1.2),
boxShadow: [ boxShadow: [
BoxShadow( BoxShadow(
color: AppColors.smoothContainerShadow, color: AppColors.smoothContainerShadow,
@ -402,28 +497,26 @@ Widget customShadowSmoothContainerWithBackground({
); );
} }
Widget rssFeedWidget({required String feed}) { Widget rssFeedWidget({String? feed}) {
String feedToShow = feed ?? AppStrings.dummyRssFeedText;
return Expanded( return Expanded(
child: Container( child: Marquee(
padding: const EdgeInsets.fromLTRB(10, 30, 10, 0), text: feedToShow,
child: Marquee( style: TextStyle(
text: feed, fontWeight: FontWeight.w400,
style: TextStyle( fontSize: SizeConfig.getWidthMultiplier() * 2,
fontWeight: FontWeight.w400, fontFamily: AppStrings.fontNamePoppins,
fontSize: SizeConfig.getWidthMultiplier() * 2,
fontFamily: AppStrings.fontNamePoppins,
),
scrollAxis: Axis.horizontal,
crossAxisAlignment: CrossAxisAlignment.center,
blankSpace: 20.0,
velocity: 100.0,
pauseAfterRound: const Duration(seconds: 1),
startPadding: 10.0,
accelerationDuration: const Duration(seconds: 1),
accelerationCurve: Curves.linear,
decelerationDuration: const Duration(milliseconds: 500),
decelerationCurve: Curves.easeOut,
), ),
scrollAxis: Axis.horizontal,
crossAxisAlignment: CrossAxisAlignment.center,
blankSpace: 20.0,
velocity: 100.0,
pauseAfterRound: const Duration(seconds: 1),
startPadding: 10.0,
accelerationDuration: const Duration(seconds: 1),
accelerationCurve: Curves.linear,
decelerationDuration: const Duration(milliseconds: 500),
decelerationCurve: Curves.easeOut,
), ),
); );
} }
@ -438,7 +531,7 @@ Widget callTypeContainer({
required TextDirection textDirection, required TextDirection textDirection,
bool isDisableRightBorderRadius = true, bool isDisableRightBorderRadius = true,
}) { }) {
final border = SizeConfig.getWidthMultiplier()! * 1; final border = SizeConfig.getWidthMultiplier()! * 0.7;
return Container( return Container(
padding: padding, padding: padding,
margin: margin, margin: margin,
@ -448,7 +541,7 @@ Widget callTypeContainer({
decoration: BoxDecoration( decoration: BoxDecoration(
color: color, color: color,
borderRadius: isDisableRightBorderRadius borderRadius: isDisableRightBorderRadius
? textDirection == TextDirection.ltr ? textDirection == TextDirection.rtl
? BorderRadius.only( ? BorderRadius.only(
topLeft: Radius.circular(border), topLeft: Radius.circular(border),
bottomLeft: Radius.circular(border), bottomLeft: Radius.circular(border),

@ -24,24 +24,28 @@ class AppHeader extends StatelessWidget implements PreferredSizeWidget {
textDirection: globalConfigurationsModel.textDirection, textDirection: globalConfigurationsModel.textDirection,
child: Padding( child: Padding(
padding: EdgeInsets.symmetric(horizontal: SizeConfig.getWidthMultiplier() * 4), padding: EdgeInsets.symmetric(horizontal: SizeConfig.getWidthMultiplier() * 4),
child: Row( child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Row( Row(
mainAxisAlignment: MainAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
SvgPicture.asset( engArabicTextWithSeparatorWidget(
globalConfigurationsModel.qTypeEnum == QTypeEnum.appointment ? AppAssets.hmgLogoFull : AppAssets.hmgLogoPharmacy, englishText: globalConfigurationsModel.currentServeTextEng ?? "",
height: SizeConfig.getHeightMultiplier() * 0.48, arabicText: globalConfigurationsModel.currentServeTextArb ?? "",
), ),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
SvgPicture.asset(
globalConfigurationsModel.qTypeEnum == QTypeEnum.appointment ? AppAssets.hmgLogoFull : AppAssets.hmgLogoPharmacy,
height: SizeConfig.getHeightMultiplier() * 0.48,
),
],
),
// networkStatusBar(),
], ],
), ),
engArabicTextWithSeparatorWidget(
englishText: globalConfigurationsModel.currentServeTextEng ?? "",
arabicText: globalConfigurationsModel.currentServeTextArb ?? "",
),
// networkStatusBar(),
], ],
), ),
), ),

@ -0,0 +1,59 @@
import 'package:flutter/material.dart';
class SimpleDateDisplay extends StatelessWidget {
final bool isForArabic;
SimpleDateDisplay({super.key, required this.isForArabic});
final List<String> _englishWeekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
final List<String> _englishMonths = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
// Note: For Arabic, the full month names are commonly used in this context.
final List<String> _arabicWeekdays = ['الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت', 'الأحد'];
final List<String> _arabicMonths = ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'];
String _toArabicDigits(int number) {
const Map<String, String> arabicDigits = {
'0': '٠',
'1': '١',
'2': '٢',
'3': '٣',
'4': '٤',
'5': '٥',
'6': '٦',
'7': '٧',
'8': '٨',
'9': '٩',
};
return number.toString().split('').map((char) => arabicDigits[char] ?? char).join();
}
@override
Widget build(BuildContext context) {
final DateTime now = DateTime.now();
// English formatting
final String englishDayOfWeek = _englishWeekdays[now.weekday - 1];
final String englishMonthAbbr = _englishMonths[now.month - 1];
final String englishDateString = '$englishDayOfWeek | ${now.day} $englishMonthAbbr';
// Arabic formatting
final String arabicDayOfWeek = _arabicWeekdays[now.weekday - 1];
final String arabicDayDigits = _toArabicDigits(now.day);
final String arabicMonthName = _arabicMonths[now.month - 1];
final String arabicDateString = '$arabicDayOfWeek | $arabicDayDigits $arabicMonthName';
return isForArabic // Use widget.isForArabic to access the property
? Text(
arabicDateString,
style: const TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
textDirection: TextDirection.rtl, // Crucial for Arabic text
)
: Text(
englishDateString,
style: const TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
);
}
}

@ -0,0 +1,99 @@
import 'package:flutter/material.dart';
import 'package:hmg_qline/constants/app_constants.dart';
import 'package:hmg_qline/views/common_widgets/app_texts_widget.dart';
import 'package:hmg_qline/views/view_helpers/size_config.dart';
class HmgNewsWidget extends StatelessWidget {
final String tagTitle;
const HmgNewsWidget({super.key, required this.tagTitle});
@override
Widget build(BuildContext context) {
return CustomPaint(
painter: ArrowShapePainter(
fillColor: AppColors.redColor,
arrowWidth: 20.0,
arrowHeight: 20.0,
topLeftRadius: const Radius.circular(10),
bottomLeftRadius: const Radius.circular(10),
topRightRadius: const Radius.circular(8),
bottomRightRadius: const Radius.circular(8),
),
child: Container(
color: Colors.transparent,
alignment: Alignment.center,
padding: const EdgeInsets.fromLTRB(20, 8, 35, 8),
child: AppText(
tagTitle,
color: AppColors.whiteColor,
fontWeight: FontWeight.bold,
fontSize: SizeConfig.getWidthMultiplier() * 1.5,
),
),
);
}
}
class ArrowShapePainter extends CustomPainter {
final Color fillColor;
final Radius topLeftRadius;
final Radius topRightRadius;
final Radius bottomLeftRadius;
final Radius bottomRightRadius;
final double arrowWidth;
final double arrowHeight;
ArrowShapePainter({
required this.fillColor,
this.topLeftRadius = Radius.zero, // Default to no rounding
this.topRightRadius = Radius.zero,
this.bottomLeftRadius = Radius.zero,
this.bottomRightRadius = Radius.zero,
this.arrowWidth = 20.0,
this.arrowHeight = 20.0,
});
@override
void paint(Canvas canvas, Size size) {
final paint = Paint()
..color = fillColor
..style = PaintingStyle.fill;
final path = Path();
// Main rounded rectangle body with customizable corners
path.addRRect(RRect.fromLTRBAndCorners(
0,
0,
size.width - arrowWidth, // Adjust width for the arrow
size.height,
topLeft: topLeftRadius,
topRight: topRightRadius,
bottomLeft: bottomLeftRadius,
bottomRight: bottomRightRadius,
));
// Arrow part remains the same
path.moveTo(size.width - arrowWidth, (size.height / 2) - (arrowHeight / 2));
path.lineTo(size.width, size.height / 2);
path.lineTo(size.width - arrowWidth, (size.height / 2) + (arrowHeight / 2));
path.close();
canvas.drawPath(path, paint);
}
@override
bool shouldRepaint(covariant CustomPainter oldDelegate) {
if (oldDelegate is ArrowShapePainter) {
return oldDelegate.fillColor != fillColor ||
oldDelegate.topLeftRadius != topLeftRadius ||
oldDelegate.topRightRadius != topRightRadius ||
oldDelegate.bottomLeftRadius != bottomLeftRadius ||
oldDelegate.bottomRightRadius != bottomRightRadius ||
oldDelegate.arrowWidth != arrowWidth ||
oldDelegate.arrowHeight != arrowHeight;
}
return true;
}
}

@ -12,11 +12,7 @@ class PriorityTickets extends StatelessWidget {
final List<TicketDetailsModel> tickets; final List<TicketDetailsModel> tickets;
final GlobalConfigurationsModel globalConfigurationsModel; final GlobalConfigurationsModel globalConfigurationsModel;
const PriorityTickets({ const PriorityTickets({required this.tickets, required this.globalConfigurationsModel, super.key});
required this.tickets,
required this.globalConfigurationsModel,
super.key,
});
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -26,12 +22,13 @@ class PriorityTickets extends StatelessWidget {
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: _buildTicketLayout(context), children: _buildTicketLayout(context),
), ),
); );
} }
Widget _buildAnimatedOtherTicketsRow(BuildContext context, {required int noOfTicketsToSkipFromStart, bool isHalf = false}) { Widget _buildOtherTicketsRow(BuildContext context, {required int noOfTicketsToSkipFromStart, bool isHalf = false}) {
final otherTickets = tickets.length > 2 ? tickets.sublist(noOfTicketsToSkipFromStart) : <TicketDetailsModel>[]; final otherTickets = tickets.length > 2 ? tickets.sublist(noOfTicketsToSkipFromStart) : <TicketDetailsModel>[];
if (otherTickets.isEmpty) return const SizedBox.shrink(); if (otherTickets.isEmpty) return const SizedBox.shrink();
@ -57,39 +54,40 @@ class PriorityTickets extends StatelessWidget {
switch (tickets.length) { switch (tickets.length) {
case 1: case 1:
return [_buildPrimaryTicket(context, tickets[0], isFullWidth: true)]; return [_buildPrimaryTicket(context, tickets[0], isFullWidth: true)];
case 2: case 2:
return [ return [
_buildPrimaryTicket(context, tickets[0], isHalf: true), Expanded(child: _buildPrimaryTicket(context, tickets[0], isHalf: true)),
_buildCurrentServeText(), SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.5),
_buildSecondaryTicket(context, tickets[1], isHalf: true), Expanded(child: _buildSecondaryTicket(context, tickets[1], isHalf: true)),
]; ];
case 3: case 3:
case 4: case 4:
return [ return [
_buildPrimaryTicket(context, tickets[0], isHalf: true), Expanded(child: _buildPrimaryTicket(context, tickets[0], isHalf: true)),
_buildCurrentServeText(), SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.5),
_buildAnimatedOtherTicketsRow(context, noOfTicketsToSkipFromStart: 1, isHalf: true), Expanded(child: _buildOtherTicketsRow(context, noOfTicketsToSkipFromStart: 1, isHalf: true)),
]; ];
default: default:
return [ return [
Row( Expanded(
children: [ child: Row(
Expanded( children: [
flex: 2, Expanded(
child: _buildPrimaryTicket(context, tickets[0]), flex: 2,
), child: _buildPrimaryTicket(context, tickets[0]),
_buildSpacing(), ),
Expanded( SizedBox(width: SizeConfig.getWidthMultiplier() * 2),
flex: 1, Expanded(
child: _buildSecondaryTicket(context, tickets[1]), flex: 1,
), child: _buildSecondaryTicket(context, tickets[1]),
], ),
],
),
), ),
_buildCurrentServeText(), // _buildCurrentServeText(),
_buildAnimatedOtherTicketsRow(context, noOfTicketsToSkipFromStart: 2), SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.15),
Expanded(child: _buildOtherTicketsRow(context, noOfTicketsToSkipFromStart: 2)),
]; ];
} }
} }
@ -146,7 +144,7 @@ class PriorityTickets extends StatelessWidget {
return primaryCallingCard; return primaryCallingCard;
} }
Widget _buildSecondaryTicket(BuildContext context, TicketDetailsModel ticket, {bool isHalf = false}) { Widget _buildSecondaryTicket(BuildContext context, TicketDetailsModel ticket, {EdgeInsets? margin, bool isHalf = false}) {
Widget secondaryCallingCard = QueueItemNormalCard( Widget secondaryCallingCard = QueueItemNormalCard(
ticketNo: ticket.ticketModel?.queueNo ?? '', ticketNo: ticket.ticketModel?.queueNo ?? '',
roomNo: ticket.ticketModel?.roomNo ?? '', roomNo: ticket.ticketModel?.roomNo ?? '',
@ -186,10 +184,6 @@ class PriorityTickets extends StatelessWidget {
); );
} }
Widget _buildSpacing() {
return SizedBox(width: SizeConfig.getWidthMultiplier() * 2);
}
// Helper methods to reduce repetition // Helper methods to reduce repetition
double _getTicketScale() { double _getTicketScale() {
return globalConfigurationsModel.screenTypeEnum == ScreenTypeEnum.roomLevelScreen ? 2.0 : 1.2; return globalConfigurationsModel.screenTypeEnum == ScreenTypeEnum.roomLevelScreen ? 2.0 : 1.2;

@ -1,4 +1,7 @@
import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:hmg_qline/constants/app_constants.dart'; import 'package:hmg_qline/constants/app_constants.dart';
import 'package:hmg_qline/models/global_config_model.dart'; import 'package:hmg_qline/models/global_config_model.dart';
import 'package:hmg_qline/models/ticket_model.dart'; import 'package:hmg_qline/models/ticket_model.dart';
@ -9,16 +12,18 @@ 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.dart';
import 'package:hmg_qline/views/view_helpers/size_config.dart'; import 'package:hmg_qline/views/view_helpers/size_config.dart';
class PriorityTicketsWithSidelist extends StatelessWidget { class PriorityTicketsWithSideSection extends StatelessWidget {
final List<TicketDetailsModel> tickets; final List<TicketDetailsModel> tickets;
final GlobalConfigurationsModel globalConfigurationsModel; final GlobalConfigurationsModel globalConfigurationsModel;
final ScreenOrientationEnum screenOrientationEnum; final ScreenOrientationEnum screenOrientationEnum;
final bool showThankyouMessage;
const PriorityTicketsWithSidelist({ const PriorityTicketsWithSideSection({
super.key, super.key,
required this.tickets, required this.tickets,
required this.globalConfigurationsModel, required this.globalConfigurationsModel,
required this.screenOrientationEnum, required this.screenOrientationEnum,
required this.showThankyouMessage,
}); });
Widget ticketListItem({required TicketData? ticketModel}) { Widget ticketListItem({required TicketData? ticketModel}) {
@ -37,7 +42,7 @@ class PriorityTicketsWithSidelist extends StatelessWidget {
ticketModel!.queueNo ?? "", ticketModel!.queueNo ?? "",
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
color: AppColors.greyTextColor, color: AppColors.greyTextColor,
fontSize: SizeConfig.getWidthMultiplier() * 2, fontSize: SizeConfig.getWidthMultiplier() * 1.8,
textAlign: TextAlign.center, textAlign: TextAlign.center,
fontFamily: AppStrings.fontNamePoppins, fontFamily: AppStrings.fontNamePoppins,
), ),
@ -65,22 +70,30 @@ class PriorityTicketsWithSidelist extends StatelessWidget {
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
AppText( Expanded(
callMessageAr, flex: 3,
color: ticketModel.callTypeEnum.getColorByCallType(), child: AppText(
fontSize: SizeConfig.getWidthMultiplier() * 2, callMessageAr,
fontWeight: FontWeight.bold, color: ticketModel.callTypeEnum.getColorByCallType(),
fontFamily: AppStrings.fontNameGesTwo, fontSize: SizeConfig.getWidthMultiplier() * 1.8,
fontHeight: 1, fontWeight: FontWeight.bold,
fontFamily: AppStrings.fontNameGesTwo,
fontHeight: 1,
textOverflow: TextOverflow.clip,
maxLines: 1,
),
), ),
SizedBox(width: SizeConfig.getWidthMultiplier()), SizedBox(width: SizeConfig.getWidthMultiplier()),
if (callMessageEng.isNotEmpty) ...[ if (callMessageEng.isNotEmpty) ...[
AppText( Expanded(
"($callMessageEng)", flex: 2,
color: ticketModel.callTypeEnum.getColorByCallType(), child: AppText(
fontSize: SizeConfig.getWidthMultiplier() * 2, "($callMessageEng)",
fontFamily: AppStrings.fontNamePoppins, color: ticketModel.callTypeEnum.getColorByCallType(),
fontHeight: 1, fontSize: SizeConfig.getWidthMultiplier() * 1.8,
fontFamily: AppStrings.fontNamePoppins,
fontHeight: 1,
),
), ),
] ]
], ],
@ -98,8 +111,11 @@ class PriorityTicketsWithSidelist extends StatelessWidget {
ticketModel.roomNo ?? "", ticketModel.roomNo ?? "",
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
color: AppColors.greyTextColor, color: AppColors.greyTextColor,
fontSize: SizeConfig.getWidthMultiplier() * 2, fontSize: SizeConfig.getWidthMultiplier() * 1.8,
fontFamily: globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins, fontFamily: globalConfigurationsModel.screenLanguageEnum == LanguageEnum.arabic ? AppStrings.fontNameCairo : AppStrings.fontNamePoppins,
maxLines: 1,
textOverflow: TextOverflow.clip,
textDirection: globalConfigurationsModel.textDirection,
), ),
), ),
) )
@ -108,88 +124,112 @@ class PriorityTicketsWithSidelist extends StatelessWidget {
); );
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final priorityTickets = tickets.sublist(0, AppConstants.thresholdForListUI); List<TicketDetailsModel> priorityTickets = [];
final otherTickets = tickets.sublist(AppConstants.thresholdForListUI, tickets.length); List<TicketDetailsModel> otherTickets = [];
log("tickets : ${tickets.length}");
log("priorityTickets : ${priorityTickets.length}");
log("otherTickets : ${otherTickets.length}");
if (tickets.length > AppConstants.thresholdForListUI) {
priorityTickets = tickets.sublist(0, AppConstants.thresholdForListUI);
otherTickets = tickets.sublist(AppConstants.thresholdForListUI, tickets.length);
} else {
priorityTickets = tickets;
}
final List<Widget> children = [ final List<Widget> children = [
Expanded(flex: 5, child: PriorityTickets(globalConfigurationsModel: globalConfigurationsModel, tickets: priorityTickets)), Expanded(flex: 5, child: PriorityTickets(globalConfigurationsModel: globalConfigurationsModel, tickets: priorityTickets)),
if (screenOrientationEnum == ScreenOrientationEnum.portraitUp || screenOrientationEnum == ScreenOrientationEnum.portraitDown) ...[ if (screenOrientationEnum == ScreenOrientationEnum.portraitUp || screenOrientationEnum == ScreenOrientationEnum.portraitDown) ...[
SizedBox(width: SizeConfig.getWidthMultiplier() * 2), SizedBox(width: SizeConfig.getWidthMultiplier() * 2),
], ],
Expanded( if (screenOrientationEnum == ScreenOrientationEnum.landscapeLeft || screenOrientationEnum == ScreenOrientationEnum.landscapeRight) ...[
flex: 5, SizedBox(height: SizeConfig.getHeightMultiplier() * 0.2),
child: customShadowSmoothContainer( ],
child: Column( if (showThankyouMessage) ...[
children: [ showThankyouWidget(),
Directionality( ] else ...[
textDirection: globalConfigurationsModel.textDirection, Expanded(
child: Padding( flex: !globalConfigurationsModel.isRssFeedReq && (screenOrientationEnum == ScreenOrientationEnum.landscapeLeft || screenOrientationEnum == ScreenOrientationEnum.landscapeRight) ? 6 : 4,
padding: EdgeInsets.symmetric( // flex: !globalConfigurationsModel.isRssFeedReq && (screenOrientationEnum == ScreenOrientationEnum.landscapeLeft || screenOrientationEnum == ScreenOrientationEnum.landscapeRight) ? 6 : 4,
vertical: SizeConfig.getHeightMultiplier()! * 0.12, child: customShadowSmoothContainer(
horizontal: SizeConfig.getWidthMultiplier()! * 2, child: Column(
), children: [
child: Row( Directionality(
crossAxisAlignment: CrossAxisAlignment.center, textDirection: globalConfigurationsModel.textDirection,
mainAxisAlignment: MainAxisAlignment.spaceBetween, child: Padding(
children: [ padding: EdgeInsets.symmetric(
Expanded( vertical: SizeConfig.getHeightMultiplier()! * 0.12,
flex: 3, horizontal: SizeConfig.getWidthMultiplier()! * 2,
child: engArabicTextWithSeparatorWidget( ),
englishText: globalConfigurationsModel.queueNoTextEng ?? "", child: Row(
arabicText: globalConfigurationsModel.queueNoTextArb ?? "", crossAxisAlignment: CrossAxisAlignment.center,
fontSize: SizeConfig.getWidthMultiplier()! * 2.2, mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisAlignment: MainAxisAlignment.start, children: [
),
),
if (globalConfigurationsModel.qTypeEnum == QTypeEnum.appointment) ...[
Expanded( Expanded(
flex: 5, flex: 3,
child: engArabicTextWithSeparatorWidget( child: engArabicTextWithSeparatorWidget(
mainAxisAlignment: MainAxisAlignment.center, englishText: globalConfigurationsModel.queueNoTextEng ?? "",
englishText: globalConfigurationsModel.callForTextEng ?? "", arabicText: globalConfigurationsModel.queueNoTextArb ?? "",
arabicText: globalConfigurationsModel.callForTextArb ?? "",
fontSize: SizeConfig.getWidthMultiplier()! * 2.2, fontSize: SizeConfig.getWidthMultiplier()! * 2.2,
mainAxisAlignment: MainAxisAlignment.start,
), ),
), ),
], if (globalConfigurationsModel.qTypeEnum == QTypeEnum.appointment) ...[
Expanded( Expanded(
flex: 3, flex: 5,
child: Container( child: engArabicTextWithSeparatorWidget(
child: engArabicTextWithSeparatorWidget( mainAxisAlignment: MainAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.end, englishText: globalConfigurationsModel.callForTextEng ?? "",
englishText: (globalConfigurationsModel.qTypeEnum == QTypeEnum.appointment ? globalConfigurationsModel.roomTextEng : globalConfigurationsModel.counterTextEng) ?? "", arabicText: globalConfigurationsModel.callForTextArb ?? "",
arabicText: (globalConfigurationsModel.qTypeEnum == QTypeEnum.appointment ? globalConfigurationsModel.roomTextArb : globalConfigurationsModel.counterTextArb) ?? "", fontSize: SizeConfig.getWidthMultiplier()! * 2.2,
fontSize: SizeConfig.getWidthMultiplier()! * 2.2, ),
),
],
Expanded(
flex: 3,
child: Container(
child: engArabicTextWithSeparatorWidget(
mainAxisAlignment: MainAxisAlignment.end,
englishText: (globalConfigurationsModel.qTypeEnum == QTypeEnum.appointment ? globalConfigurationsModel.roomTextEng : globalConfigurationsModel.counterTextEng) ?? "",
arabicText: (globalConfigurationsModel.qTypeEnum == QTypeEnum.appointment ? globalConfigurationsModel.roomTextArb : globalConfigurationsModel.counterTextArb) ?? "",
fontSize: SizeConfig.getWidthMultiplier()! * 2.2,
),
), ),
), ),
), ],
], ),
), ),
), ),
), SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.06),
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.06), Expanded(
Expanded( child: Padding(
child: Padding( padding: EdgeInsets.symmetric(horizontal: SizeConfig.getWidthMultiplier() * 3),
padding: EdgeInsets.symmetric(horizontal: SizeConfig.getWidthMultiplier() * 6), child: ListView.separated(
child: ListView.separated( separatorBuilder: (context, int index) => Padding(
separatorBuilder: (context, int index) => Divider( padding: EdgeInsets.only(right: SizeConfig.getWidthMultiplier() * 2),
color: AppColors.lightBorderColor, child: Divider(
thickness: SizeConfig.getHeightMultiplier()! * 0.01, color: AppColors.lightBorderColor,
height: SizeConfig.getHeightMultiplier()! * 0.14, thickness: SizeConfig.getHeightMultiplier()! * 0.01,
height: SizeConfig.getHeightMultiplier()! * 0.14,
),
),
itemCount: otherTickets.length,
itemBuilder: (ctx, index) {
final ticketModel = otherTickets[index].ticketModel;
return ticketListItem(ticketModel: ticketModel);
},
), ),
itemCount: otherTickets.length,
itemBuilder: (ctx, index) {
final ticketModel = otherTickets[index].ticketModel;
return ticketListItem(ticketModel: ticketModel);
},
), ),
), ),
), ],
], ),
), ),
), )
) ],
]; ];
return (screenOrientationEnum == ScreenOrientationEnum.portraitUp || screenOrientationEnum == ScreenOrientationEnum.portraitDown) return (screenOrientationEnum == ScreenOrientationEnum.portraitUp || screenOrientationEnum == ScreenOrientationEnum.portraitDown)

@ -60,7 +60,6 @@ class QueueItemCallingCard extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final text = "${callTypeEnum.getMessageByCallTypeForEnglish(globalConfigurationsModel, isListView: false)} | $roomText $roomNo"; final text = "${callTypeEnum.getMessageByCallTypeForEnglish(globalConfigurationsModel, isListView: false)} | $roomText $roomNo";
return Stack( return Stack(
children: [ children: [
customShadowSmoothContainerWithBackground( customShadowSmoothContainerWithBackground(
@ -68,95 +67,102 @@ class QueueItemCallingCard extends StatelessWidget {
callTypeEnum: callTypeEnum, callTypeEnum: callTypeEnum,
child: Directionality( child: Directionality(
textDirection: textDirection, textDirection: textDirection,
child: Column( child: IntrinsicHeight(
crossAxisAlignment: CrossAxisAlignment.end, child: Column(
children: [ mainAxisAlignment: MainAxisAlignment.spaceEvenly,
Padding( children: [
padding: EdgeInsets.only( Row(
right: textDirection == TextDirection.ltr ? SizeConfig.getWidthMultiplier() * 3.5 : 0, mainAxisAlignment: MainAxisAlignment.spaceBetween,
left: textDirection == TextDirection.rtl ? SizeConfig.getWidthMultiplier() * 3.5 : 0, crossAxisAlignment: CrossAxisAlignment.start,
),
child: callTypeEnum.getIconByCallType(SizeConfig.getHeightMultiplier() * 0.5),
),
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.15),
IntrinsicWidth(
child: callTypeContainer(
textDirection: textDirection,
padding: EdgeInsets.all(SizeConfig.getHeightMultiplier() * 0.1),
color: callTypeEnum.getColorByCallType(),
child: engArabicTextWithSeparatorWidget(
englishText: roomNo,
arabicText: roomTextAr,
color: AppColors.whiteColor,
mainAxisAlignment: MainAxisAlignment.center,
),
),
),
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.15),
Padding(
padding: EdgeInsets.only(
right: textDirection == TextDirection.ltr ? SizeConfig.getWidthMultiplier() * 3.5 : 0,
left: textDirection == TextDirection.rtl ? SizeConfig.getWidthMultiplier() * 3.5 : 0,
),
child: AppText(
callTypeEnum.getMessageByCallTypeForArabic(globalConfigurationsModel, isListView: false),
color: callTypeEnum.getColorByCallType(),
fontSize: SizeConfig.getWidthMultiplier() * 2.5,
fontHeight: 1,
fontFamily: AppStrings.fontNameGesTwo,
),
),
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.15),
Padding(
padding: EdgeInsets.only(
right: textDirection == TextDirection.ltr ? SizeConfig.getWidthMultiplier() * 3.5 : 0,
left: textDirection == TextDirection.rtl ? SizeConfig.getWidthMultiplier() * 3.5 : 0,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [ children: [
ClipRRect( Column(
children: [
Padding(
padding: EdgeInsets.only(
left: textDirection == TextDirection.rtl ? SizeConfig.getWidthMultiplier() * 3.5 : 0,
right: textDirection == TextDirection.ltr ? SizeConfig.getWidthMultiplier() * 3.5 : 0,
),
child: callTypeEnum.getIconByCallType(SizeConfig.getHeightMultiplier() * 0.5),
),
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.15),
IntrinsicWidth(
child: callTypeContainer(
textDirection: textDirection,
padding: EdgeInsets.all(SizeConfig.getHeightMultiplier() * 0.1),
color: callTypeEnum.getColorByCallType(),
child: engArabicTextWithSeparatorWidget(
englishText: roomNo,
arabicText: roomTextAr,
color: AppColors.whiteColor,
mainAxisAlignment: MainAxisAlignment.center,
),
),
),
],
),
Padding(
padding: EdgeInsets.only(
left: textDirection == TextDirection.rtl ? SizeConfig.getWidthMultiplier() * 5 : 0,
right: textDirection == TextDirection.ltr ? SizeConfig.getWidthMultiplier() * 5 : 0,
top: SizeConfig.getHeightMultiplier() * 0.25,
),
child: AppText( child: AppText(
text, getFormattedTicket(ticketNo, isClinicAdded),
color: callTypeEnum.getColorByCallType(), fontSize: SizeConfig.getWidthMultiplier() * 7.4,
fontSize: SizeConfig.getWidthMultiplier() * 2.4, letterSpacing: -1,
fontHeight: 0.5,
color: AppColors.greyTextColor,
fontWeight: FontWeight.bold,
fontFamily: AppStrings.fontNamePoppins, fontFamily: AppStrings.fontNamePoppins,
textAlign: TextAlign.left,
textOverflow: TextOverflow.clip,
maxLines: 1,
), ),
), ),
], ],
), ),
), SizedBox(height: SizeConfig.getHeightMultiplier() * 0.17),
], Padding(
padding: EdgeInsets.only(
left: textDirection == TextDirection.ltr ? SizeConfig.getWidthMultiplier() * 3.5 : 0,
right: textDirection == TextDirection.rtl ? SizeConfig.getWidthMultiplier() * 3.5 : 0,
),
child: Row(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
callTypeEnum.getMessageByCallTypeForArabic(globalConfigurationsModel, isListView: false),
color: callTypeEnum.getColorByCallType(),
fontSize: SizeConfig.getWidthMultiplier() * 2.5,
fontHeight: 1,
fontFamily: AppStrings.fontNameGesTwo,
),
SizedBox(height: SizeConfig.getHeightMultiplier() * 0.05),
ClipRRect(
child: AppText(
text,
color: callTypeEnum.getColorByCallType(),
fontSize: SizeConfig.getWidthMultiplier() * 2.4,
fontFamily: AppStrings.fontNamePoppins,
textAlign: TextAlign.left,
textOverflow: TextOverflow.clip,
maxLines: 1,
),
),
],
),
],
),
),
],
),
), ),
), ),
), ),
Padding( Positioned(
padding: EdgeInsets.only( top: SizeConfig.getHeightMultiplier() * 0.1,
top: SizeConfig.getHeightMultiplier() * 0.1, left: SizeConfig.getWidthMultiplier() * 2,
left: textDirection == TextDirection.ltr ? SizeConfig.getWidthMultiplier() * 2 : 0,
right: textDirection == TextDirection.rtl ? SizeConfig.getWidthMultiplier() * 2 : 0,
),
child: SvgPicture.asset(AppAssets.hmgLogoPatternDarkIcon, height: SizeConfig.getHeightMultiplier() * 1), child: SvgPicture.asset(AppAssets.hmgLogoPatternDarkIcon, height: SizeConfig.getHeightMultiplier() * 1),
), ),
Padding(
padding: EdgeInsets.only(
left: textDirection == TextDirection.ltr ? SizeConfig.getWidthMultiplier() * 6 : 0,
right: textDirection == TextDirection.rtl ? SizeConfig.getWidthMultiplier() * 6 : 0,
top: SizeConfig.getHeightMultiplier() * 0.4,
),
child: AppText(
getFormattedTicket(ticketNo, isClinicAdded),
fontSize: SizeConfig.getWidthMultiplier() * 7.4,
letterSpacing: -1,
fontHeight: 0.5,
color: AppColors.greyTextColor,
fontWeight: FontWeight.bold,
fontFamily: AppStrings.fontNamePoppins,
),
),
], ],
); );
} }

@ -1,4 +1,3 @@
import 'package:blinking_text/blinking_text.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:hmg_qline/constants/app_constants.dart'; import 'package:hmg_qline/constants/app_constants.dart';
@ -20,6 +19,8 @@ class QueueItemNormalCard extends StatelessWidget {
final CallTypeEnum callTypeEnum; final CallTypeEnum callTypeEnum;
final ScreenTypeEnum screenTypeEnum; final ScreenTypeEnum screenTypeEnum;
final LanguageEnum langTypeEnum; final LanguageEnum langTypeEnum;
final double? height;
final double? width;
const QueueItemNormalCard({ const QueueItemNormalCard({
super.key, super.key,
@ -33,6 +34,8 @@ class QueueItemNormalCard extends StatelessWidget {
required this.callTypeEnum, required this.callTypeEnum,
required this.screenTypeEnum, required this.screenTypeEnum,
required this.langTypeEnum, required this.langTypeEnum,
this.height,
this.width,
}); });
String getFormattedTicket(String ticketNo, bool isClinicAdded) { String getFormattedTicket(String ticketNo, bool isClinicAdded) {
@ -53,90 +56,105 @@ class QueueItemNormalCard extends StatelessWidget {
return Stack( return Stack(
children: [ children: [
customShadowSmoothContainer( customShadowSmoothContainer(
padding: EdgeInsets.symmetric( height: height,
vertical: SizeConfig.getHeightMultiplier() * 0.1, width: width,
horizontal: SizeConfig.getWidthMultiplier() * 1.5, padding: EdgeInsets.only(
top: SizeConfig.getHeightMultiplier() * 0.05,
left: SizeConfig.getWidthMultiplier() * 1.5,
right: SizeConfig.getWidthMultiplier() * 1.5,
), ),
child: Directionality( child: Directionality(
textDirection: textDirection, textDirection: textDirection,
child: Column( child: IntrinsicHeight(
children: [ child: Column(
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.14), mainAxisAlignment: MainAxisAlignment.spaceEvenly,
AppText( children: [
getFormattedTicket(ticketNo, isClinicAdded), Flexible(
fontSize: SizeConfig.getWidthMultiplier() * 5, flex: 3,
letterSpacing: -1, child: Center(
fontHeight: 0.5, child: AppText(
color: AppColors.greyTextColor, getFormattedTicket(ticketNo, isClinicAdded),
fontWeight: FontWeight.bold, fontSize: SizeConfig.getWidthMultiplier() * 5,
fontFamily: AppStrings.fontNamePoppins, letterSpacing: -1,
), fontHeight: 0.5,
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.15), color: AppColors.greyTextColor,
Row( fontWeight: FontWeight.bold,
mainAxisAlignment: MainAxisAlignment.end, fontFamily: AppStrings.fontNamePoppins,
children: [ ),
callTypeEnum.getIconByCallType(SizeConfig.getHeightMultiplier() * 0.35), ),
], ),
), Flexible(
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.14), flex: 3,
IntrinsicWidth( child: Row(
child: callTypeContainer( children: [
textDirection: textDirection, callTypeEnum.getIconByCallType(SizeConfig.getHeightMultiplier() * 0.35),
isDisableRightBorderRadius: false, ],
padding: EdgeInsets.all(SizeConfig.getHeightMultiplier() * 0.05), ),
color: callTypeEnum.getColorByCallType(), ),
child: engArabicTextWithSeparatorWidget( Flexible(
fontSize: SizeConfig.getWidthMultiplier()! * 1.8, flex: 4,
englishText: roomNo, child: Center(
arabicText: roomTextAr, child: AppText(
color: AppColors.whiteColor, textAlign: TextAlign.center,
mainAxisAlignment: MainAxisAlignment.center, "${callTypeEnum.getMessageByCallTypeForArabic(globalConfigurationsModel, isListView: false)} ",
color: AppColors.greyTextColor,
fontSize: SizeConfig.getWidthMultiplier() * 2,
fontHeight: 1,
fontFamily: AppStrings.fontNameGesTwo,
maxLines: 2,
textOverflow: TextOverflow.clip,
),
), ),
), ),
), Flexible(
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.14), flex: 2,
AppText( child: IntrinsicWidth(
textAlign: TextAlign.center, child: callTypeContainer(
"${callTypeEnum.getMessageByCallTypeForArabic(globalConfigurationsModel, isListView: false)} ", textDirection: textDirection,
color: callTypeEnum.getColorByCallType(), isDisableRightBorderRadius: false,
fontSize: SizeConfig.getWidthMultiplier() * 2, padding: EdgeInsets.all(SizeConfig.getHeightMultiplier() * 0.05),
fontHeight: 1, color: callTypeEnum.getColorByCallType(),
fontFamily: AppStrings.fontNameGesTwo, child: engArabicTextWithSeparatorWidget(
maxLines: 2, fontSize: SizeConfig.getWidthMultiplier()! * 1.8,
textOverflow: TextOverflow.clip, englishText: roomNo,
), arabicText: roomTextAr,
SizedBox(height: SizeConfig.getHeightMultiplier()! * 0.14), color: AppColors.whiteColor,
Row( mainAxisAlignment: MainAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center, ),
children: [ ),
Expanded( ),
),
Flexible(
flex: 2,
child: Container(
alignment: Alignment.bottomCenter,
child: Center( child: Center(
child: ClipRRect( child: AppText(
child: AppText( text,
text, color: AppColors.greyTextColor,
color: callTypeEnum.getColorByCallType(), fontSize: SizeConfig.getWidthMultiplier() * 1.5,
fontSize: SizeConfig.getWidthMultiplier() * 1.5, fontFamily: AppStrings.fontNamePoppins,
fontFamily: AppStrings.fontNamePoppins, textAlign: TextAlign.center,
textAlign: TextAlign.left, textOverflow: TextOverflow.clip,
textOverflow: TextOverflow.clip, fontHeight: 1.2,
maxLines: 1, maxLines: 1,
),
), ),
), ),
), ),
], ),
), ],
], ),
), ),
), ),
), ),
Padding( Positioned(
padding: EdgeInsets.only( left: textDirection == TextDirection.rtl ? SizeConfig.getWidthMultiplier() * 2 : null,
left: textDirection == TextDirection.ltr ? SizeConfig.getWidthMultiplier() * 2 : 0, right: textDirection == TextDirection.ltr ? SizeConfig.getWidthMultiplier() * 2 : null,
right: textDirection == TextDirection.rtl ? SizeConfig.getWidthMultiplier() * 2 : 0, top: SizeConfig.getHeightMultiplier() * 0.1,
top: SizeConfig.getHeightMultiplier() * 0.1, child: SvgPicture.asset(
AppAssets.hmgLogoPatternLightIcon,
height: SizeConfig.getHeightMultiplier() * 0.8,
), ),
child: SvgPicture.asset(AppAssets.hmgLogoPatternLightIcon, height: SizeConfig.getHeightMultiplier() * 0.8),
), ),
], ],
); );

@ -121,18 +121,21 @@ class _MainQueueScreenState extends State<MainQueueScreen> {
), ),
], ],
); );
} else if (queuingViewModel.currentTickets.length > AppConstants.thresholdForListUI) {
widget = PriorityTicketsWithSidelist(
tickets: queuingViewModel.currentTickets,
globalConfigurationsModel: screenConfigViewModel.globalConfigurationsModel,
screenOrientationEnum: screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum,
);
} else { } else {
widget = PriorityTickets( widget = PriorityTicketsWithSideSection(
tickets: queuingViewModel.currentTickets, tickets: queuingViewModel.currentTickets,
globalConfigurationsModel: screenConfigViewModel.globalConfigurationsModel, globalConfigurationsModel: screenConfigViewModel.globalConfigurationsModel,
screenOrientationEnum: screenConfigViewModel.globalConfigurationsModel.orientationTypeEnum,
showThankyouMessage: queuingViewModel.currentTickets.length <= AppConstants.thresholdForListUI,
// showThankyouMessage: true,
); );
} }
// else {
// widget = PriorityTickets(
// tickets: queuingViewModel.currentTickets,
// globalConfigurationsModel: screenConfigViewModel.globalConfigurationsModel,
// );
// }
return widget; return widget;
}, },

@ -57,11 +57,9 @@ dependencies:
restart_app: ^1.3.2 restart_app: ^1.3.2
zo_animated_border: ^1.0.1 zo_animated_border: ^1.0.1
animated_flip_counter: ^0.3.4 animated_flip_counter: ^0.3.4
# smooth_corner: ^1.1.1
# 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
dependency_overrides: dependency_overrides:
http: ^1.2.2 http: ^1.2.2

Loading…
Cancel
Save