From 856395f273db53f22333244135c2fb75505fecc0 Mon Sep 17 00:00:00 2001 From: faizatflutter Date: Fri, 30 Jan 2026 23:29:32 +0500 Subject: [PATCH] android 14 stable version --- lib/api/api_client.dart | 29 +++++++++----- lib/constants/app_constants.dart | 2 +- lib/main.dart | 12 +++--- lib/models/generic_response_model.dart | 3 ++ lib/models/global_config_model.dart | 24 ++++++------ lib/repositories/screen_details_repo.dart | 47 +++++++++++++++-------- 6 files changed, 75 insertions(+), 42 deletions(-) diff --git a/lib/api/api_client.dart b/lib/api/api_client.dart index 44489d6..a2fed80 100644 --- a/lib/api/api_client.dart +++ b/lib/api/api_client.dart @@ -2,11 +2,12 @@ import 'dart:async'; import 'dart:convert'; import 'dart:developer'; import 'dart:io'; + import 'package:flutter/foundation.dart'; import 'package:hmg_qline/services/logger_service.dart'; +import 'package:hmg_qline/utilities/api_exception.dart'; import 'package:http/http.dart' as http; import 'package:http/io_client.dart'; -import 'package:hmg_qline/utilities/api_exception.dart'; typedef FactoryConstructor = U Function(dynamic); @@ -14,11 +15,14 @@ abstract class ApiClient { Future postJsonForObject(FactoryConstructor factoryConstructor, String url, T jsonObject, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); - Future postJsonForResponse(String url, T jsonObject, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); + Future postJsonForResponse(String url, T jsonObject, + {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); - Future getJsonForObject(FactoryConstructor factoryConstructor, String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); + Future getJsonForObject(FactoryConstructor factoryConstructor, String url, + {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); - Future getJsonForResponse(String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); + Future getJsonForResponse(String url, + {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}); } class ApiClientImp implements ApiClient { @@ -34,7 +38,8 @@ class ApiClientImp implements ApiClient { headers0.addAll(headers); } - var response = await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: headers0, retryTimes: retryTimes); + var response = + await postJsonForResponse(url, jsonObject, token: token, queryParameters: queryParameters, headers: headers0, retryTimes: retryTimes); try { if (!kReleaseMode) { log("statusCode:${response.statusCode}"); @@ -49,7 +54,8 @@ class ApiClientImp implements ApiClient { } @override - Future postJsonForResponse(String url, T jsonObject, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { + Future postJsonForResponse(String url, T jsonObject, + {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { String? requestBody; if (jsonObject != null) { requestBody = jsonEncode(jsonObject); @@ -96,7 +102,9 @@ class ApiClientImp implements ApiClient { loggerService.logInfo(jsonDecode(requestBody).toString()); loggerService.logInfo("------Response------"); loggerService.logInfo(jsonDecode(response.body).toString()); + } + if (response.statusCode >= 200 && response.statusCode < 500) { var jsonData = jsonDecode(response.body); if (jsonData["StatusMessage"] != null && jsonData["StatusMessage"] == "Unauthorized user attempt to access API") { @@ -150,7 +158,8 @@ class ApiClientImp implements ApiClient { } } - Future _post(url, {Map? headers, body, Encoding? encoding}) => _withClient((client) => client.post(url, headers: headers, body: body, encoding: encoding)); + Future _post(url, {Map? headers, body, Encoding? encoding}) => + _withClient((client) => client.post(url, headers: headers, body: body, encoding: encoding)); @override Future getJsonForObject(FactoryConstructor factoryConstructor, String url, @@ -170,7 +179,8 @@ class ApiClientImp implements ApiClient { } @override - Future getJsonForResponse(String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { + Future getJsonForResponse(String url, + {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { if (headers == null) { headers = {'Content-Type': 'application/json'}; } else { @@ -181,7 +191,8 @@ class ApiClientImp implements ApiClient { bool isFirstCall = true; - Future _getForResponse(String url, {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { + Future _getForResponse(String url, + {String? token, Map? queryParameters, Map? headers, int retryTimes = 0}) async { try { var headers0 = {}; if (token != null) { diff --git a/lib/constants/app_constants.dart b/lib/constants/app_constants.dart index ae2936e..1f500a7 100644 --- a/lib/constants/app_constants.dart +++ b/lib/constants/app_constants.dart @@ -178,7 +178,7 @@ class ApiConstants { static String baseUrlUat = 'https://ms.hmg.com/nscapi'; // UAT static String baseUrlDev = 'https://ms.hmg.com/nscapi2'; // DEV - static String baseUrl = baseUrlLive; + static String baseUrl = baseUrlDev; static String baseUrlHub = '$baseUrl/PatientCallingHub'; static String baseUrlApi = '$baseUrl/api'; static String baseUrlApiGen = '$baseUrl/api/Gen'; diff --git a/lib/main.dart b/lib/main.dart index ade9940..d931149 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,17 +1,17 @@ -import 'dart:developer'; import 'dart:async'; +import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:hmg_qline/view_models/screen_config_view_model.dart'; -import 'package:provider/provider.dart'; import 'package:hmg_qline/config/dependency_injection.dart'; import 'package:hmg_qline/config/routes.dart'; import 'package:hmg_qline/constants/app_constants.dart'; +import 'package:hmg_qline/services/crash_handler_service.dart'; import 'package:hmg_qline/view_models/queuing_view_model.dart'; +import 'package:hmg_qline/view_models/screen_config_view_model.dart'; import 'package:hmg_qline/views/view_helpers/size_config.dart'; +import 'package:provider/provider.dart'; import 'package:wakelock_plus/wakelock_plus.dart'; -import 'package:hmg_qline/services/crash_handler_service.dart'; void main() { runZonedGuarded(() async { @@ -45,7 +45,9 @@ class MyApp extends StatelessWidget { return OrientationBuilder(builder: (context, orientation) { SizeConfig().init(constraints, orientation); SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky); - SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + if (!isAndroid14) { + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + } return MultiProvider( providers: [ ChangeNotifierProvider( diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index e6c1827..d65fbe9 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -1,3 +1,5 @@ +import 'dart:developer'; + class GenericRespModel { GenericRespModel({ this.data, @@ -12,6 +14,7 @@ class GenericRespModel { String? message; factory GenericRespModel.fromJson(Map json) { + log("jsonjsonjosn: $json"); if (json.containsKey('StatusMessage')) { if ((json['StatusMessage'] as String).contains('Internal server error')) { // Utils.showToast("${json['StatusMessage']}"); diff --git a/lib/models/global_config_model.dart b/lib/models/global_config_model.dart index 60820db..1f3c59a 100644 --- a/lib/models/global_config_model.dart +++ b/lib/models/global_config_model.dart @@ -1,4 +1,5 @@ import 'dart:ui'; + import 'package:hmg_qline/constants/app_constants.dart'; import 'package:hmg_qline/models/kiosk_language_config_model.dart'; import 'package:hmg_qline/models/kiosk_queue_model.dart'; @@ -270,22 +271,23 @@ class GlobalConfigurationsModel { kioskQueueList = []; } if (json['kioskConfig'] != null) { - kioskLanguageConfigList = List.from(json['kioskConfig'].map((kioskQueueJson) => KioskLanguageConfigModel.fromJson(kioskQueueJson))); + kioskLanguageConfigList = + List.from(json['kioskConfig'].map((kioskQueueJson) => KioskLanguageConfigModel.fromJson(kioskQueueJson))); } else { kioskLanguageConfigList = []; } // Default to false; actual value (based on device IP) is set in ViewModel after loading config isFromTakhasusiMain = false; - vitalSignTextEng = json['vitalSignText']; - doctorTextEng = json['doctorText']; - procedureTextEng = json['procedureText']; - vaccinationTextEng = json['vaccinationText']; - nebulizationTextEng = json['nebulizationText']; - callForVitalSignTextEng = json['callForVitalSignText']; - callForDoctorTextEng = json['callForDoctorText']; - callForProcedureTextEng = json['callForProcedureText']; - callForVaccinationTextEng = json['callForVaccinationText']; - callForNebulizationTextEng = json['callForNebulizationText']; + vitalSignTextEng = json['vitalSignText'] ?? "Vital Sign"; + doctorTextEng = json['doctorText'] ?? "Doctor"; + procedureTextEng = json['procedureText'] ?? "Procedure"; + vaccinationTextEng = json['vaccinationText'] ?? "Vaccination"; + nebulizationTextEng = json['nebulizationText'] ?? "Nebulization"; + callForVitalSignTextEng = json['callForVitalSignText'] ?? "Call for Vital Sign"; + callForDoctorTextEng = json['callForDoctorText'] ?? "Call for Doctor"; + callForProcedureTextEng = json['callForProcedureText'] ?? "Call for Procedure"; + callForVaccinationTextEng = json['callForVaccinationText'] ?? "Call for Vaccination"; + callForNebulizationTextEng = json['callForNebulizationText'] ?? "Call for Nebulization"; vitalSignTextArb = json['vitalSignTextAr'] ?? "غرفة العلامات الحيوية"; doctorTextArb = json['doctorTextAr'] ?? " غرفة الطبيب"; diff --git a/lib/repositories/screen_details_repo.dart b/lib/repositories/screen_details_repo.dart index 86e6bfb..0a3db26 100644 --- a/lib/repositories/screen_details_repo.dart +++ b/lib/repositories/screen_details_repo.dart @@ -1,3 +1,5 @@ +import 'dart:developer'; + import 'package:hmg_qline/api/api_client.dart'; import 'package:hmg_qline/constants/app_constants.dart'; import 'package:hmg_qline/models/generic_response_model.dart'; @@ -37,7 +39,7 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo { @override Future getGlobalScreenConfigurations({required String ipAddress}) async { - try { + // try { var params = { "ipAddress": ipAddress.toString(), "apiKey": AppConstants.apiKey.toString(), @@ -47,18 +49,24 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo { ApiConstants.commonConfigGet, params, ); - List globalConfigurationsModel = List.generate(genericModel.data.length, (index) => GlobalConfigurationsModel.fromJson(json: genericModel.data[index])); + List globalConfigurationsModel = + List.generate(genericModel.data.length, (index) => GlobalConfigurationsModel.fromJson(json: genericModel.data[index])); if (globalConfigurationsModel.isNotEmpty) { - loggerService.logToFile(message: globalConfigurationsModel.toString(), type: LogTypeEnum.data, source: "getGlobalScreenConfigurations-> screen_details_repo.dart"); + loggerService.logToFile( + message: globalConfigurationsModel.toString(), + type: LogTypeEnum.data, + source: "getGlobalScreenConfigurations-> screen_details_repo.dart"); return globalConfigurationsModel.first; } return null; - } catch (e) { - loggerService.logError(e.toString()); - loggerService.logToFile(message: e.toString(), source: "getGlobalScreenConfigurations-> screen_details_repo.dart", type: LogTypeEnum.error); - InfoComponents.showToast(e.toString()); - return null; - } + // } catch (e) { + // log("record:"); + // log(e.toString()); + // loggerService.logError(e.toString()); + // loggerService.logToFile(message: e.toString(), source: "getGlobalScreenConfigurations-> screen_details_repo.dart", type: LogTypeEnum.error); + // InfoComponents.showToast(e.toString()); + // return null; + // } } @override @@ -105,7 +113,8 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo { ); genericRespModel.data = KioskPatientTicket.fromJson(genericRespModel.data); - loggerService.logToFile(message: genericRespModel.toString(), source: "createTicketFromKiosk-> screen_details_repo.dart", type: LogTypeEnum.data); + loggerService.logToFile( + message: genericRespModel.toString(), source: "createTicketFromKiosk-> screen_details_repo.dart", type: LogTypeEnum.data); return genericRespModel; } catch (e) { @@ -142,9 +151,11 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo { body, ); - List weathersWidgetModel = List.generate(genericRespModel.data.length, (index) => WeathersWidgetModel.fromJson(genericRespModel.data[index])); + List weathersWidgetModel = + List.generate(genericRespModel.data.length, (index) => WeathersWidgetModel.fromJson(genericRespModel.data[index])); 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 constantWeathersWidgetModel; @@ -166,9 +177,11 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo { body, ); - List prayersWidgetModel = List.generate(genericRespModel.data.length, (index) => PrayersWidgetModel.fromJson(genericRespModel.data[index])); + List prayersWidgetModel = + List.generate(genericRespModel.data.length, (index) => PrayersWidgetModel.fromJson(genericRespModel.data[index])); if (prayersWidgetModel.isNotEmpty) { - loggerService.logToFile(message: prayersWidgetModel.toString(), source: "getPrayerDetailsByLatLong-> screen_details_repo.dart", type: LogTypeEnum.data); + loggerService.logToFile( + message: prayersWidgetModel.toString(), source: "getPrayerDetailsByLatLong-> screen_details_repo.dart", type: LogTypeEnum.data); return prayersWidgetModel.first; } @@ -193,7 +206,8 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo { List rssFeedModel = List.generate(genericRespModel.data.length, (index) => RssFeedModel.fromJson(genericRespModel.data[index])); if (rssFeedModel.isNotEmpty) { - loggerService.logToFile(message: rssFeedModel.toString(), source: "getRssFeedDetailsByLanguageID-> screen_details_repo.dart", type: LogTypeEnum.data); + loggerService.logToFile( + message: rssFeedModel.toString(), source: "getRssFeedDetailsByLanguageID-> screen_details_repo.dart", type: LogTypeEnum.data); return rssFeedModel.first; } @@ -229,7 +243,8 @@ class ScreenDetailsRepoImp implements ScreenDetailsRepo { } @override - Future acknowledgeTicketForAppointment({required int ticketId, required String ipAddress, required CallTypeEnum callTypeEnum}) async { + Future acknowledgeTicketForAppointment( + {required int ticketId, required String ipAddress, required CallTypeEnum callTypeEnum}) async { try { var params = { "id": ticketId.toString(),