From 542de41a820dbeaacd0bc1315f3a97ab187e73e7 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Mon, 8 Sep 2025 17:18:36 +0300 Subject: [PATCH] updates & fixes --- lib/core/api/api_client.dart | 4 +- lib/core/app_state.dart | 6 +-- lib/core/utils/request_utils.dart | 2 +- lib/extensions/string_extensions.dart | 6 +-- .../authentication_view_model.dart | 8 ++-- ...ctivation_code_register_request_model.dart | 4 +- .../widgets/otp_verification_screen.dart | 1 + .../authentication/saved_login_screen.dart | 40 ++++++++++--------- lib/presentation/home/landing_page.dart | 5 +-- lib/routes/app_routes.dart | 3 +- lib/widgets/custom_tab_bar.dart | 2 +- 11 files changed, 42 insertions(+), 39 deletions(-) diff --git a/lib/core/api/api_client.dart b/lib/core/api/api_client.dart index 6e33aa8..425f1bd 100644 --- a/lib/core/api/api_client.dart +++ b/lib/core/api/api_client.dart @@ -166,8 +166,8 @@ class ApiClientImp implements ApiClient { body['Latitude'] = _appState.userLat.toString(); body['Longitude'] = _appState.userLong.toString(); body['DeviceTypeID'] = _appState.deviceTypeID; - if (_appState.appLoginTokenID.isNotEmpty) { - body['LogInTokenID'] = _appState.appLoginTokenID; + if (_appState.appAuthToken.isNotEmpty) { + body[_appState.isAuthenticated ? 'TokenID' : 'LogInTokenID'] = _appState.appAuthToken; } // body['TokenID'] = "@dm!n"; diff --git a/lib/core/app_state.dart b/lib/core/app_state.dart index 876cb0b..e5537c6 100644 --- a/lib/core/app_state.dart +++ b/lib/core/app_state.dart @@ -62,9 +62,9 @@ class AppState { SelectDeviceByImeiRespModelElement? get getSelectDeviceByImeiRespModelElement => _selectDeviceByImeiRespModelElement; - String appLoginTokenID = ""; - - set setAppLoginTokenID(v) => appLoginTokenID = v; + // String appLoginTokenID = ""; + // + // set setAppLoginTokenID(v) => appLoginTokenID = v; String deviceToken = ""; diff --git a/lib/core/utils/request_utils.dart b/lib/core/utils/request_utils.dart index 5d6819a..1045d9c 100644 --- a/lib/core/utils/request_utils.dart +++ b/lib/core/utils/request_utils.dart @@ -90,7 +90,7 @@ class RequestUtils { } else { request.patientID = 0; request.searchType = 1; - request.patientIdentificationID = request.nationalID = (nationIdText.isNotEmpty ? nationIdText : '0') as int?; + request.patientIdentificationID = request.nationalID = (nationIdText.isNotEmpty ? int.parse(nationIdText) : 0); } request.isRegister = false; } diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index 12f06b4..cb6ce72 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -138,19 +138,19 @@ extension EmailValidator on String { decoration: isUnderLine ? TextDecoration.underline : null), ); - Widget toText14({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, FontWeight? weight, int? maxlines}) => Text( + Widget toText14({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, FontWeight? weight, int? maxlines, double? letterSpacing = -1}) => Text( this, textAlign: isCenter ? TextAlign.center : null, maxLines: maxlines, style: TextStyle( color: color ?? AppColors.blackColor, fontSize: 14.fSize, - letterSpacing: -1, + letterSpacing: letterSpacing, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal), decoration: isUnderLine ? TextDecoration.underline : null), ); - Widget toText15({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, FontWeight? weight, int? maxlines, double? letterSpacing = -0.4,}) => Text( + Widget toText15({Color? color, bool isUnderLine = false, bool isBold = false, bool isCenter = false, FontWeight? weight, int? maxlines, double? letterSpacing = -1}) => Text( this, textAlign: isCenter ? TextAlign.center : null, maxLines: maxlines, diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart index ee2dee0..6a2ea74 100644 --- a/lib/features/authentication/authentication_view_model.dart +++ b/lib/features/authentication/authentication_view_model.dart @@ -272,7 +272,7 @@ class AuthenticationViewModel extends ChangeNotifier { await _dialogService.showErrorBottomSheet(message: apiResponse.errorMessage ?? "ErrorEmpty", onOkPressed: () {}); } else if (apiResponse.messageStatus == 1) { if (apiResponse.data['isSMSSent']) { - _appState.setAppLoginTokenID = apiResponse.data['LogInTokenID']; + _appState.setAppAuthToken = apiResponse.data['LogInTokenID']; sendActivationCode( otpTypeEnum: otpTypeEnum, phoneNumber: phoneNumberController.text, @@ -364,7 +364,7 @@ class AuthenticationViewModel extends ChangeNotifier { otpTypeEnum: otpTypeEnum, deviceToken: _appState.deviceToken, patientOutSA: true, - loginTokenID: _appState.appLoginTokenID, + loginTokenID: _appState.appAuthToken, registeredData: null, nationIdText: nationalIdController.text, countryCode: selectedCountrySignup.countryCode, @@ -412,7 +412,7 @@ class AuthenticationViewModel extends ChangeNotifier { _appState.setAuthenticatedUser(activation.list!.first); } _appState.setUserBloodGroup = (activation.patientBlodType ?? ""); - _appState.setAppLoginTokenID = activation.authenticationTokenId; + _appState.setAppAuthToken = activation.authenticationTokenId; final request = RequestUtils.getAuthanticatedCommonRequest().toJson(); bool isUserAgreedBefore = await checkIfUserAgreedBefore(request: request); clearDefaultInputValues(); @@ -574,7 +574,7 @@ class AuthenticationViewModel extends ChangeNotifier { chekUserNHICData(request: request); } else { print("=======OUT SA======="); - _appState.setAppLoginTokenID = response['LogInTokenID']; + _appState.setAppAuthToken = response['LogInTokenID']; sendActivationCode( otpTypeEnum: OTPTypeEnumExtension.fromInt(request["OTP_SendType"]), nationalIdOrFileNumber: request["PatientIdentificationID"].toString(), diff --git a/lib/features/authentication/models/request_models/check_activation_code_register_request_model.dart b/lib/features/authentication/models/request_models/check_activation_code_register_request_model.dart index d752a13..ebae7bc 100644 --- a/lib/features/authentication/models/request_models/check_activation_code_register_request_model.dart +++ b/lib/features/authentication/models/request_models/check_activation_code_register_request_model.dart @@ -9,8 +9,8 @@ class CheckActivationCodeRegisterReq { String? logInTokenID; int? searchType; int? patientID; - String? nationalID; - String? patientIdentificationID; + int? nationalID; + int? patientIdentificationID; String? activationCode; bool? isSilentLogin; double? versionID; diff --git a/lib/features/authentication/widgets/otp_verification_screen.dart b/lib/features/authentication/widgets/otp_verification_screen.dart index caaf535..e009593 100644 --- a/lib/features/authentication/widgets/otp_verification_screen.dart +++ b/lib/features/authentication/widgets/otp_verification_screen.dart @@ -108,6 +108,7 @@ class _OTPVerificationScreenState extends State { @override Widget build(BuildContext context) { return Scaffold( + backgroundColor: AppColors.scaffoldBgColor, appBar: CustomAppBar( hideLogoAndLang: true, onBackPressed: () { diff --git a/lib/presentation/authentication/saved_login_screen.dart b/lib/presentation/authentication/saved_login_screen.dart index fe2c760..357daa6 100644 --- a/lib/presentation/authentication/saved_login_screen.dart +++ b/lib/presentation/authentication/saved_login_screen.dart @@ -18,26 +18,25 @@ import 'package:hmg_patient_app_new/widgets/bottomsheet/generic_bottom_sheet.dar import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; import 'package:provider/provider.dart'; - class SavedLogin extends StatefulWidget { - - - const SavedLogin({Key? key}) : super(key: key); + const SavedLogin({Key? key}) : super(key: key); @override _SavedLogin createState() => _SavedLogin(); } class _SavedLogin extends State { - LoginTypeEnum loginType = LoginTypeEnum.sms; late AuthenticationViewModel authVm; late AppState appState; + @override void initState() { authVm = context.read(); appState = getIt.get(); - authVm.phoneNumberController.text = appState.getSelectDeviceByImeiRespModelElement!.mobile!; + authVm.phoneNumberController.text = appState.getSelectDeviceByImeiRespModelElement!.mobile!.startsWith("0") + ? appState.getSelectDeviceByImeiRespModelElement!.mobile!.replaceFirst("0", "") + : appState.getSelectDeviceByImeiRespModelElement!.mobile!; authVm.nationalIdController.text = appState.getSelectDeviceByImeiRespModelElement!.identificationNo!; super.initState(); @@ -45,11 +44,12 @@ class _SavedLogin extends State { @override Widget build(BuildContext context) { - - return Scaffold( + backgroundColor: AppColors.scaffoldBgColor, appBar: CustomAppBar( - onBackPressed: () {}, + onBackPressed: () { + Navigator.of(context).pop(); + }, onLanguageChanged: (lang) {}, ), body: SafeArea( @@ -78,12 +78,16 @@ class _SavedLogin extends State { children: [ // Last login info - ("${LocaleKeys.lastloginBy.tr() } ${LoginTypeExtension.fromValue(appState.getSelectDeviceByImeiRespModelElement!.logInType!)!.displayName}" - ).toText14(isBold: true, color: AppColors.greyTextColor), - (appState.getSelectDeviceByImeiRespModelElement!.createdOn != null ? DateUtil.getFormattedDate(DateUtil.convertStringToDate(appState.getSelectDeviceByImeiRespModelElement!.createdOn!), "d MMMM, y at HH:mm") : '--') + ("${LocaleKeys.lastloginBy.tr()} ${LoginTypeExtension.fromValue(appState.getSelectDeviceByImeiRespModelElement!.logInType!)!.displayName}") + .toText14(isBold: true, color: AppColors.greyTextColor), + (appState.getSelectDeviceByImeiRespModelElement!.createdOn != null + ? DateUtil.getFormattedDate(DateUtil.convertStringToDate(appState.getSelectDeviceByImeiRespModelElement!.createdOn!), "d MMMM, y at HH:mm") + : '--') .toText16(isBold: true, color: AppColors.textColor), - Container(margin: EdgeInsets.all(16.h), child: Utils.buildSvgWithAssets(icon: getTypeIcons(loginType.toInt), height: 54, width: 54, iconColor: loginType.toInt == 4 ? null : AppColors.primaryRedColor)), + Container( + margin: EdgeInsets.all(16.h), + child: Utils.buildSvgWithAssets(icon: getTypeIcons(loginType.toInt), height: 54, width: 54, iconColor: loginType.toInt == 4 ? null : AppColors.primaryRedColor)), // Face ID login button SizedBox( height: 45, @@ -92,8 +96,7 @@ class _SavedLogin extends State { onPressed: () { if (loginType == LoginTypeEnum.fingerprint || loginType == LoginTypeEnum.face) { authVm.loginWithFingerPrintFace(loginType.toInt); - } - else { + } else { // int? val = loginType.toInt; authVm.checkUserAuthentication(otpTypeEnum: loginType == LoginTypeEnum.sms ? OTPTypeEnum.sms : OTPTypeEnum.whatsapp); } @@ -157,7 +160,7 @@ class _SavedLogin extends State { Navigator.of(context).pop(); loginType = LoginTypeEnum.sms; int? val = loginType.toInt; - authVm.checkUserAuthentication(otpTypeEnum:OTPTypeEnum.sms ); + authVm.checkUserAuthentication(otpTypeEnum: OTPTypeEnum.sms); }, backgroundColor: AppColors.primaryRedColor, borderColor: AppColors.primaryRedBorderColor, @@ -180,7 +183,7 @@ class _SavedLogin extends State { Navigator.of(context).pop(); loginType = LoginTypeEnum.whatsapp; int? val = loginType.toInt; - authVm.checkUserAuthentication(otpTypeEnum:OTPTypeEnum.whatsapp ); + authVm.checkUserAuthentication(otpTypeEnum: OTPTypeEnum.whatsapp); }, backgroundColor: AppColors.transparent, borderColor: AppColors.textColor, @@ -216,8 +219,7 @@ class _SavedLogin extends State { } else { loginType = LoginTypeEnum.whatsapp; int? val = loginType.toInt; - authVm.checkUserAuthentication(otpTypeEnum:OTPTypeEnum.whatsapp ); - + authVm.checkUserAuthentication(otpTypeEnum: OTPTypeEnum.whatsapp); } }, backgroundColor: AppColors.whiteColor, diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart index 611be7d..b33658f 100644 --- a/lib/presentation/home/landing_page.dart +++ b/lib/presentation/home/landing_page.dart @@ -39,10 +39,9 @@ class _LandingPageState extends State { @override void initState() { authVM = context.read(); - if(mounted) { + if (mounted) { authVM.checkLastLoginStatus(() { - - showQuickLogin(context, false); + // showQuickLogin(context, false); }); } super.initState(); diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart index 0039705..93146d6 100644 --- a/lib/routes/app_routes.dart +++ b/lib/routes/app_routes.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/presentation/authentication/login.dart'; import 'package:hmg_patient_app_new/presentation/home/landing_page.dart'; +import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart'; import 'package:hmg_patient_app_new/splashPage.dart'; class AppRoutes { @@ -12,6 +13,6 @@ class AppRoutes { static Map get routes => { initialRoute: (context) => SplashPage(), loginScreen: (context) => LoginScreen(), - landingScreen: (context) => LandingPage(), + landingScreen: (context) => LandingNavigation(), }; } diff --git a/lib/widgets/custom_tab_bar.dart b/lib/widgets/custom_tab_bar.dart index f6e9124..e43c004 100644 --- a/lib/widgets/custom_tab_bar.dart +++ b/lib/widgets/custom_tab_bar.dart @@ -102,7 +102,7 @@ class _CustomTabBarState extends State { children: [ if (tabBar.image != null) Utils.buildSvgWithAssets(icon: tabBar.image!, height: 18, width: 18, iconColor: isSelected ? widget.activeTextColor : widget.inActiveTextColor), tabBar.title - .toText15(weight: isSelected ? FontWeight.w600 : FontWeight.w500, color: isSelected ? widget.activeTextColor : widget.inActiveTextColor, letterSpacing: isSelected ? -0.3 : -0.1), + .toText14(weight: isSelected ? FontWeight.w600 : FontWeight.w500, color: isSelected ? widget.activeTextColor : widget.inActiveTextColor, letterSpacing: isSelected ? -0.3 : -0.1), ], )).onPress(() { setState(() {