* 'master' of http://34.17.182.140/Haroon6138/mohemm-flutter-app:
  approval level commented Code for filter .
  Parking Qr Solution
  CR-19329 - ERP MOWADHFAI System changes
  Changed the device identifier, Update to Stores VersionID 9.5
  Update to Stores for Fixed Asset Disposal, VersionID 9.4

# Conflicts:
#	assets/langs/ar-SA.json
#	assets/langs/en-US.json
#	lib/api/dashboard_api_client.dart
#	lib/generated/codegen_loader.g.dart
#	lib/generated/locale_keys.g.dart
pull/19/head
Sultan khan 2 months ago
commit fe583c234b

@ -8,13 +8,13 @@
<uses-permission android:name="android.permission.NFC" /> <uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" tools:node="remove" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" tools:node="remove" /> <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" tools:node="remove" />
<!-- Required only if your app needs to access videos <!-- Required only if your app needs to access videos
that other apps created. --> that other apps created. -->
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" /> <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" tools:node="remove" />
<!-- Required only if your app needs to access audio files <!-- Required only if your app needs to access audio files
that other apps created. --> that other apps created. -->
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />

@ -1,4 +1,5 @@
org.gradle.jvmargs=-Xmx2048M org.gradle.jvmargs=-Xmx4096m
kotlin.daemon.jvmargs=-Xmx4096m
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
apmsInstrumentationEnabled=false apmsInstrumentationEnabled=false

@ -0,0 +1,4 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M17.3339 15.9992H13.3339V11.1992C13.3339 10.9365 13.3343 10.7929 13.34 10.6886L13.341 10.673L13.3565 10.6721C13.4609 10.6664 13.6045 10.6659 13.8672 10.6659H17.3339C18.8066 10.6659 20.0005 11.8598 20.0005 13.3326C20.0005 14.8053 18.8066 15.9992 17.3339 15.9992Z" fill="#2E3039"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.0684 2.33203H15.9316C13.1698 2.33202 11.005 2.33201 9.30102 2.53899C7.55973 2.75051 6.16606 3.19084 5.02088 4.16892C4.71548 4.42976 4.43104 4.71419 4.1702 5.0196C3.19212 6.16478 2.75179 7.55845 2.54027 9.29974C2.33329 11.0037 2.3333 13.1684 2.33331 15.9304V16.067C2.3333 18.829 2.33329 20.9937 2.54027 22.6977C2.75179 24.4389 3.19212 25.8326 4.1702 26.9778C4.43104 27.2832 4.71547 27.5676 5.02088 27.8285C6.16606 28.8066 7.55973 29.2469 9.30102 29.4584C11.005 29.6654 13.1697 29.6654 15.9316 29.6654H16.0683C18.8302 29.6654 20.995 29.6654 22.6989 29.4584C24.4402 29.2469 25.8339 28.8066 26.9791 27.8285C27.2845 27.5676 27.5689 27.2832 27.8298 26.9778C28.8078 25.8326 29.2482 24.4389 29.4597 22.6977C29.6667 20.9937 29.6667 18.829 29.6666 16.067V15.9304C29.6667 13.1684 29.6667 11.0037 29.4597 9.29974C29.2482 7.55845 28.8078 6.16478 27.8298 5.0196C27.5689 4.71419 27.2845 4.42976 26.9791 4.16892C25.8339 3.19084 24.4402 2.75051 22.6989 2.53899C20.995 2.33201 18.8303 2.33202 16.0684 2.33203ZM13.8672 7.99925L13.7592 7.99898C13.3835 7.99761 12.9217 7.99593 12.5098 8.12976C11.698 8.39355 11.0615 9.03003 10.7977 9.84187C10.6639 10.2538 10.6656 10.7156 10.6669 11.0913L10.6672 11.1992V23.9993C10.6672 24.7356 11.2642 25.3326 12.0005 25.3326C12.7369 25.3326 13.3339 24.7356 13.3339 23.9993V18.6659H17.3339C20.2794 18.6659 22.6672 16.2781 22.6672 13.3326C22.6672 10.3871 20.2794 7.99925 17.3339 7.99925H13.8672Z" fill="#2E3039"/>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

@ -642,7 +642,6 @@
"yearsUsed": "سنوات الاستخدام", "yearsUsed": "سنوات الاستخدام",
"faRequest": "طلب التخلص من FA", "faRequest": "طلب التخلص من FA",
"showMore": "عرض المزيد", "showMore": "عرض المزيد",
"buyerDetails": "تفاصيل المشتري",
"ticketDetails": "تفاصيل التذكرة", "ticketDetails": "تفاصيل التذكرة",
"currentTicketBalance": "رصيد التذكرة الحالي", "currentTicketBalance": "رصيد التذكرة الحالي",
"ticketHistory": "تاريخ التذكرة", "ticketHistory": "تاريخ التذكرة",
@ -652,9 +651,10 @@
"status": "الحالة", "status": "الحالة",
"deadline": "الموعد النهائي", "deadline": "الموعد النهائي",
"overdue": "متأخر", "overdue": "متأخر",
"open": "فتح",
"noCoursesAvailable": "لا توجد دورات متاحة", "noCoursesAvailable": "لا توجد دورات متاحة",
"pullToRefresh": "اسحب للتحديث", "pullToRefresh": "اسحب للتحديث",
"courseUrlNotAvailable": "رابط الدورة غير متوفر" "courseUrlNotAvailable": "رابط الدورة غير متوفر"
"buyerDetails": "تفاصيل المشتري",
"parkingQr": "وقوف السيارات QR"
} }

@ -640,7 +640,6 @@
"yearsUsed": "Years Used", "yearsUsed": "Years Used",
"faRequest":"FA Disposal Request", "faRequest":"FA Disposal Request",
"showMore": "Show More", "showMore": "Show More",
"buyerDetails": "Buyer Details",
"ticketDetails": "Ticket Details", "ticketDetails": "Ticket Details",
"currentTicketBalance": "Current Ticket Balance", "currentTicketBalance": "Current Ticket Balance",
"ticketHistory": "Ticket History", "ticketHistory": "Ticket History",
@ -650,8 +649,9 @@
"status": "Status", "status": "Status",
"deadline": "Deadline", "deadline": "Deadline",
"overdue": "Overdue", "overdue": "Overdue",
"open": "Open",
"noCoursesAvailable": "No Courses Available", "noCoursesAvailable": "No Courses Available",
"pullToRefresh": "Pull to refresh", "pullToRefresh": "Pull to refresh",
"courseUrlNotAvailable": "Course URL not available" "courseUrlNotAvailable": "Course URL not available",
"buyerDetails": "Buyer Details",
"parkingQr": "Parking QR"
} }

