diff --git a/assets/images/svg/not_found.svg b/assets/images/svg/not_found.svg new file mode 100644 index 0000000..80aed53 --- /dev/null +++ b/assets/images/svg/not_found.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/lib/core/api/api_client.dart b/lib/core/api/api_client.dart index 425f1bd..7555400 100644 --- a/lib/core/api/api_client.dart +++ b/lib/core/api/api_client.dart @@ -7,13 +7,16 @@ import 'package:hmg_patient_app_new/core/api_consts.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; +import 'package:hmg_patient_app_new/routes/app_routes.dart'; import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart'; import 'package:hmg_patient_app_new/services/logger_service.dart'; +import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:http/http.dart' as http; import '../exceptions/api_failure.dart'; abstract class ApiClient { + static final NavigationService _navigationService = getIt.get(); Future post( String endPoint, { required Map body, @@ -105,7 +108,7 @@ class ApiClientImp implements ApiClient { url = ApiConsts.baseUrl + endPoint; } } - try { + // try { var user = _appState.getAuthenticatedUser(); Map headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}; if (!isExternal) { @@ -261,6 +264,8 @@ class ApiClientImp implements ApiClient { logApiEndpointError(endPoint, parsed['message'] ?? parsed['message'], statusCode); } } + } else if (!parsed['IsAuthenticated']) { + } else { if (parsed['SameClinicApptList'] != null) { onSuccess(parsed, statusCode, messageStatus: parsed['MessageStatus'], errorMessage: parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']); @@ -285,16 +290,20 @@ class ApiClientImp implements ApiClient { } } } - } catch (e, stackTrace) { - _loggerService.errorLogs(stackTrace.toString()); - if (e.toString().contains("ClientException")) { - onFailure('ClientException: Something went wrong, Please try again', -1, failureType: InvalidCredentials('ClientException: Something went wrong, plase try again')); - _analytics.errorTracking.log("internet_connectivity", error: "no internet available"); - } else { - onFailure(e.toString(), -1); - } - _analytics.errorTracking.log(endPoint, error: "api exception: $e - API Path: $url"); - } + // } catch (e, stackTrace) { + // _loggerService.errorLogs(stackTrace.toString()); + // if (e.toString().contains("ClientException")) { + // onFailure('ClientException: Something went wrong, Please try again', -1, failureType: InvalidCredentials('ClientException: Something went wrong, plase try again')); + // _analytics.errorTracking.log("internet_connectivity", error: "no internet available"); + // } else { + // onFailure(e.toString(), -1); + // } + // _analytics.errorTracking.log(endPoint, error: "api exception: $e - API Path: $url"); + // } + } + + logout() async { + ApiClient._navigationService.pushAndReplace(AppRoutes.landingScreen); } @override diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart index 1b01001..75c0cf9 100644 --- a/lib/core/utils/utils.dart +++ b/lib/core/utils/utils.dart @@ -291,7 +291,7 @@ class Utils { mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ - SvgPicture.asset('assets/images/NoDataAvailableIcon.svg', width: 150.0, height: 150.0), + SvgPicture.asset('assets/images/svg/not_found.svg', width: 150.0, height: 150.0), (errorText ?? LocaleKeys.noDataAvailable.tr()).toText16(isCenter: true).paddingOnly(top: 15), ], ).center; @@ -310,6 +310,19 @@ class Utils { ).center; } + static Widget getSuccessWidget({String? loadingText}) { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Lottie.asset(AppAnimations.checkmark, repeat: true, reverse: false, frameRate: FrameRate(60), width: 100.h, height: 100.h, fit: BoxFit.fill), + SizedBox(height: 8.h), + (loadingText ?? LocaleKeys.loadingText.tr()).toText16(color: AppColors.blackColor), + SizedBox(height: 8.h), + ], + ).center; + } + static bool isVidaPlusProject(AppState appState, int projectID) { bool isVidaPlus = false; for (var element in appState.vidaPlusProjectList) { diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index 68c9c48..e36dbeb 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -125,6 +125,8 @@ extension EmailValidator on String { bool isBold = false, bool isCenter = false, int maxLine = 0, + FontWeight? weight, + double? letterSpacing = -1 }) => Text( this, @@ -132,9 +134,9 @@ extension EmailValidator on String { maxLines: (maxLine > 0) ? maxLine : null, style: TextStyle( fontSize: 13.fSize, - fontWeight: isBold ? FontWeight.bold : FontWeight.normal, + fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal), color: color ?? AppColors.blackColor, - letterSpacing: -1, + letterSpacing: letterSpacing, decoration: isUnderLine ? TextDecoration.underline : null), ); diff --git a/lib/features/my_appointments/my_appointments_repo.dart b/lib/features/my_appointments/my_appointments_repo.dart index 5a55909..0815b94 100644 --- a/lib/features/my_appointments/my_appointments_repo.dart +++ b/lib/features/my_appointments/my_appointments_repo.dart @@ -9,10 +9,9 @@ import 'package:hmg_patient_app_new/services/logger_service.dart'; abstract class MyAppointmentsRepo { Future>>> getPatientAppointments( - {required String patientId, required bool isActiveAppointment, required bool isArrivedAppointments}); + {required bool isActiveAppointment, required bool isArrivedAppointments}); - Future>> getPatientShareAppointment( - {required String patientId, required int projectID, required int clinicID, required String appointmentNo}); + Future>> getPatientShareAppointment({required int projectID, required int clinicID, required String appointmentNo}); Future>> createAdvancePayment( {required String paymentMethodName, @@ -26,7 +25,9 @@ abstract class MyAppointmentsRepo { Future>> addAdvanceNumberRequest({required String advanceNumber, required String paymentReference, required String appointmentNo}); - Future>> generateAppointmentQR({required String clinicID, required String projectID, required String appointmentNo, required int isFollowUp}); + Future>> generateAppointmentQR({required int clinicID, required int projectID, required String appointmentNo, required int isFollowUp}); + + Future>> cancelAppointment({required PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel}); } class MyAppointmentsRepoImp implements MyAppointmentsRepo { @@ -37,8 +38,8 @@ class MyAppointmentsRepoImp implements MyAppointmentsRepo { @override Future>>> getPatientAppointments( - {required String patientId, required bool isActiveAppointment, required bool isArrivedAppointments}) async { - final mapDevice = { + {required bool isActiveAppointment, required bool isArrivedAppointments}) async { + Map mapDevice = { "IsActiveAppointment": isActiveAppointment, "isDentalAllowedBackend": false, "PatientTypeID": 1, @@ -61,9 +62,9 @@ class MyAppointmentsRepoImp implements MyAppointmentsRepo { onSuccess: (response, statusCode, {messageStatus, errorMessage}) { try { final list = response['AppoimentAllHistoryResultList']; - if (list == null || list.isEmpty) { - throw Exception("Appointments list is empty"); - } + // if (list == null || list.isEmpty) { + // throw Exception("Appointments list is empty"); + // } final appointmentsList = list.map((item) => PatientAppointmentHistoryResponseModel.fromJson(item as Map)).toList().cast(); @@ -87,19 +88,8 @@ class MyAppointmentsRepoImp implements MyAppointmentsRepo { } @override - Future>> getPatientShareAppointment( - {required String patientId, required int projectID, required int clinicID, required String appointmentNo}) async { - final mapRequest = { - "ProjectID": projectID, - "ClinicID": clinicID, - "AppointmentNo": appointmentNo, - "IsActiveAppointment": true, - "PatientOutSA": 0, - "isDentalAllowedBackend": false, - "PatientID": patientId, - "PatientTypeID": 1, - "PatientType": 1, - }; + Future>> getPatientShareAppointment({required int projectID, required int clinicID, required String appointmentNo}) async { + Map mapRequest = {"ProjectID": projectID, "ClinicID": clinicID, "AppointmentNo": appointmentNo, "IsActiveAppointment": true}; try { GenericApiModel? apiResponse; @@ -139,8 +129,6 @@ class MyAppointmentsRepoImp implements MyAppointmentsRepo { } catch (e) { return Left(UnknownFailure(e.toString())); } - - throw UnimplementedError(); } @override @@ -154,7 +142,7 @@ class MyAppointmentsRepoImp implements MyAppointmentsRepo { required String patientID, required int patientType, }) async { - final requestBody = { + Map requestBody = { "ProjectID": projectID, "OnlineCheckInAppointment": { "AppointmentNo": appointmentNo, @@ -202,7 +190,7 @@ class MyAppointmentsRepoImp implements MyAppointmentsRepo { @override Future> addAdvanceNumberRequest({required String advanceNumber, required String paymentReference, required String appointmentNo}) async { - final requestBody = { + Map requestBody = { "AdvanceNumber": advanceNumber, "AdvanceNumber_VP": advanceNumber, "PaymentReferenceNumber": paymentReference, @@ -240,8 +228,8 @@ class MyAppointmentsRepoImp implements MyAppointmentsRepo { } @override - Future> generateAppointmentQR({required String clinicID, required String projectID, required String appointmentNo, required int isFollowUp}) async { - final requestBody = { + Future> generateAppointmentQR({required int clinicID, required int projectID, required String appointmentNo, required int isFollowUp}) async { + Map requestBody = { "AppointmentNo": appointmentNo, "ClinicID": clinicID, "ProjectID": projectID, @@ -277,4 +265,49 @@ class MyAppointmentsRepoImp implements MyAppointmentsRepo { return Left(UnknownFailure(e.toString())); } } + + @override + Future> cancelAppointment({required PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel}) async { + Map requestBody = { + "AppointmentID": patientAppointmentHistoryResponseModel.appointmentNo, + "ClinicID": patientAppointmentHistoryResponseModel.clinicID, + "ProjectID": patientAppointmentHistoryResponseModel.projectID, + "CancelToReschadual": false, + "EndTime": patientAppointmentHistoryResponseModel.endTime, + "StartTime": patientAppointmentHistoryResponseModel.startTime, + "DoctorID": patientAppointmentHistoryResponseModel.doctorID, + "IsForLiveCare": patientAppointmentHistoryResponseModel.isLiveCareAppointment, + "OriginalClinicID": patientAppointmentHistoryResponseModel.originalClinicID, + "OriginalProjectID": patientAppointmentHistoryResponseModel.originalProjectID + }; + + try { + GenericApiModel? apiResponse; + Failure? failure; + await apiClient.post( + CANCEL_APPOINTMENT, + body: requestBody, + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + apiResponse = GenericApiModel( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: null, + data: response, + ); + } catch (e) { + failure = DataParsingFailure(e.toString()); + } + }, + ); + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + return Left(UnknownFailure(e.toString())); + } + } } diff --git a/lib/features/my_appointments/my_appointments_view_model.dart b/lib/features/my_appointments/my_appointments_view_model.dart index 439a8e8..5c952e9 100644 --- a/lib/features/my_appointments/my_appointments_view_model.dart +++ b/lib/features/my_appointments/my_appointments_view_model.dart @@ -49,7 +49,7 @@ class MyAppointmentsViewModel extends ChangeNotifier { } Future getPatientAppointments(bool isActiveAppointment, bool isArrivedAppointments, {Function(dynamic)? onSuccess, Function(String)? onError}) async { - final result = await myAppointmentsRepo.getPatientAppointments(patientId: "3628599", isActiveAppointment: isActiveAppointment, isArrivedAppointments: isArrivedAppointments); + final result = await myAppointmentsRepo.getPatientAppointments(isActiveAppointment: isActiveAppointment, isArrivedAppointments: isArrivedAppointments); result.fold( (failure) async => await errorHandlerService.handleError(failure: failure), @@ -69,7 +69,7 @@ class MyAppointmentsViewModel extends ChangeNotifier { } Future getPatientShareAppointment(int projectID, int clinicID, String appointmentNo, {Function(dynamic)? onSuccess, Function(String)? onError}) async { - final result = await myAppointmentsRepo.getPatientShareAppointment(patientId: "3628599", projectID: projectID, clinicID: clinicID, appointmentNo: appointmentNo); + final result = await myAppointmentsRepo.getPatientShareAppointment(projectID: projectID, clinicID: clinicID, appointmentNo: appointmentNo); result.fold( (failure) async => await errorHandlerService.handleError(failure: failure), @@ -108,7 +108,7 @@ class MyAppointmentsViewModel extends ChangeNotifier { } Future generateAppointmentQR( - {required String clinicID, required String projectID, required String appointmentNo, required int isFollowUp, Function(dynamic)? onSuccess, Function(String)? onError}) async { + {required int clinicID, required int projectID, required String appointmentNo, required int isFollowUp, Function(dynamic)? onSuccess, Function(String)? onError}) async { final result = await myAppointmentsRepo.generateAppointmentQR(clinicID: clinicID, projectID: projectID, appointmentNo: appointmentNo, isFollowUp: isFollowUp); result.fold( @@ -126,6 +126,25 @@ class MyAppointmentsViewModel extends ChangeNotifier { ); } + Future cancelAppointment({required PatientAppointmentHistoryResponseModel patientAppointmentHistoryResponseModel, Function(dynamic)? onSuccess, Function(String)? onError}) async { + final result = await myAppointmentsRepo.cancelAppointment(patientAppointmentHistoryResponseModel: patientAppointmentHistoryResponseModel); + + result.fold( + (failure) async => await errorHandlerService.handleError(failure: failure), + (apiResponse) { + if (apiResponse.messageStatus == 2) { + onError!(apiResponse.errorMessage!); + // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {}); + } else if (apiResponse.messageStatus == 1) { + notifyListeners(); + if (onSuccess != null) { + onSuccess(apiResponse); + } + } + }, + ); + } + Future createAdvancePayment( {required String paymentMethodName, required int projectID, diff --git a/lib/presentation/appointments/appointment_details_page.dart b/lib/presentation/appointments/appointment_details_page.dart index 1413765..4255c71 100644 --- a/lib/presentation/appointments/appointment_details_page.dart +++ b/lib/presentation/appointments/appointment_details_page.dart @@ -16,6 +16,7 @@ import 'package:hmg_patient_app_new/presentation/appointments/appointment_paymen import 'package:hmg_patient_app_new/presentation/appointments/widgets/appointment_doctor_card.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; +import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:maps_launcher/maps_launcher.dart'; import 'package:provider/provider.dart'; @@ -58,7 +59,33 @@ class _AppointmentDetailsPageState extends State { AppointmentDoctorCard( patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel, onAskDoctorTap: () {}, - onCancelTap: () {}, + onCancelTap: () async { + showCommonBottomSheet(context, + child: Utils.getLoadingWidget(), + callBackFunc: (str) {}, + title: "", + height: ResponsiveExtension.screenHeight * 0.3, + isCloseButtonVisible: false, + isDismissible: false, + isFullScreen: false); + await myAppointmentsViewModel.cancelAppointment( + patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel, + onSuccess: (apiResponse) { + Navigator.of(context).pop(); + showCommonBottomSheet(context, + child: Utils.getSuccessWidget(loadingText: "Appointment Cancelled Successfully".needTranslation), + callBackFunc: (str) { + }, + title: "", + height: ResponsiveExtension.screenHeight * 0.3, + isCloseButtonVisible: false, + isDismissible: false, + isFullScreen: false, + isSuccessDialog: true); + }); + Navigator.of(context).pop(); + Navigator.of(context).pop(); + }, onRescheduleTap: () {}, ), SizedBox(height: 16.h), diff --git a/lib/presentation/appointments/appointment_payment_page.dart b/lib/presentation/appointments/appointment_payment_page.dart index a6ff598..861d5b9 100644 --- a/lib/presentation/appointments/appointment_payment_page.dart +++ b/lib/presentation/appointments/appointment_payment_page.dart @@ -354,8 +354,8 @@ class _AppointmentPaymentPageState extends State { print(value); await myAppointmentsViewModel.addAdvanceNumberRequest( advanceNumber: Utils.isVidaPlusProject(appState, widget.patientAppointmentHistoryResponseModel.projectID) - ? value['data']['OnlineCheckInAppointments'][0]['AdvanceNumber_VP'].toString() - : value['data']['OnlineCheckInAppointments'][0]['AdvanceNumber'].toString(), + ? value.data['OnlineCheckInAppointments'][0]['AdvanceNumber_VP'].toString() + : value.data['OnlineCheckInAppointments'][0]['AdvanceNumber'].toString(), paymentReference: payfortViewModel.payfortCheckPaymentStatusResponseModel!.fortId!, appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo.toString(), onSuccess: (value) async { diff --git a/lib/presentation/appointments/my_appointments_page.dart b/lib/presentation/appointments/my_appointments_page.dart index 702f60d..0850641 100644 --- a/lib/presentation/appointments/my_appointments_page.dart +++ b/lib/presentation/appointments/my_appointments_page.dart @@ -6,6 +6,7 @@ import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'; @@ -59,7 +60,7 @@ class _MyAppointmentsPageState extends State { tabs: [ CustomTabBarModel(null, "All Appt.".needTranslation), CustomTabBarModel(null, "Upcoming".needTranslation), - CustomTabBarModel(null, LocaleKeys.request.tr(context: context)), + CustomTabBarModel(null, "Completed".needTranslation), ], onTabChange: (index) { print(index); @@ -74,11 +75,11 @@ class _MyAppointmentsPageState extends State { ListView.separated( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), - itemCount: myAppointmentsVM.isMyAppointmentsLoading ? 5 : myAppointmentsVM.patientAppointmentsHistoryList.length, + itemCount: myAppointmentsVM.isMyAppointmentsLoading ? 5 : myAppointmentsVM.patientAppointmentsHistoryList.isNotEmpty ? myAppointmentsVM.patientAppointmentsHistoryList.length : 1, itemBuilder: (context, index) { return myAppointmentsVM.isMyAppointmentsLoading ? const MoviesShimmerWidget().paddingSymmetrical(24.h, 0.h) - : AnimationConfiguration.staggeredList( + : myAppointmentsVM.patientAppointmentsHistoryList.isNotEmpty ? AnimationConfiguration.staggeredList( position: index, duration: const Duration(milliseconds: 500), child: SlideAnimation( @@ -96,7 +97,7 @@ class _MyAppointmentsPageState extends State { ).paddingSymmetrical(24.h, 0.h), ), ), - ); + ) : Utils.getNoDataWidget(context); }, separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 16.h), ), diff --git a/lib/presentation/appointments/widgets/appointment_card.dart b/lib/presentation/appointments/widgets/appointment_card.dart index 154864c..51af492 100644 --- a/lib/presentation/appointments/widgets/appointment_card.dart +++ b/lib/presentation/appointments/widgets/appointment_card.dart @@ -158,11 +158,14 @@ class _AppointmentCardState extends State { child: CustomButton( text: AppointmentType.getNextActionText(widget.patientAppointmentHistoryResponseModel.nextAction), onPressed: () { - Navigator.of(context).push( - FadePage( - page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel), - ), - ); + Navigator.of(context) + .push(FadePage( + page: AppointmentDetailsPage(patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel), + )) + .then((val) { + widget.myAppointmentsViewModel.initAppointmentsViewModel(); + widget.myAppointmentsViewModel.getPatientAppointments(true, false); + }); }, backgroundColor: AppointmentType.getNextActionButtonColor(widget.patientAppointmentHistoryResponseModel.nextAction).withOpacity(0.1), borderColor: AppointmentType.getNextActionButtonColor(widget.patientAppointmentHistoryResponseModel.nextAction).withOpacity(0.01), diff --git a/lib/widgets/common_bottom_sheet.dart b/lib/widgets/common_bottom_sheet.dart index 25df532..11b7df8 100644 --- a/lib/widgets/common_bottom_sheet.dart +++ b/lib/widgets/common_bottom_sheet.dart @@ -7,7 +7,14 @@ import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; void showCommonBottomSheet(BuildContext context, - {required Widget child, Function(String?)? callBackFunc, String? title, required double height, bool isCloseButtonVisible = true, bool isFullScreen = true, bool isDismissible = true}) { + {required Widget child, + Function(String?)? callBackFunc, + String? title, + required double height, + bool isCloseButtonVisible = true, + bool isFullScreen = true, + bool isDismissible = true, + bool isSuccessDialog = false}) { showModalBottomSheet( sheetAnimationStyle: AnimationStyle( duration: Duration(milliseconds: 500), // Custom animation duration @@ -17,7 +24,7 @@ void showCommonBottomSheet(BuildContext context, isScrollControlled: true, showDragHandle: false, isDismissible: isDismissible, - backgroundColor: AppColors.scaffoldBgColor, + backgroundColor: isSuccessDialog ? AppColors.whiteColor : AppColors.scaffoldBgColor, builder: (BuildContext context) { return Container( height: height, @@ -30,9 +37,9 @@ void showCommonBottomSheet(BuildContext context, ), ); }).then((value) { - if(value != null) { - callBackFunc!(value); - } + if (value != null) { + callBackFunc!(value); + } }); } @@ -67,13 +74,18 @@ class ButtonSheetContent extends StatelessWidget { // Close button isCloseButtonVisible && isFullScreen ? Column(children: [ - SizedBox(height: 40.h,), - Padding( - padding: EdgeInsets.symmetric(horizontal: 16,), - child: Utils.buildSvgWithAssets(icon: AppAssets.closeBottomNav, width: 32, height: 32).onPress(() { - Navigator.of(context).pop(); - }), - )]) + SizedBox( + height: 40.h, + ), + Padding( + padding: EdgeInsets.symmetric( + horizontal: 16, + ), + child: Utils.buildSvgWithAssets(icon: AppAssets.closeBottomNav, width: 32, height: 32).onPress(() { + Navigator.of(context).pop(); + }), + ) + ]) : SizedBox(), isFullScreen diff --git a/lib/widgets/custom_tab_bar.dart b/lib/widgets/custom_tab_bar.dart index e43c004..870e85b 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 - .toText14(weight: isSelected ? FontWeight.w600 : FontWeight.w500, color: isSelected ? widget.activeTextColor : widget.inActiveTextColor, letterSpacing: isSelected ? -0.3 : -0.1), + .toText13(weight: isSelected ? FontWeight.w600 : FontWeight.w500, color: isSelected ? widget.activeTextColor : widget.inActiveTextColor, letterSpacing: isSelected ? -0.3 : -0.1), ], )).onPress(() { setState(() {