@ -5,6 +5,7 @@ import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:device_info_plus/device_info_plus.dart'; import 'package:device_info_plus/device_info_plus.dart';
import 'package:mobile_device_identifier/mobile_device_identifier.dart';
import 'package:mohem_flutter_app/api/api_client.dart'; import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/consts.dart'; import 'package:mohem_flutter_app/classes/consts.dart';
@ -16,13 +17,11 @@ import 'package:mohem_flutter_app/models/dashboard/itg_forms_model.dart';
import 'package:mohem_flutter_app/models/dashboard/list_menu.dart'; import 'package:mohem_flutter_app/models/dashboard/list_menu.dart';
import 'package:mohem_flutter_app/models/dashboard/courses_response_model.dart'; import 'package:mohem_flutter_app/models/dashboard/courses_response_model.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/models/get_employee_parking_details_model.dart';
import 'package:mohem_flutter_app/models/itg/itg_main_response.dart'; import 'package:mohem_flutter_app/models/itg/itg_main_response.dart';
import 'package:mohem_flutter_app/models/itg/itg_response_model.dart'; import 'package:mohem_flutter_app/models/itg/itg_response_model.dart';
import 'package:mohem_flutter_app/models/sso_auth_model.dart'; import 'package:mohem_flutter_app/models/sso_auth_model.dart';
import 'package:platform_device_id_plus/platform_device_id.dart';
// import 'package:platform_device_id/platform_device_id.dart';
// import 'package:platform_device_id/platform_device_id.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
class DashboardApiClient { class DashboardApiClient {
@ -229,9 +228,10 @@ class DashboardApiClient {
} }
Future<dynamic> getBookingSSOFinalRedirection({required String token}) async { Future<dynamic> getBookingSSOFinalRedirection({required String token}) async {
token = // token =
"eyJhbGciOiJSUzI1NiIsImtpZCI6IjhjZTE2OWM0YjIwYjQ2ZWM5YTQyOTU3Y2ZhODUzNzQ1IiwidHlwIjoiSldUIn0.eyJ0ZW5hbnRfaWQiOiJhOWY0ZDFhMDU5NmQ0YWVhOGY4MzA5OTJlYzRiZGFjMSIsImVpZCI6IjExNzkzMCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL3NpZCI6Ijk2MDI0OGM1NzA3YzQ3MmFhYTEzM2I1N2ZhODE1ZmVhIiwibGFuZ3VhZ2UiOiJVUyIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL2VtYWlsYWRkcmVzcyI6IjExNzkzMEBobWcuY29tIiwiZXhwIjoxNzgyNDc1NzY5LCJpc3MiOiJodHRwczovL3Nzby11YXQuaG1nLmNvbSIsImF1ZCI6ImE5ZjRkMWEwNTk2ZDRhZWE4ZjgzMDk5MmVjNGJkYWMxIn0.rJcLVsG8D0XECyLERCTD2uqGeWyvp-OBVGE9uL2qKrX4etFUHgdFt_5kYF6edFTtGy-0PIZadHDmv7e-IOhVWHm5HVMClaukiXoRXR8cDN8XA1wfme3Kd-U5PXN-IRh49AyRTzLO0rYNPvH81ScosWGlsFSkOvA-0hJNa2adHdtvgNvB8wJshSU5p7sAmF8mjdDY6aInG19etu2iEuUDwHHA4ZY_ts4hboHo8fE392hFaYGonExoD7bpW5RMx5xKWeRCmWpG_PK8Aw_z1jGzdB9PANus4pteRGuln1J-kmo2lQC9pVrSyZATAKp1HfgfyZ_vUhaHEfM69cMWaCslJQ"; // "eyJhbGciOiJSUzI1NiIsImtpZCI6IjhjZTE2OWM0YjIwYjQ2ZWM5YTQyOTU3Y2ZhODUzNzQ1IiwidHlwIjoiSldUIn0.eyJ0ZW5hbnRfaWQiOiJhOWY0ZDFhMDU5NmQ0YWVhOGY4MzA5OTJlYzRiZGFjMSIsImVpZCI6IjExNzkzMCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL3NpZCI6Ijk2MDI0OGM1NzA3YzQ3MmFhYTEzM2I1N2ZhODE1ZmVhIiwibGFuZ3VhZ2UiOiJVUyIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL2VtYWlsYWRkcmVzcyI6IjExNzkzMEBobWcuY29tIiwiZXhwIjoxNzgyNDc1NzY5LCJpc3MiOiJodHRwczovL3Nzby11YXQuaG1nLmNvbSIsImF1ZCI6ImE5ZjRkMWEwNTk2ZDRhZWE4ZjgzMDk5MmVjNGJkYWMxIn0.rJcLVsG8D0XECyLERCTD2uqGeWyvp-OBVGE9uL2qKrX4etFUHgdFt_5kYF6edFTtGy-0PIZadHDmv7e-IOhVWHm5HVMClaukiXoRXR8cDN8XA1wfme3Kd-U5PXN-IRh49AyRTzLO0rYNPvH81ScosWGlsFSkOvA-0hJNa2adHdtvgNvB8wJshSU5p7sAmF8mjdDY6aInG19etu2iEuUDwHHA4ZY_ts4hboHo8fE392hFaYGonExoD7bpW5RMx5xKWeRCmWpG_PK8Aw_z1jGzdB9PANus4pteRGuln1J-kmo2lQC9pVrSyZATAKp1HfgfyZ_vUhaHEfM69cMWaCslJQ";
var request = http.MultipartRequest('POST', Uri.parse('https://ek.techmaster.in/SSO/HMG')); // // var request = http.MultipartRequest('POST', Uri.parse('https://ek.techmaster.in/SSO/HMG'));
var request = http.MultipartRequest('POST', Uri.parse('https://Paxes-release.techmaster.in/SSO/HMG'));
request.fields.addAll({'JWTToken': token}); request.fields.addAll({'JWTToken': token});
// request.headers.addAll(headers); // request.headers.addAll(headers);
@ -256,13 +256,17 @@ class DashboardApiClient {
String QRValue = "", String QRValue = "",
String payrollCode = "", String payrollCode = "",
}) async { }) async {
var _mobileDeviceIdentifierPlugin = MobileDeviceIdentifier();
Codec<String, String> stringToBase64 = utf8.fuse(base64);
String url = "${ApiConsts.swpRest}AuthenticateAndSwipeUserSupportNFC"; String url = "${ApiConsts.swpRest}AuthenticateAndSwipeUserSupportNFC";
var uuid = Uuid(); var uuid = Uuid();
String? deviceId = ""; String? deviceId = "";
// Generate a v4 (random) id // Generate a v4 (random) id
if (Platform.isAndroid) { if (Platform.isAndroid) {
AndroidDeviceInfo androidInfo = await DeviceInfoPlugin().androidInfo; AndroidDeviceInfo androidInfo = await DeviceInfoPlugin().androidInfo;
deviceId = androidInfo.id; deviceId = await _mobileDeviceIdentifierPlugin.getDeviceId() ?? androidInfo.id;
deviceId = stringToBase64.encode(deviceId);
deviceId = deviceId.length >= 50 ? deviceId.substring(0, 48) : deviceId;
} else if (Platform.isIOS) { } else if (Platform.isIOS) {
IosDeviceInfo iosInfo = await DeviceInfoPlugin().iosInfo; IosDeviceInfo iosInfo = await DeviceInfoPlugin().iosInfo;
deviceId = iosInfo.identifierForVendor; deviceId = iosInfo.identifierForVendor;
@ -413,6 +417,20 @@ class DashboardApiClient {
// ); // );
// } // }
Future<GetEmployeeParking?> getEmployeeParkingQrCode() async {
String url = "${ApiConsts.erpRest}GET_Employee_Parking";
Map<String, dynamic> postParams = {};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject(
(json) {
GetEmployeeParking responseData = GetEmployeeParking.fromJson(json);
return responseData;
},
url,
postParams,
);
}
//Fetch All Courses Status //Fetch All Courses Status
Future<CoursesResponseModel?> fetchAllCoursesStatus() async { Future<CoursesResponseModel?> fetchAllCoursesStatus() async {
String url = "https://elearning.hmg.com/moodle_dev/api/Fetch_All_Courses_Status.php"; String url = "https://elearning.hmg.com/moodle_dev/api/Fetch_All_Courses_Status.php";

@ -90,7 +90,7 @@ class AppState {
String get getHuaweiPushToken => _huaweiPushToken; String get getHuaweiPushToken => _huaweiPushToken;
final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 31, versionID: 9.3, mobileType: Platform.isAndroid ? "android" : "ios"); final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 31, versionID: 9.5, mobileType: Platform.isAndroid ? "android" : "ios");
void setPostParamsInitConfig() { void setPostParamsInitConfig() {
isAuthenticated = false; isAuthenticated = false;

@ -5,14 +5,14 @@ class ApiConsts {
// static String baseUrl = "https://erptstapp.srca.org.sa"; // SRCA server // static String baseUrl = "https://erptstapp.srca.org.sa"; // SRCA server
static String baseUrl = "https://uat.hmgwebservices.com"; // UAT ser343622ver static String baseUrl = "https://uat.hmgwebservices.com"; // UAT ser343622ver
// static String baseUrl = "http://10.201.204.101:2024"; // static String baseUrl = "http://10.201.204.101:2024";
// static String baseUrl = "https://webservices.hmg.com"; // PreProd // static String baseUrl = "https://webservices.hmg.com"; // PreProd
// static String baseUrl = "https://hmgwebservices.com"; // Live server // static String baseUrl = "https://hmgwebservices.com"; // Live server
// static String baseUrl = "https://mohemm.hmg.com"; // New Live server // static String baseUrl = "https://mohemm.hmg.com"; // New Live server
// //
// static String baseUrl = "https://uat.hmgwebservices.com"; // UAT ser343622ver // static String baseUrl = "https://uat.hmgwebservices.com"; // UAT ser343622ver
// static String baseUrl = "http://10.20.200.111:1010/"; // static String baseUrl = "http://10.20.200.111:1010/";
// static String baseUrl = "https://webservices.hmg.com"; // PreProd // static String baseUrl = "https://webservices.hmg.com"; // PreProd
// static String baseUrl = "https://mohemm.hmg.com"; // static String baseUrl = "https://mohemm.hmg.com";

@ -40,6 +40,7 @@ import 'package:mohem_flutter_app/ui/my_team/profile_details.dart';
import 'package:mohem_flutter_app/ui/my_team/subordinate_leave.dart'; import 'package:mohem_flutter_app/ui/my_team/subordinate_leave.dart';
import 'package:mohem_flutter_app/ui/my_team/team_members.dart'; import 'package:mohem_flutter_app/ui/my_team/team_members.dart';
import 'package:mohem_flutter_app/ui/my_team/view_attendance.dart'; import 'package:mohem_flutter_app/ui/my_team/view_attendance.dart';
import 'package:mohem_flutter_app/ui/parking_qr/parking_qr.dart';
import 'package:mohem_flutter_app/ui/payslip/monthly_pay_slip_screen.dart'; import 'package:mohem_flutter_app/ui/payslip/monthly_pay_slip_screen.dart';
import 'package:mohem_flutter_app/ui/performance/performance_appraisal_screen.dart'; import 'package:mohem_flutter_app/ui/performance/performance_appraisal_screen.dart';
import 'package:mohem_flutter_app/ui/profile/add_update_family_member.dart'; import 'package:mohem_flutter_app/ui/profile/add_update_family_member.dart';
@ -215,6 +216,9 @@ class AppRoutes {
static const String activityScreen = "/activityScreen"; static const String activityScreen = "/activityScreen";
//Parking QR
static const String parkingQr = "/parkingQrScreen";
static final Map<String, WidgetBuilder> routes = { static final Map<String, WidgetBuilder> routes = {
login: (BuildContext context) => LoginScreen(), login: (BuildContext context) => LoginScreen(),
verifyLogin: (BuildContext context) => VerifyLoginScreen(), verifyLogin: (BuildContext context) => VerifyLoginScreen(),
@ -335,6 +339,10 @@ class AppRoutes {
unsafeDeviceScreen: (BuildContext context) => const UnsafeDeviceScreen(), unsafeDeviceScreen: (BuildContext context) => const UnsafeDeviceScreen(),
appUpdateScreen: (BuildContext context) => const AppUpdateScreen(), appUpdateScreen: (BuildContext context) => const AppUpdateScreen(),
childEducation: (BuildContext context) => ChildEducationAssistance(), childEducation: (BuildContext context) => ChildEducationAssistance(),
activityScreen:(BuildContext context) => const EventActivityScreen() activityScreen:(BuildContext context) => const EventActivityScreen(),
//Parking QR
parkingQr: (BuildContext context) => const ParkingQrScreen(),
}; };
} }

@ -563,7 +563,7 @@ class CodegenLoader extends AssetLoader{
"addAtLeastOneAttachment": "الرجاء إضافة مرفق واحد على الأقل.", "addAtLeastOneAttachment": "الرجاء إضافة مرفق واحد على الأقل.",
"pleaseClickButtonToJoinMarathon": "الرجاء الضغط على الزر أدناه للانضمام إلى الماراثون", "pleaseClickButtonToJoinMarathon": "الرجاء الضغط على الزر أدناه للانضمام إلى الماراثون",
"youCannotJoinTheMarathon": "لا يمكنك الانضمام إلى الماراثون لأنك تجاوزت الحد الزمني", "youCannotJoinTheMarathon": "لا يمكنك الانضمام إلى الماراثون لأنك تجاوزت الحد الزمني",
"open": "فتح", "open": "يفتح",
"paymentRequest": "طلب الدفع", "paymentRequest": "طلب الدفع",
"paymentDetails": "تفاصيل الدفع", "paymentDetails": "تفاصيل الدفع",
"requestNo": "رقم الطلب", "requestNo": "رقم الطلب",
@ -666,7 +666,8 @@ class CodegenLoader extends AssetLoader{
"deadline": "الموعد النهائي", "deadline": "الموعد النهائي",
"noCoursesAvailable": "لا توجد دورات متاحة", "noCoursesAvailable": "لا توجد دورات متاحة",
"pullToRefresh": "اسحب للتحديث", "pullToRefresh": "اسحب للتحديث",
"courseUrlNotAvailable": "رابط الدورة غير متوفر" "courseUrlNotAvailable": "رابط الدورة غير متوفر",
"parkingQr": "وقوف السيارات QR"
}; };
static const Map<String,dynamic> _en_US = { static const Map<String,dynamic> _en_US = {
"mohemm": "Mohemm", "mohemm": "Mohemm",
@ -1231,7 +1232,7 @@ static const Map<String,dynamic> _en_US = {
"userSearch": "User Search", "userSearch": "User Search",
"userName": "User Name", "userName": "User Name",
"userId": "UserID", "userId": "UserID",
"open": "Open", "open": "open",
"addAtLeastOneAttachment": "Please add at least one attachment.", "addAtLeastOneAttachment": "Please add at least one attachment.",
"pleaseClickButtonToJoinMarathon": "Press the button below to join the Marathon.", "pleaseClickButtonToJoinMarathon": "Press the button below to join the Marathon.",
"youCannotJoinTheMarathon": "You cannot join the Marathon because you have exceeded the time limit.", "youCannotJoinTheMarathon": "You cannot join the Marathon because you have exceeded the time limit.",
@ -1310,6 +1311,7 @@ static const Map<String,dynamic> _en_US = {
"faRequest": "FA Disposal Request", "faRequest": "FA Disposal Request",
"showMore": "Show More", "showMore": "Show More",
"buyerDetails": "Buyer Details", "buyerDetails": "Buyer Details",
"parkingQr": "Parking QR",
"ticketDetails": "Ticket Details", "ticketDetails": "Ticket Details",
"currentTicketBalance": "Current Ticket Balance", "currentTicketBalance": "Current Ticket Balance",
"ticketHistory": "Ticket History", "ticketHistory": "Ticket History",

@ -640,5 +640,6 @@ abstract class LocaleKeys {
static const noCoursesAvailable = 'noCoursesAvailable'; static const noCoursesAvailable = 'noCoursesAvailable';
static const pullToRefresh = 'pullToRefresh'; static const pullToRefresh = 'pullToRefresh';
static const courseUrlNotAvailable = 'courseUrlNotAvailable'; static const courseUrlNotAvailable = 'courseUrlNotAvailable';
static const parkingQr = 'parkingQr';
} }

@ -82,18 +82,22 @@ class MyApp extends StatelessWidget {
List<LocalizationsDelegate<dynamic>> delegates = context.localizationDelegates; List<LocalizationsDelegate<dynamic>> delegates = context.localizationDelegates;
// delegates.add(GlobalMaterialLocalizations.delegate); // delegates.add(GlobalMaterialLocalizations.delegate);
delegates.add(MonthYearPickerLocalizations.delegate); delegates.add(MonthYearPickerLocalizations.delegate);
return MaterialApp( return SafeArea(
navigatorKey: AppRoutes.navigatorKey, top: false, // Set to true if you want to avoid the notch area as well
builder: (BuildContext context, Widget? child) { bottom: Platform.isIOS ? false : true,
return MediaQuery(data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0), child: child!); child: MaterialApp(
}, navigatorKey: AppRoutes.navigatorKey,
theme: AppTheme.getTheme(EasyLocalization.of(context)?.locale.languageCode == "ar"), builder: (BuildContext context, Widget? child) {
debugShowCheckedModeBanner: false, return MediaQuery(data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0), child: child!);
localizationsDelegates: delegates, },
supportedLocales: context.supportedLocales, theme: AppTheme.getTheme(EasyLocalization.of(context)?.locale.languageCode == "ar"),
locale: context.locale, debugShowCheckedModeBanner: false,
initialRoute: AppRoutes.initialRoute, localizationsDelegates: delegates,
routes: AppRoutes.routes, supportedLocales: context.supportedLocales,
locale: context.locale,
initialRoute: AppRoutes.initialRoute,
routes: AppRoutes.routes,
),
); );
}, },
); );

@ -0,0 +1,61 @@
import 'dart:convert';
class GetEmployeeParking {
GetEmployeeParkingClass? getEmployeeParking;
GetEmployeeParking({
this.getEmployeeParking,
});
factory GetEmployeeParking.fromRawJson(String str) => GetEmployeeParking.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory GetEmployeeParking.fromJson(Map<String, dynamic> json) => GetEmployeeParking(
getEmployeeParking: json["GET_Employee_Parking"] == null ? null : GetEmployeeParkingClass.fromJson(json["GET_Employee_Parking"]),
);
Map<String, dynamic> toJson() => {
"GET_Employee_Parking": getEmployeeParking?.toJson(),
};
}
class GetEmployeeParkingClass {
DateTime? createdAt;
String? employeeCode;
String? isNewQrCode;
String? qrCode;
String? qrCodeImageBase64;
bool? success;
GetEmployeeParkingClass({
this.createdAt,
this.employeeCode,
this.isNewQrCode,
this.qrCode,
this.qrCodeImageBase64,
this.success,
});
factory GetEmployeeParkingClass.fromRawJson(String str) => GetEmployeeParkingClass.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory GetEmployeeParkingClass.fromJson(Map<String, dynamic> json) => GetEmployeeParkingClass(
createdAt: json["createdAt"] == null ? null : DateTime.parse(json["createdAt"]),
employeeCode: json["employeeCode"],
isNewQrCode: json["isNewQRCode"],
qrCode: json["qrCode"],
qrCodeImageBase64: json["qrCodeImageBase64"],
success: json["success"],
);
Map<String, dynamic> toJson() => {
"createdAt": createdAt?.toIso8601String(),
"employeeCode": employeeCode,
"isNewQRCode": isNewQrCode,
"qrCode": qrCode,
"qrCodeImageBase64": qrCodeImageBase64,
"success": success,
};
}

@ -126,6 +126,7 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
DrawerMenuItem("assets/images/drawer/my_profile.svg", LocaleKeys.myProfile.tr(), AppRoutes.profile), DrawerMenuItem("assets/images/drawer/my_profile.svg", LocaleKeys.myProfile.tr(), AppRoutes.profile),
DrawerMenuItem("assets/images/drawer/performance_evaluation.svg", LocaleKeys.performanceEvaluation.tr(), AppRoutes.performanceEvaluation), DrawerMenuItem("assets/images/drawer/performance_evaluation.svg", LocaleKeys.performanceEvaluation.tr(), AppRoutes.performanceEvaluation),
DrawerMenuItem("assets/images/drawer/mowadhafi.svg", LocaleKeys.mowadhafhi.tr(), AppRoutes.mowadhafhi), DrawerMenuItem("assets/images/drawer/mowadhafi.svg", LocaleKeys.mowadhafhi.tr(), AppRoutes.mowadhafhi),
DrawerMenuItem("assets/images/drawer/car_parking_icon.svg", LocaleKeys.parkingQr.tr(), AppRoutes.parkingQr),
DrawerMenuItem("assets/images/drawer/pending_trasactions.svg", LocaleKeys.pendingTransactions.tr(), AppRoutes.pendingTransactions), DrawerMenuItem("assets/images/drawer/pending_trasactions.svg", LocaleKeys.pendingTransactions.tr(), AppRoutes.pendingTransactions),
DrawerMenuItem("assets/images/drawer/courses.svg", "courses".tr(), AppRoutes.courses), DrawerMenuItem("assets/images/drawer/courses.svg", "courses".tr(), AppRoutes.courses),
// DrawerMenuItem("assets/images/drawer/drawer_marathon.svg", LocaleKeys.brainMarathon.tr(), AppRoutes.marathonIntroScreen), // DrawerMenuItem("assets/images/drawer/drawer_marathon.svg", LocaleKeys.brainMarathon.tr(), AppRoutes.marathonIntroScreen),
@ -333,8 +334,6 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
void fetchTicketBalance() async { void fetchTicketBalance() async {
try { try {
GenericResponseModel? ticketResponse = await DashboardApiClient().getTicketBalance(); GenericResponseModel? ticketResponse = await DashboardApiClient().getTicketBalance();
logger.d("Ticket Balance Response: ${ticketResponse?.toJson()}");
print(" ========= Ticket Balance Response ======= ");
} catch (ex) { } catch (ex) {
logger.wtf(ex); logger.wtf(ex);
isEventLoadingLoading = false; isEventLoadingLoading = false;
@ -347,8 +346,7 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
Future<SSOAuthModel?> fetchSSOAuthRedirection({String? clientID}) async { Future<SSOAuthModel?> fetchSSOAuthRedirection({String? clientID}) async {
try { try {
SSOAuthModel? ssoResponse = await DashboardApiClient().getBookingSSOAuthRedirection(clientID: clientID!); SSOAuthModel? ssoResponse = await DashboardApiClient().getBookingSSOAuthRedirection(clientID: clientID!);
logger.d("SSO Response: ${ssoResponse!.toJson()}"); if (ssoResponse!.status == "Success") {
if (ssoResponse.status == "Success") {
return ssoResponse; return ssoResponse;
} else { } else {
Utils.showToast(ssoResponse.message!.first ?? "Failed to fetch SSO Auth Token"); Utils.showToast(ssoResponse.message!.first ?? "Failed to fetch SSO Auth Token");
@ -368,18 +366,12 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
dynamic res = await DashboardApiClient().getBookingSSOFinalRedirection(token: token); dynamic res = await DashboardApiClient().getBookingSSOFinalRedirection(token: token);
logger.d("SSO URL: $res"); logger.d("SSO URL: $res");
return res; return res;
// if (ssoResponse.status == "Success") {
// return ssoResponse;
// } else {
// Utils.showToast(ssoResponse.message!.first ?? "Failed to fetch SSO Auth Token");
// return null;
// }
} catch (ex) { } catch (ex) {
logger.wtf(ex); logger.wtf(ex);
isEventLoadingLoading = false; isEventLoadingLoading = false;
notifyListeners(); notifyListeners();
Utils.handleException(ex, null, null); Utils.handleException(ex, null, null);
return null; // Ensure a return value in case of an exception return null;
} }
} }

@ -164,7 +164,8 @@ class _DashboardScreenState extends State<DashboardScreen> with WidgetsBindingOb
if (!cProvider.disbaleChatForThisUser && !isFromInit) checkHubCon(); if (!cProvider.disbaleChatForThisUser && !isFromInit) checkHubCon();
_refreshController.refreshCompleted(); _refreshController.refreshCompleted();
await data.fetchTicketBooking(); // await data.fetchTicketBooking();
// if (data.ticketBookingResponse != null && !data.ticketBookingResponse!.success) { // if (data.ticketBookingResponse != null && !data.ticketBookingResponse!.success) {
// // data.fetchTicketBalance(); // // data.fetchTicketBalance();
// } // }

@ -257,9 +257,9 @@ class ServicesWidget extends StatelessWidget {
} }
} else { } else {
if (menuEntry.menuName == "HMG_TICKET_REQUESTS") { if (menuEntry.menuName == "HMG_TICKET_REQUESTS") {
Utils.showLoading(context);
//Ticket Work //Ticket Work
if (pro.ticketBookingResponse != null && pro.ticketBookingResponse!.success) { if (pro.ticketBookingResponse != null && pro.ticketBookingResponse!.success) {
Utils.showLoading(context);
SSOAuthModel? ssoToken = await pro.fetchSSOAuthRedirection(clientID: pro.ticketBookingResponse!.clientId); SSOAuthModel? ssoToken = await pro.fetchSSOAuthRedirection(clientID: pro.ticketBookingResponse!.clientId);
if (ssoToken != null) { if (ssoToken != null) {
dynamic url = await pro.fetchURLRedirection(token: ssoToken.data!.accessToken!); dynamic url = await pro.fetchURLRedirection(token: ssoToken.data!.accessToken!);

@ -0,0 +1,106 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/dashboard_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/get_employee_parking_details_model.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
class ParkingQrScreen extends StatefulWidget {
const ParkingQrScreen({Key? key}) : super(key: key);
@override
_RequestDetailsState createState() => _RequestDetailsState();
}
class _RequestDetailsState extends State<ParkingQrScreen> {
GetEmployeeParking? qrData;
@override
void initState() {
super.initState();
getTicketDetails();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBarWidget(context, title: LocaleKeys.parkingQr.tr()),
body:
qrData?.getEmployeeParking == null
? Center(child: Text(LocaleKeys.noDataAvailable.tr()))
: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Center(
child: Container(
padding: const EdgeInsets.all(20.0),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
boxShadow: [BoxShadow(color: Colors.grey.withValues(alpha: 0.2), spreadRadius: 5, blurRadius: 10, offset: const Offset(0, 3))],
),
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
// QR Code Image
if (qrData!.getEmployeeParking!.qrCodeImageBase64 != null && qrData!.getEmployeeParking!.qrCodeImageBase64!.isNotEmpty)
Image.memory(Utils.dataFromBase64String(qrData!.getEmployeeParking!.qrCodeImageBase64!), width: 300, height: 300, fit: BoxFit.contain)
else
Container(
width: 300,
height: 300,
color: MyColors.lightGreyEFColor,
child: Center(child: Text(LocaleKeys.noDataAvailable.tr(), style: const TextStyle(color: MyColors.grey67Color))),
),
10.height,
Container(height: 1, color: MyColors.lightGreyE3Color, margin: const EdgeInsets.symmetric(vertical: 10)),
20.height,
SizedBox(
width: double.infinity,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Employee Code
if (qrData!.getEmployeeParking!.employeeCode != null && qrData!.getEmployeeParking!.employeeCode!.isNotEmpty) ...[
Text(LocaleKeys.employeeNumber.tr(), style: const TextStyle(fontSize: 14, color: MyColors.grey67Color, fontWeight: FontWeight.w400)),
8.height,
Text(qrData!.getEmployeeParking!.employeeCode!, style: const TextStyle(fontSize: 18, color: MyColors.darkTextColor, fontWeight: FontWeight.w600)),
8.height,
],
if (qrData!.getEmployeeParking!.createdAt != null) ...[
Text(LocaleKeys.creationDate.tr(), style: const TextStyle(fontSize: 14, color: MyColors.grey67Color, fontWeight: FontWeight.w400)),
8.height,
Text(
DateFormat('dd MMM yyyy, hh:mm a').format(qrData!.getEmployeeParking!.createdAt!),
style: const TextStyle(fontSize: 16, color: MyColors.darkTextColor, fontWeight: FontWeight.w500),
),
],
],
),
),
],
),
),
),
),
),
);
}
void getTicketDetails() async {
try {
Utils.showLoading(context);
qrData = await DashboardApiClient().getEmployeeParkingQrCode();
Utils.hideLoading(context);
setState(() {});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}
}

@ -150,7 +150,9 @@ class _MowadhafhiHRRequestState extends State<MowadhafhiHRRequest> {
isReadOnly: false, isReadOnly: false,
onChange: (String value) { onChange: (String value) {
debugPrint(value); debugPrint(value);
description = value; setState(() {
description = value;
});
}, },
), ),
], ],
@ -171,7 +173,7 @@ class _MowadhafhiHRRequestState extends State<MowadhafhiHRRequest> {
} }
bool checkValidation() { bool checkValidation() {
if (selectedServiceType == null || selectedDepartment == null || selectedSection == null || selectedTopic == null) { if (selectedServiceType == null || selectedDepartment == null || selectedSection == null || selectedTopic == null || description == "") {
return false; return false;
} else { } else {
return true; return true;

@ -21,7 +21,11 @@ class ApprovalLevelfragment extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (wFHistory.isNotEmpty) wFHistory = wFHistory.reversed.toList(); if (wFHistory.isNotEmpty) {
//TODO: This COde is Written For Future. If Needed Enable to Filter The Empty Action Requests.
// wFHistory = wFHistory.where((item) => item.action != null && item.action!.isNotEmpty).toList();
wFHistory = wFHistory.reversed.toList();
}
return Container( return Container(
width: double.infinity, width: double.infinity,
height: double.infinity, height: double.infinity,

@ -1,5 +1,4 @@
import 'dart:collection'; import 'dart:collection';
import 'dart:convert';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
@ -33,16 +32,8 @@ class DelegateSheet extends StatefulWidget {
VoidCallback callBackFunc; VoidCallback callBackFunc;
List<NotificationGetRespondAttributesList> getNotificationRespondAttributes; List<NotificationGetRespondAttributesList> getNotificationRespondAttributes;
DelegateSheet({ DelegateSheet(
super.key, {required this.title, required this.apiMode, this.notificationID, this.actionHistoryList, this.wFHistory, required this.callBackFunc, this.getNotificationRespondAttributes = const []});
required this.title,
required this.apiMode,
this.notificationID,
this.actionHistoryList,
this.wFHistory,
required this.callBackFunc,
this.getNotificationRespondAttributes = const <NotificationGetRespondAttributesList>[],
});
@override @override
State<DelegateSheet> createState() => _DelegateSheetState(); State<DelegateSheet> createState() => _DelegateSheetState();
@ -55,8 +46,8 @@ class _DelegateSheetState extends State<DelegateSheet> {
String? selectedFavLetter; String? selectedFavLetter;
String selectedType = "Workflow"; String selectedType = "Workflow";
String inputRes = ""; String inputRes = "";
List<String>? favLetters;
List<GetFavoriteReplacements>? favUsersList; List<GetFavoriteReplacements>? favUsersList;
List<GetFavoriteReplacements>? filteredFavUsersList = <GetFavoriteReplacements>[];
List<ReplacementList>? replacementList; List<ReplacementList>? replacementList;
bool isImageLoaded = false; bool isImageLoaded = false;
@ -66,14 +57,14 @@ class _DelegateSheetState extends State<DelegateSheet> {
super.initState(); super.initState();
if (widget.wFHistory != null) { if (widget.wFHistory != null) {
widget.wFHistory = widget.wFHistory!.reversed.toList(); widget.wFHistory = widget.wFHistory!.reversed.toList();
Set<String?> ids = widget.wFHistory!.map((WFHistory e) => e.employeeID).toSet(); var ids = widget.wFHistory!.map((e) => e.employeeID).toSet();
widget.wFHistory!.retainWhere((WFHistory x) => ids.remove(x.employeeID)); widget.wFHistory!.retainWhere((x) => ids.remove(x.employeeID));
} }
if (widget.actionHistoryList != null) { if (widget.actionHistoryList != null) {
widget.actionHistoryList = widget.actionHistoryList!.reversed.toList(); widget.actionHistoryList = widget.actionHistoryList!.reversed.toList();
Set<String?> ids = widget.actionHistoryList!.map((GetActionHistoryList e) => e.uSERNAME).toSet(); var ids = widget.actionHistoryList!.map((e) => e.uSERNAME).toSet();
widget.actionHistoryList!.retainWhere((GetActionHistoryList x) => ids.remove(x.uSERNAME)); widget.actionHistoryList!.retainWhere((x) => ids.remove(x.uSERNAME));
} }
} }
@ -82,96 +73,36 @@ class _DelegateSheetState extends State<DelegateSheet> {
super.dispose(); super.dispose();
} }
Future<void> fetchFavUsers({bool isNeedLoading = true}) async { Future fetchFavLetters({bool isNeedLoading = true}) async {
favUsersList = <GetFavoriteReplacements>[]; favLetters = [];
filteredFavUsersList = <GetFavoriteReplacements>[];
if (isNeedLoading) Utils.showLoading(context); if (isNeedLoading) Utils.showLoading(context);
List<GetFavoriteReplacements>? favList = await WorkListApiClient().getFavoriteReplacementWithoutImage();
try { List<String> result = [];
List<GetFavoriteReplacements>? favList = await WorkListApiClient().getFavoriteReplacementWithoutImage(); favList!.forEach((element) {
favUsersList = favList; result.add(element.employeeDisplayName![0]);
});
if (favUsersList != null && favUsersList!.isNotEmpty) { favLetters = LinkedHashSet<String>.from(result).toList();
favUsersList!.sort((GetFavoriteReplacements a, GetFavoriteReplacements b) => (a.employeeDisplayName ?? '').toLowerCase().compareTo((b.employeeDisplayName ?? '').toLowerCase())); if (isNeedLoading) Utils.hideLoading(context);
filteredFavUsersList = favUsersList; setState(() {
favLetters!.sort((a, b) {
if (isNeedLoading) Utils.hideLoading(context); return a.toLowerCase().compareTo(b.toLowerCase());
setState(() {}); });
_fetchAndAttachUserImages(); });
} else { return null;
if (isNeedLoading) Utils.hideLoading(context);
setState(() {});
}
} catch (e) {
if (isNeedLoading) Utils.hideLoading(context);
setState(() {});
}
} }
Future<void> _fetchAndAttachUserImages() async { Future fetchFavUsersList({bool isNeedLoading = true}) async {
try { if (isNeedLoading) Utils.showLoading(context);
List<GetFavoriteReplacements>? tempList = await WorkListApiClient().getFavoriteReplacementWithImageNew(""); favUsersList = await WorkListApiClient().getFavoriteReplacementWithImage(selectedFavLetter ?? "");
if (isNeedLoading) Utils.hideLoading(context);
if (tempList != null && tempList.isNotEmpty && favUsersList != null) { setState(() {});
for (GetFavoriteReplacements element in favUsersList!) { fetchFavUsersListNew(isNeedLoading: false);
for (GetFavoriteReplacements element2 in tempList) { return null;
if (element.userName == element2.userName && element2.employeeImage != null && element2.employeeImage!.isNotEmpty) {
element.employeeImage = element2.employeeImage;
}
}
}
filteredFavUsersList = favUsersList;
setState(() {});
}
} catch (e) {}
} }
// Future<void> fetchFavUsers({bool isNeedLoading = true}) async {
// favUsersList = <GetFavoriteReplacements>[];
// if (isNeedLoading) Utils.showLoading(context);
//
// try {
// List<GetFavoriteReplacements>? favList = await WorkListApiClient().getFavoriteReplacementWithoutImage();
// favUsersList = favList;
//
// if (favUsersList != null && favUsersList!.isNotEmpty) {
// setState(() {
// favUsersList!.sort((GetFavoriteReplacements a, GetFavoriteReplacements b) => (a.employeeDisplayName ?? '').toLowerCase().compareTo((b.employeeDisplayName ?? '').toLowerCase()));
// });
// if (isNeedLoading) Utils.hideLoading(context);
//
// List<GetFavoriteReplacements>? tempList = await WorkListApiClient().getFavoriteReplacementWithImageNew("");
// if (tempList != null && tempList.isNotEmpty) {
// for (GetFavoriteReplacements element in favUsersList!) {
// for (GetFavoriteReplacements element2 in tempList) {
// if (element.userName == element2.userName) {
// if (element2.employeeImage != null && element2.employeeImage!.isNotEmpty) {
// element.employeeImage = element2.employeeImage;
// }
// }
// }
// }
// setState(() {});
// }
// }
// } catch (e) {
// // if (isNeedLoading) Utils.hideLoading(context);
// }
// }
// Future fetchFavUsersList({bool isNeedLoading = true}) async {
// if (isNeedLoading) Utils.showLoading(context);
// favUsersList = await WorkListApiClient().getFavoriteReplacementWithImage(selectedFavLetter ?? "");
// if (isNeedLoading) Utils.hideLoading(context);
// setState(() {});
// fetchFavUsersListNew(isNeedLoading: false);
// return null;
// }
Future fetchFavUsersListNew({bool isNeedLoading = true}) async { Future fetchFavUsersListNew({bool isNeedLoading = true}) async {
if (isNeedLoading) Utils.showLoading(context); if (isNeedLoading) Utils.showLoading(context);
filteredFavUsersList = await WorkListApiClient().getFavoriteReplacementWithImageNew(selectedFavLetter ?? ""); favUsersList = await WorkListApiClient().getFavoriteReplacementWithImageNew(selectedFavLetter ?? "");
if (isNeedLoading) Utils.hideLoading(context); if (isNeedLoading) Utils.hideLoading(context);
setState(() { setState(() {
isImageLoaded = true; isImageLoaded = true;
@ -181,10 +112,18 @@ class _DelegateSheetState extends State<DelegateSheet> {
void fetchChangeFav({required String email, required String employeName, required String image, required String userName, bool isFav = false, bool isNeedToRefresh = false}) async { void fetchChangeFav({required String email, required String employeName, required String image, required String userName, bool isFav = false, bool isNeedToRefresh = false}) async {
Utils.showLoading(context); Utils.showLoading(context);
GenericResponseModel model = await WorkListApiClient().changeFavoriteReplacements(email: email, employeName: employeName, image: image, userName: userName, isFav: isFav); favLetters = null;
selectedFavLetter = null;
GenericResponseModel model = await WorkListApiClient().changeFavoriteReplacements(
email: email,
employeName: employeName,
image: image,
userName: userName,
isFav: isFav,
);
if (isNeedToRefresh) { if (isNeedToRefresh) {
await fetchFavUsers(isNeedLoading: false); await fetchFavLetters(isNeedLoading: false);
// if (favUsersList != null) await fetchFavUsersList(isNeedLoading: false); if (favLetters != null) await fetchFavUsersList(isNeedLoading: false);
} }
Utils.hideLoading(context); Utils.hideLoading(context);
@ -198,58 +137,44 @@ class _DelegateSheetState extends State<DelegateSheet> {
userName: selectedType == "Employee Name" ? inputRes : "", userName: selectedType == "Employee Name" ? inputRes : "",
email: selectedType == "Employee Email" ? inputRes : "", email: selectedType == "Employee Email" ? inputRes : "",
); );
if (isNeedLoading) Utils.hideLoading(context); if (isNeedLoading) Utils.hideLoading(context);
setState(() {}); setState(() {});
return null; return null;
} }
Future<void> searchFavUser() async {
if (favUsersList != null && favUsersList!.isNotEmpty) {
// if (inputRes.length > 0) {
filteredFavUsersList =
favUsersList!.where((GetFavoriteReplacements element) {
String query = inputRes.toLowerCase();
return (element.employeeDisplayName != null && element.employeeDisplayName!.toLowerCase().startsWith(query)) ||
(element.userName != null && element.userName!.toLowerCase().contains(query)) ||
(element.emailAddress != null && element.emailAddress!.toLowerCase().contains(query));
}).toList();
// } else {
// filteredFavUsersList = favUsersList;
// }
} else {
filteredFavUsersList = <GetFavoriteReplacements>[];
}
setState(() {});
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SizedBox( return Container(
width: double.infinity, width: double.infinity,
height: MediaQuery.of(context).size.height - 80, height: MediaQuery.of(context).size.height - 80,
child: Column( child: Column(
children: <Widget>[ children: [
Expanded( Expanded(
child: SingleChildScrollView( child: SingleChildScrollView(
child: Padding( child: Padding(
padding: const EdgeInsets.all(21), padding: const EdgeInsets.all(21),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: [
widget.title.toText24(isBold: true), widget.title.toText24(isBold: true),
21.height, 21.height,
LocaleKeys.search.tr().toText16(), LocaleKeys.search.tr().toText16(),
11.height, 11.height,
Column( Column(
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[ children: [
Container( Container(
padding: const EdgeInsets.only(left: 8, right: 4, top: 6, bottom: 6), padding: EdgeInsets.only(left: 8, right: 4, top: 6, bottom: 6),
decoration: BoxDecoration(borderRadius: BorderRadius.circular(15), color: Colors.transparent, border: Border.all(color: const Color(0xffefefef), width: 1)), decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: Colors.transparent,
border: Border.all(
color: Color(0xffefefef),
width: 1,
),
),
child: Row( child: Row(
children: <Widget>[ children: [
Expanded( Expanded(
child: InputWidget( child: InputWidget(
"Search By " + selectedType, "Search By " + selectedType,
@ -260,18 +185,29 @@ class _DelegateSheetState extends State<DelegateSheet> {
verticalPadding: 3, verticalPadding: 3,
isInputTypeNum: selectedType == "Employee ID" ? true : false, isInputTypeNum: selectedType == "Employee ID" ? true : false,
isEnable: isNeedEnableTextField, isEnable: isNeedEnableTextField,
onChange: (String v) { onChange: (v) {
inputRes = v; inputRes = v;
if (selectedType == "Favorites") {
searchFavUser();
}
}, },
), ),
), ),
Container(height: 36, width: 1, color: const Color(0xffE5E5E5)),
Container( Container(
padding: const EdgeInsets.all(8), height: 36,
child: Row(children: <Widget>[selectedType.toText12(), 4.width, const Icon(Icons.keyboard_arrow_down, color: Colors.black, size: 16)]), width: 1,
color: Color(0xffE5E5E5),
),
Container(
padding: EdgeInsets.all(8),
child: Row(
children: [
selectedType.toText12(),
4.width,
const Icon(
Icons.keyboard_arrow_down,
color: Colors.black,
size: 16,
),
],
),
).onPress(() { ).onPress(() {
showMyBottomSheet( showMyBottomSheet(
context, context,
@ -283,17 +219,19 @@ class _DelegateSheetState extends State<DelegateSheet> {
if (value == "Workflow") { if (value == "Workflow") {
setState(() { setState(() {
isNeedEnableTextField = false; isNeedEnableTextField = false;
// selectedFavLetter = null; selectedFavLetter = null;
filteredFavUsersList = null; favLetters = null;
favUsersList = null;
}); });
} else if (value == "Favorites") { } else if (value == "Favorites") {
isNeedEnableTextField = true; isNeedEnableTextField = false;
fetchFavUsers(); fetchFavLetters();
} else { } else {
setState(() { setState(() {
isNeedEnableTextField = true; isNeedEnableTextField = true;
// selectedFavLetter = null; selectedFavLetter = null;
filteredFavUsersList = null; favLetters = null;
favUsersList = null;
}); });
} }
}, },
@ -303,105 +241,143 @@ class _DelegateSheetState extends State<DelegateSheet> {
], ],
), ),
), ),
if (isNeedEnableTextField && selectedType != "Favorites") if (isNeedEnableTextField)
TextButton( TextButton(
onPressed: () { onPressed: () {
fetchUserByInput(); fetchUserByInput();
}, },
child: const Text("Search", style: TextStyle(color: Colors.blue, decoration: TextDecoration.underline)), child: const Text(
), "Search",
style: TextStyle(
color: Colors.blue,
decoration: TextDecoration.underline,
),
),
)
], ],
), ),
if (!isNeedEnableTextField) 12.height, if (!isNeedEnableTextField) 12.height,
Row( Row(
children: <Widget>[ children: [
Expanded( Expanded(
child: SizedBox( child: Container(
width: double.infinity, width: double.infinity,
child: child: selectedFavLetter == null && favLetters != null
// selectedFavLetter == null && favLetters != null ? Container(
// ? Container(width: double.infinity, alignment: Alignment.center, child: "Please select letter to see Fav results".toText12()) width: double.infinity,
// : alignment: Alignment.center,
filteredFavUsersList != null && selectedType == "Favorites" child: "Please select letter to see Fav results".toText12(),
? ListView.separated( )
itemBuilder: (BuildContext context, int index) { : favUsersList != null
return showFavUserItem(filteredFavUsersList![index]); ? ListView.separated(
}, itemBuilder: (context, index) {
separatorBuilder: (BuildContext context, int index) { return showFavUserItem(favUsersList![index]);
return Container(color: MyColors.borderColor, width: double.infinity, height: 1, margin: const EdgeInsets.only(top: 8, bottom: 8)).onPress(() {}); },
}, separatorBuilder: (context, index) {
physics: const NeverScrollableScrollPhysics(), return Container(
shrinkWrap: true, color: MyColors.borderColor,
itemCount: filteredFavUsersList!.length, width: double.infinity,
padding: const EdgeInsets.only(top: 8, bottom: 8), height: 1,
) margin: EdgeInsets.only(top: 8, bottom: 8),
: isNeedEnableTextField && replacementList == null ).onPress(() {});
? Container(width: double.infinity, alignment: Alignment.center, child: "Search User".toText12()) },
: isNeedEnableTextField && replacementList!.isEmpty physics: NeverScrollableScrollPhysics(),
? Container(width: double.infinity, alignment: Alignment.center, child: "No Data Found".toText12()) shrinkWrap: true,
: isNeedEnableTextField itemCount: favUsersList!.length,
? ListView.separated( padding: EdgeInsets.only(top: 8, bottom: 8),
itemBuilder: (BuildContext context, int index) { )
return showInputUserItem(replacementList![index]); : isNeedEnableTextField && replacementList == null
}, ? Container(
separatorBuilder: (BuildContext context, int index) { width: double.infinity,
return Container(color: MyColors.borderE3Color, width: double.infinity, height: 1, margin: const EdgeInsets.only(top: 8, bottom: 8)); alignment: Alignment.center,
}, child: "Search User".toText12(),
physics: const NeverScrollableScrollPhysics(), )
shrinkWrap: true, : isNeedEnableTextField && replacementList!.length == 0
itemCount: replacementList!.length, ? Container(
padding: const EdgeInsets.only(top: 8, bottom: 8), width: double.infinity,
) alignment: Alignment.center,
: (widget.wFHistory != null child: "No Data Found".toText12(),
? ListView.separated( )
itemBuilder: (BuildContext context, int index) { : isNeedEnableTextField
return showItgItem(widget.wFHistory![index]); ? ListView.separated(
}, itemBuilder: (context, index) {
separatorBuilder: (BuildContext context, int index) { return showInputUserItem(replacementList![index]);
return Container(color: MyColors.borderE3Color, width: double.infinity, height: 1, margin: const EdgeInsets.only(top: 8, bottom: 8)); },
}, separatorBuilder: (context, index) {
physics: const NeverScrollableScrollPhysics(), return Container(
shrinkWrap: true, color: MyColors.borderE3Color,
itemCount: widget.wFHistory!.length, width: double.infinity,
padding: const EdgeInsets.only(top: 8, bottom: 8), height: 1,
) margin: EdgeInsets.only(top: 8, bottom: 8),
: ListView.separated( );
itemBuilder: (BuildContext context, int index) { },
return showItem(widget.actionHistoryList![index]); physics: NeverScrollableScrollPhysics(),
}, shrinkWrap: true,
separatorBuilder: (BuildContext context, int index) { itemCount: replacementList!.length,
return Container(color: MyColors.borderE3Color, width: double.infinity, height: 1, margin: const EdgeInsets.only(top: 8, bottom: 8)); padding: EdgeInsets.only(top: 8, bottom: 8),
}, )
physics: const NeverScrollableScrollPhysics(), : (widget.wFHistory != null
shrinkWrap: true, ? ListView.separated(
itemCount: widget.actionHistoryList!.length, itemBuilder: (context, index) {
padding: const EdgeInsets.only(top: 8, bottom: 8), return showItgItem(widget.wFHistory![index]);
)), },
separatorBuilder: (context, index) {
return Container(
color: MyColors.borderE3Color,
width: double.infinity,
height: 1,
margin: EdgeInsets.only(top: 8, bottom: 8),
);
},
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: widget.wFHistory!.length,
padding: EdgeInsets.only(top: 8, bottom: 8),
)
: ListView.separated(
itemBuilder: (context, index) {
return showItem(widget.actionHistoryList![index]);
},
separatorBuilder: (context, index) {
return Container(
color: MyColors.borderE3Color,
width: double.infinity,
height: 1,
margin: EdgeInsets.only(top: 8, bottom: 8),
);
},
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemCount: widget.actionHistoryList!.length,
padding: EdgeInsets.only(top: 8, bottom: 8),
)),
), ),
), ),
// if (favLetters != null) if (favLetters != null)
// SizedBox( Container(
// width: 30, width: 30,
// // color: Colors.red, // color: Colors.red,
// child: ListView.separated( child: ListView.separated(
// itemBuilder: (BuildContext context, int index) { itemBuilder: (context, index) {
// return Container( return Container(
// padding: const EdgeInsets.all(8), padding: EdgeInsets.all(8),
// alignment: Alignment.center, alignment: Alignment.center,
// child: favLetters![index].toText14(color: selectedFavLetter == favLetters![index] ? MyColors.gradiantStartColor : Colors.black), child: favLetters![index].toText14(color: selectedFavLetter == favLetters![index] ? MyColors.gradiantStartColor : Colors.black),
// ).onPress(() { ).onPress(() {
// selectedFavLetter = favLetters![index].toUpperCase(); selectedFavLetter = favLetters![index].toUpperCase();
// fetchFavUsersList(); fetchFavUsersList();
// }); });
// }, },
// separatorBuilder: (BuildContext context, int index) { separatorBuilder: (context, index) {
// return const SizedBox(height: 0); return SizedBox(
// }, height: 0,
// physics: const NeverScrollableScrollPhysics(), );
// shrinkWrap: true, },
// itemCount: favLetters!.length, physics: NeverScrollableScrollPhysics(),
// ), shrinkWrap: true,
// ), itemCount: favLetters!.length,
),
),
], ],
), ),
], ],
@ -409,15 +385,22 @@ class _DelegateSheetState extends State<DelegateSheet> {
), ),
), ),
), ),
Container(width: double.infinity, height: 1, color: MyColors.borderColor), Container(
width: double.infinity,
height: 1,
color: MyColors.borderColor,
),
DefaultButton( DefaultButton(
"Cancel", "Cancel",
() { () {
Navigator.pop(context); Navigator.pop(context);
}, },
textColor: Colors.black, textColor: Colors.black,
colors: const <Color>[Color(0xffE6E6E6), Color(0xffE6E6E6)], colors: [
).insideContainer, Color(0xffE6E6E6),
Color(0xffE6E6E6),
],
).insideContainer
], ],
), ),
); );
@ -427,22 +410,25 @@ class _DelegateSheetState extends State<DelegateSheet> {
return InkWell( return InkWell(
onTap: () { onTap: () {
Navigator.pop(context); Navigator.pop(context);
showMyBottomSheet( showMyBottomSheet(context,
context, callBackFunc: widget.callBackFunc,
callBackFunc: widget.callBackFunc, child: SelectedItemSheet(
child: SelectedItemSheet( "Comment",
"Comment", apiMode: widget.apiMode,
apiMode: widget.apiMode, actionHistoryList: actionHistory,
actionHistoryList: actionHistory, notificationID: widget.notificationID,
notificationID: widget.notificationID, isITGRequest: widget.wFHistory != null,
isITGRequest: widget.wFHistory != null, getNotificationRespondAttributes: widget.getNotificationRespondAttributes,
getNotificationRespondAttributes: widget.getNotificationRespondAttributes, ));
),
);
}, },
child: Row( child: Row(
children: <Widget>[ children: [
CircularAvatar(url: actionHistory.eMPLOYEEIMAGE ?? "", height: 30, width: 30, isImageBase64: true), CircularAvatar(
url: actionHistory.eMPLOYEEIMAGE ?? "",
height: 30,
width: 30,
isImageBase64: true,
),
9.width, 9.width,
(actionHistory.nAME ?? "").toText12().expanded, (actionHistory.nAME ?? "").toText12().expanded,
IconButton( IconButton(
@ -458,8 +444,12 @@ class _DelegateSheetState extends State<DelegateSheet> {
isFav: true, isFav: true,
); );
}, },
icon: Icon(Icons.star, size: 16, color: (actionHistory.isFavorite ?? false) ? MyColors.yellowColor : MyColors.borderColor), icon: Icon(
), Icons.star,
size: 16,
color: (actionHistory.isFavorite ?? false) ? MyColors.yellowColor : MyColors.borderColor,
),
)
], ],
), ),
); );
@ -469,18 +459,25 @@ class _DelegateSheetState extends State<DelegateSheet> {
return InkWell( return InkWell(
onTap: () { onTap: () {
Navigator.pop(context); Navigator.pop(context);
showMyBottomSheet( showMyBottomSheet(context,
context, callBackFunc: widget.callBackFunc,
callBackFunc: widget.callBackFunc, child: SelectedItgItemSheet(
child: SelectedItgItemSheet( "Comment",
"Comment", apiMode: widget.apiMode,
apiMode: widget.apiMode, wfHistory: wfHistory,
wfHistory: wfHistory, // notificationID: widget.notificationID,
// notificationID: widget.notificationID, ));
),
);
}, },
child: Row(children: <Widget>[CircularAvatar(height: 30, width: 30), 9.width, (wfHistory.name ?? "").toText12().expanded]), child: Row(
children: [
CircularAvatar(
height: 30,
width: 30,
),
9.width,
(wfHistory.name ?? "").toText12().expanded,
],
),
); );
} }
@ -488,31 +485,47 @@ class _DelegateSheetState extends State<DelegateSheet> {
return InkWell( return InkWell(
onTap: () { onTap: () {
Navigator.pop(context); Navigator.pop(context);
showMyBottomSheet( showMyBottomSheet(context,
context, callBackFunc: widget.callBackFunc,
callBackFunc: widget.callBackFunc, child: SelectedItemSheet(
child: SelectedItemSheet( "Comment",
"Comment", apiMode: widget.apiMode,
apiMode: widget.apiMode, favoriteReplacements: actionHistory,
favoriteReplacements: actionHistory, notificationID: widget.notificationID,
notificationID: widget.notificationID, isITGRequest: widget.wFHistory != null,
isITGRequest: widget.wFHistory != null, getNotificationRespondAttributes: widget.getNotificationRespondAttributes,
getNotificationRespondAttributes: widget.getNotificationRespondAttributes, ));
),
);
}, },
child: Row( child: Row(
children: <Widget>[ children: [
actionHistory.employeeImage != "" && actionHistory.employeeImage != null actionHistory.employeeImage != ""
? CircularAvatar(url: actionHistory.employeeImage, height: 40, width: 40, isImageBase64: (actionHistory.employeeImage != null || actionHistory.employeeImage!.isNotEmpty) ? true : false) ? CircularAvatar(
url: actionHistory.employeeImage,
height: 40,
width: 40,
isImageBase64: (actionHistory.employeeImage != null || actionHistory.employeeImage!.isNotEmpty) ? true : false,
)
: isImageLoaded : isImageLoaded
? CircularAvatar(height: 40, width: 40, isImageBase64: false) ? CircularAvatar(
height: 40,
width: 40,
isImageBase64: false,
)
: ClipRRect( : ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(50)), borderRadius: const BorderRadius.all(
child: Image.network("https://play-lh.googleusercontent.com/NPo88ojmhah4HDiposucJmfQIop4z4xc8kqJK9ITO9o-yCab2zxIp7PPB_XPj2iUojo", fit: BoxFit.cover, height: 40, width: 40).toShimmer(), Radius.circular(50),
), ),
child: Image.network(
"https://play-lh.googleusercontent.com/NPo88ojmhah4HDiposucJmfQIop4z4xc8kqJK9ITO9o-yCab2zxIp7PPB_XPj2iUojo",
fit: BoxFit.cover,
height: 40,
width: 40,
).toShimmer(),
),
16.width, 16.width,
Expanded(child: (actionHistory.employeeDisplayName ?? "").toText12()), Expanded(
child: (actionHistory.employeeDisplayName ?? "").toText12(),
),
IconButton( IconButton(
onPressed: () { onPressed: () {
fetchChangeFav( fetchChangeFav(
@ -524,8 +537,12 @@ class _DelegateSheetState extends State<DelegateSheet> {
isNeedToRefresh: true, isNeedToRefresh: true,
); );
}, },
icon: const Icon(Icons.star, size: 16, color: MyColors.yellowColor), icon: Icon(
), Icons.star,
size: 16,
color: MyColors.yellowColor,
),
)
], ],
), ),
); );
@ -535,24 +552,29 @@ class _DelegateSheetState extends State<DelegateSheet> {
return InkWell( return InkWell(
onTap: () { onTap: () {
Navigator.pop(context); Navigator.pop(context);
showMyBottomSheet( showMyBottomSheet(context,
context, callBackFunc: widget.callBackFunc,
callBackFunc: widget.callBackFunc, child: SelectedItemSheet(
child: SelectedItemSheet( LocaleKeys.comments.tr(),
LocaleKeys.comments.tr(), apiMode: widget.apiMode,
apiMode: widget.apiMode, replacementList: actionHistory,
replacementList: actionHistory, notificationID: widget.notificationID,
notificationID: widget.notificationID, isITGRequest: widget.wFHistory != null,
isITGRequest: widget.wFHistory != null, getNotificationRespondAttributes: widget.getNotificationRespondAttributes,
getNotificationRespondAttributes: widget.getNotificationRespondAttributes, ));
),
);
}, },
child: Row( child: Row(
children: <Widget>[ children: [
CircularAvatar(url: actionHistory.employeeImage, height: 30, width: 30, isImageBase64: actionHistory.employeeImage != null ? true : false), CircularAvatar(
url: actionHistory.employeeImage,
height: 30,
width: 30,
isImageBase64: actionHistory.employeeImage != null ? true : false,
),
16.width, 16.width,
Expanded(child: (actionHistory.employeeDisplayName ?? "").toText12()), Expanded(
child: (actionHistory.employeeDisplayName ?? "").toText12(),
),
IconButton( IconButton(
onPressed: () { onPressed: () {
actionHistory.isFavorite = !(actionHistory.isFavorite ?? false); actionHistory.isFavorite = !(actionHistory.isFavorite ?? false);
@ -565,8 +587,12 @@ class _DelegateSheetState extends State<DelegateSheet> {
isNeedToRefresh: false, isNeedToRefresh: false,
); );
}, },
icon: Icon(Icons.star, size: 16, color: (actionHistory.isFavorite ?? false) ? MyColors.yellowColor : MyColors.borderColor), icon: Icon(
), Icons.star,
size: 16,
color: (actionHistory.isFavorite ?? false) ? MyColors.yellowColor : MyColors.borderColor,
),
)
], ],
), ),
); );

@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
void showMyBottomSheet(BuildContext context, {required Widget child, required VoidCallback callBackFunc, String? type}) { void showMyBottomSheet(BuildContext context, {required Widget child, required VoidCallback callBackFunc, String? type}) {
@ -65,14 +66,7 @@ void showMyBottomSheet(BuildContext context, {required Widget child, required Vo
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text( (title ?? "Details").toText14(isBold: true, color: Color(0xff2BB8A6)),
title ?? "Details",
style: const TextStyle(
color: Color(0xff2BB8A6),
fontSize: 14,
fontWeight: FontWeight.bold,
),
),
IconButton( IconButton(
icon: const Icon(Icons.close, color: Colors.black54, size: 20), icon: const Icon(Icons.close, color: Colors.black54, size: 20),
onPressed: () { onPressed: () {
@ -83,20 +77,12 @@ void showMyBottomSheet(BuildContext context, {required Widget child, required Vo
), ),
const Divider(height: 1, color: Colors.grey), const Divider(height: 1, color: Colors.grey),
const SizedBox(height: 12), const SizedBox(height: 12),
// ---- Scrollable Content ---- // ---- Scrollable Content ----
Expanded( Expanded(
child: SingleChildScrollView( child: SingleChildScrollView(
child: Text( child: ((val?.isEmpty ?? true)
(val?.isEmpty ?? true) ? "--"
? "--" : val.toString()).toText14(),
: val.toString(),
style: TextStyle(
color: MyColors.normalTextColor,
fontSize: 14,
height: 1.4,
),
),
), ),
), ),
SizedBox( SizedBox(
@ -112,7 +98,7 @@ void showMyBottomSheet(BuildContext context, {required Widget child, required Vo
onPressed: () { onPressed: () {
Navigator.pop(context); Navigator.pop(context);
}, },
child: Text( child: Text(
LocaleKeys.close.tr(), LocaleKeys.close.tr(),
style: const TextStyle( style: const TextStyle(
color: Colors.white, color: Colors.white,

@ -46,7 +46,7 @@ class _SsoLoginWebViewState extends State<SsoLoginWebView> {
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<body onload="document.forms[0].submit()"> <body onload="document.forms[0].submit()">
<form method="POST" action="https://ek.techmaster.in/SSO/HMG"> <form method="POST" action="https://Paxes-release.techmaster.in/SSO/HMG">
<input type="hidden" name="JWTToken" value="${widget.jwtToken}" /> <input type="hidden" name="JWTToken" value="${widget.jwtToken}" />
</form> </form>
<h1>Redirecting...</h1> <h1>Redirecting...</h1>

@ -17,8 +17,8 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# Read more about iOS versioning at # Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 3.6.8+300078 #version: 3.7.1+300081
#version: 3.9.1+1 version: 3.9.3+1
environment: environment:
sdk: ^3.7.0 sdk: ^3.7.0
@ -56,7 +56,8 @@ dependencies:
logger: ^1.1.0 logger: ^1.1.0
flutter_countdown_timer: ^4.1.0 flutter_countdown_timer: ^4.1.0
platform_device_id_plus: ^1.0.7 # platform_device_id_plus: ^1.0.7
mobile_device_identifier: ^0.0.3
device_info_plus: ^11.5.0 device_info_plus: ^11.5.0
image_picker: ^1.1.2 image_picker: ^1.1.2
file_picker: ^8.3.1 file_picker: ^8.3.1
@ -139,12 +140,13 @@ dependencies:
#todo its for temporary purpose, later will remove this. #todo its for temporary purpose, later will remove this.
dotted_border: ^2.0.0+3 dotted_border: ^2.0.0+3
webview_flutter: ^4.13.0 webview_flutter: ^4.13.0
nfc_manager: ^3.2.0
# saf: ^1.0.3+4 # saf: ^1.0.3+4
dependency_overrides: dependency_overrides:
nfc_manager: ^3.2.0 # nfc_manager: 3.2.0
# firebase_core_platform_interface: 4.5.1 # firebase_core_platform_interface: 4.5.1

Loading…
Cancel
Save