e-referral done.

pull/104/head
Sultan khan 6 days ago
parent a4d3bb3533
commit 2532b494f7

@ -1,4 +1,3 @@
// utils/referral_validator.dart
import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/e_referral_form_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/e_referral_form_model.dart';
@ -7,24 +6,19 @@ class ReferralValidator {
final errors = FormValidationErrors(); final errors = FormValidationErrors();
if (formData.requesterName.trim().isEmpty) { if (formData.requesterName.trim().isEmpty) {
errors.requesterName = 'Referral requester name is required'; errors.requesterName = 'Referral requester name is required'.needTranslation;
} }
// if (formData.requesterPhone.trim().isEmpty) {
// errors.requesterPhone = 'Phone number is required';
// } else if (formData.countryEnum.countryCode == '966' &&
// !_isValidSaudiPhone(formData.requesterPhone)) {
// errors.requesterPhone = 'Please enter a valid Saudi phone number (5xxxxxxxx)';
// }
if (formData.relationship == null) { if (formData.relationship == null) {
errors.relationship = 'Please select a relationship'; errors.relationship = 'Please select a relationship'.needTranslation;
} }
if (formData.relationship != null && if (formData.relationship != null &&
formData.relationship?.iD == 5 && formData.relationship?.iD == 5 &&
formData.otherRelationshipName.trim().isEmpty) { formData.otherRelationshipName.trim().isEmpty) {
errors.otherRelationshipName = 'Other relationship name is required'; errors.otherRelationshipName = 'Other relationship name is required'.needTranslation;
} }
return errors; return errors;
@ -34,19 +28,19 @@ class ReferralValidator {
final errors = FormValidationErrors(); final errors = FormValidationErrors();
if (formData.patientIdentification.trim().isEmpty) { if (formData.patientIdentification.trim().isEmpty) {
errors.patientIdentification = 'Identification number is required'; errors.patientIdentification = 'Identification number is required'.needTranslation;
} }
if (formData.patientName.trim().isEmpty) { if (formData.patientName.trim().isEmpty) {
errors.patientName = 'Patient name is required'; errors.patientName = 'Patient name is required'.needTranslation;
} }
if (formData.patientPhone == null) { if (formData.patientPhone == null) {
errors.patientPhone = 'Please Enter patient phone number'; errors.patientPhone = 'Please Enter patient phone number'.needTranslation;
} }
if (formData.patientCity == null) { if (formData.patientCity == null) {
errors.patientCity = 'Please select patient city'; errors.patientCity = 'Please select patient city'.needTranslation;
} }
return errors; return errors;
@ -56,15 +50,15 @@ class ReferralValidator {
final errors = FormValidationErrors(); final errors = FormValidationErrors();
if (formData.medicalReportImages.isEmpty) { if (formData.medicalReportImages.isEmpty) {
errors.medicalReport = 'At least one medical report is required'; errors.medicalReport = 'At least one medical report is required'.needTranslation;
} }
if (formData.branch == null) { if (formData.branch == null) {
errors.branch = 'Please select a branch'; errors.branch = 'Please select a branch'.needTranslation;
} }
if (formData.isPatientInsured && formData.insuredPatientImages.isEmpty) { if (formData.isPatientInsured && formData.insuredPatientImages.isEmpty) {
errors.insuredDocument = 'Insurance document is required for insured patients'; errors.insuredDocument = 'Insurance document is required for insured patients'.needTranslation;
} }
return errors; return errors;

@ -241,12 +241,9 @@ class _SearchResultPageState extends State<SearchResultPage> {
size: 16, size: 16,
), ),
SizedBox(width: 4), SizedBox(width: 4),
// Text(
text.toText14(color: AppColors.greyTextColor), text.toText14(color: AppColors.greyTextColor),
// style: TextStyle(
// color: Colors.grey[700],
// ),
// ),
], ],
); );
} }
@ -264,33 +261,6 @@ class _SearchResultPageState extends State<SearchResultPage> {
} }
} }
void _showFilterOptions() {
showModalBottomSheet(
context: context,
builder: (context) {
return Container(
padding: EdgeInsets.all(16),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text(
'Filter Results',
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
),
SizedBox(height: 16),
_buildFilterOption('All'),
_buildFilterOption('Pending'),
_buildFilterOption('Completed'),
_buildFilterOption('Rejected'),
],
),
);
},
);
}
Widget _buildFilterOption(String filter) { Widget _buildFilterOption(String filter) {
return ListTile( return ListTile(

@ -43,7 +43,6 @@ class _NewReferralPageState extends State<NewReferralPage> {
double widthOfOneState = ((ResponsiveExtension.screenWidth) / 3) - (20.h); double widthOfOneState = ((ResponsiveExtension.screenWidth) / 3) - (20.h);
final List<String> _steps = ['Requester Info', 'Patient Information', 'Other details'];
@override @override
void initState() { void initState() {

@ -26,7 +26,6 @@ class SearchEReferralPage extends StatefulWidget {
} }
class _SearchEReferralPageState extends State<SearchEReferralPage> { class _SearchEReferralPageState extends State<SearchEReferralPage> {
// final PageController _pageController = PageController();
final ReferralFormManager _formManager = ReferralFormManager(); final ReferralFormManager _formManager = ReferralFormManager();
late HmgServicesViewModel hmgServicesVM; late HmgServicesViewModel hmgServicesVM;
@override @override

@ -1,9 +1,7 @@
// services/otp_service.dart
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/core/enums.dart'; import 'package:hmg_patient_app_new/core/enums.dart';
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
@ -15,10 +13,7 @@ import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart'; import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart';
import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart';
import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/check_activation_e_referral_req_model.dart';
import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/send_activation_code_ereferral_req_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/models/req_models/send_activation_code_ereferral_req_model.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
import 'package:hmg_patient_app_new/features/authentication/widgets/otp_verification_screen.dart';
class OTPService { class OTPService {
static void openOTPScreen({ static void openOTPScreen({
@ -26,12 +21,7 @@ class OTPService {
required ReferralFormManager formManager, required ReferralFormManager formManager,
required Function onSuccess, required Function onSuccess,
}) { }) {
_showOTPVerificationSheet(context: context, formManager: formManager, onSuccess: onSuccess);
_showOTPVerificationSheet(context: context, formManager: formManager , onSuccess: onSuccess);
//
// LoaderBottomSheet.showLoader();
} }
static void _showOTPVerificationSheet({ static void _showOTPVerificationSheet({
@ -39,7 +29,6 @@ class OTPService {
required ReferralFormManager formManager, required ReferralFormManager formManager,
required Function onSuccess, required Function onSuccess,
}) { }) {
showModalBottomSheet( showModalBottomSheet(
context: context, context: context,
isScrollControlled: true, isScrollControlled: true,
@ -49,75 +38,65 @@ class OTPService {
builder: (bottomSheetContext) => Padding( builder: (bottomSheetContext) => Padding(
padding: EdgeInsets.only(bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom), padding: EdgeInsets.only(bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom),
child: SingleChildScrollView( child: SingleChildScrollView(
child: GenericBottomSheet( child: GenericBottomSheet(
isEnableCountryDropdown:true, isEnableCountryDropdown: true,
textController: TextEditingController(), textController: TextEditingController(),
onChange: (value) { onChange: (value) {
formManager.updateRequesterPhone(value ?? ''); formManager.updateRequesterPhone(value ?? '');
}, },
onCountryChange: (value) { onCountryChange: (value) {
formManager.updateCountryEnum(value); formManager.updateCountryEnum(value);
}, },
autoFocus: true, autoFocus: true,
buttons: [ buttons: [
Padding( Padding(
padding: const EdgeInsets.only(bottom: 10), padding: const EdgeInsets.only(bottom: 10),
child: CustomButton( child: CustomButton(
text: LocaleKeys.sendOTPSMS.tr(), text: LocaleKeys.sendOTPSMS.tr(),
onPressed: () async { onPressed: () async {
if (ValidationUtils.isValidatePhone(
if (ValidationUtils.isValidatePhone( phoneNumber: formManager.formData.requesterPhone,
phoneNumber: formManager.formData.requesterPhone, onOkPress: () {
onOkPress: () { Navigator.pop(context);
Navigator.pop(context);
},
)) {
Navigator.pop(context);
final hmgServicesViewModel = context.read<HmgServicesViewModel>();
LoaderBottomSheet.showLoader();
hmgServicesViewModel.eReferralSendActivationCode(
requestModel: SendActivationCodeForEReferralRequestModel(
patientMobileNumber: int.parse(formManager.formData.requesterPhone),
zipCode: formManager.formData.countryEnum.countryCode,
patientOutSA: formManager.formData.countryEnum.countryCode == '966' ? 0 : 1,
),
onSuccess: (GenericApiModel response) {
LoaderBottomSheet.hideLoader();
hmgServicesViewModel.navigateToOTPScreen(otpTypeEnum: OTPTypeEnum.sms, phoneNumber: formManager.formData.requesterPhone, loginToken:response.data , onSuccess: (){
Navigator.pop(context);
onSuccess();
});
},
onError: (String errorMessage) {
LoaderBottomSheet.hideLoader();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(errorMessage))
);
},
);
}
}, },
backgroundColor: AppColors.primaryRedColor, )) {
borderColor: AppColors.primaryRedBorderColor, Navigator.pop(context);
textColor: AppColors.whiteColor, final hmgServicesViewModel = context.read<HmgServicesViewModel>();
icon: AppAssets.message,
), LoaderBottomSheet.showLoader();
), hmgServicesViewModel.eReferralSendActivationCode(
requestModel: SendActivationCodeForEReferralRequestModel(
], patientMobileNumber: int.parse(formManager.formData.requesterPhone),
zipCode: formManager.formData.countryEnum.countryCode,
patientOutSA: formManager.formData.countryEnum.countryCode == '966' ? 0 : 1,
),
onSuccess: (GenericApiModel response) {
LoaderBottomSheet.hideLoader();
hmgServicesViewModel.navigateToOTPScreen(
otpTypeEnum: OTPTypeEnum.sms,
phoneNumber: formManager.formData.requesterPhone,
loginToken: response.data,
onSuccess: () {
Navigator.pop(context);
onSuccess();
});
},
onError: (String errorMessage) {
LoaderBottomSheet.hideLoader();
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(errorMessage)));
},
);
}
},
backgroundColor: AppColors.primaryRedColor,
borderColor: AppColors.primaryRedBorderColor,
textColor: AppColors.whiteColor,
icon: AppAssets.message,
),
), ),
)), ],
),
)),
); );
} }
} }

@ -1,4 +1,3 @@
// widgets/other_details_step.dart
import 'dart:io'; import 'dart:io';
import 'dart:convert'; import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -48,14 +47,14 @@ class _OtherDetailsStepState extends State<OtherDetailsStep> {
void _updateMedicalReportText() { void _updateMedicalReportText() {
final hasMedicalReports = _formManager.formData.medicalReportImages.isNotEmpty; final hasMedicalReports = _formManager.formData.medicalReportImages.isNotEmpty;
_medicalReportController.text = hasMedicalReports _medicalReportController.text = hasMedicalReports
? '${_formManager.formData.medicalReportImages.length} file(s) selected' ? '${_formManager.formData.medicalReportImages.length} file(s) selected'.needTranslation
: ''; : '';
} }
void _updateInsuranceText() { void _updateInsuranceText() {
final hasInsuranceDocs = _formManager.formData.insuredPatientImages.isNotEmpty; final hasInsuranceDocs = _formManager.formData.insuredPatientImages.isNotEmpty;
_insuranceController.text = hasInsuranceDocs _insuranceController.text = hasInsuranceDocs
? '${_formManager.formData.insuredPatientImages.length} file(s) selected' ? '${_formManager.formData.insuredPatientImages.length} file(s) selected'.needTranslation
: ''; : '';
} }
@ -70,7 +69,7 @@ class _OtherDetailsStepState extends State<OtherDetailsStep> {
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
children: [ children: [
const SizedBox(height: 12), const SizedBox(height: 12),
_buildSectionTitle('Other Details'), _buildSectionTitle('Other Details'.needTranslation),
const SizedBox(height: 12), const SizedBox(height: 12),
_buildMedicalReportField(formManager), _buildMedicalReportField(formManager),
_buildBranchField(context, formManager), _buildBranchField(context, formManager),
@ -98,8 +97,8 @@ class _OtherDetailsStepState extends State<OtherDetailsStep> {
child: TextInputWidget( child: TextInputWidget(
controller: _medicalReportController, controller: _medicalReportController,
padding: const EdgeInsets.symmetric(horizontal: 16.0), padding: const EdgeInsets.symmetric(horizontal: 16.0),
hintText: 'Medical Report', hintText: 'Medical Report'.needTranslation,
labelText: 'Select Attachment', labelText: 'Select Attachment'.needTranslation,
suffix: const Icon(Icons.attachment), suffix: const Icon(Icons.attachment),
isReadOnly: true, isReadOnly: true,
errorMessage: formManager.errors.medicalReport, errorMessage: formManager.errors.medicalReport,
@ -123,7 +122,7 @@ class _OtherDetailsStepState extends State<OtherDetailsStep> {
children: formManager.formData.medicalReportImages.asMap().entries.map((entry) { children: formManager.formData.medicalReportImages.asMap().entries.map((entry) {
final index = entry.key; final index = entry.key;
return Chip( return Chip(
label: Text('Medical Report ${index + 1}'), label: Text('Medical Report ${index + 1}'.needTranslation),
deleteIcon: const Icon(Icons.close, size: 16), deleteIcon: const Icon(Icons.close, size: 16),
onDeleted: () { onDeleted: () {
_removeMedicalReport(index, formManager); _removeMedicalReport(index, formManager);
@ -171,12 +170,15 @@ class _OtherDetailsStepState extends State<OtherDetailsStep> {
} }
}, },
), ),
const Padding( Padding(
padding: EdgeInsets.all(5.0), padding: EdgeInsets.all(5.0),
child: Text( child:
"Patient is Insured", "Patient is Insured".needTranslation.toText14(
style: TextStyle(fontSize: 14, fontWeight: FontWeight.w600), color: Colors.black,
), weight: FontWeight.w600,
),
// style: TextStyle(fontSize: 14, fontWeight: FontWeight.w600),
//),
), ),
], ],
), ),
@ -192,8 +194,8 @@ class _OtherDetailsStepState extends State<OtherDetailsStep> {
child: TextInputWidget( child: TextInputWidget(
controller: _insuranceController, controller: _insuranceController,
padding: const EdgeInsets.symmetric(horizontal: 16.0), padding: const EdgeInsets.symmetric(horizontal: 16.0),
hintText: 'Insurance Document', hintText: 'Insurance Document'.needTranslation,
labelText: 'Select Attachment', labelText: 'Select Attachment'.needTranslation,
suffix: const Icon(Icons.attachment), suffix: const Icon(Icons.attachment),
isReadOnly: true, isReadOnly: true,
errorMessage: formManager.errors.insuredDocument, errorMessage: formManager.errors.insuredDocument,
@ -235,7 +237,7 @@ class _OtherDetailsStepState extends State<OtherDetailsStep> {
showCommonBottomSheetWithoutHeight( showCommonBottomSheetWithoutHeight(
context, context,
title: "Select Branch", title: "Select Branch".needTranslation,
child: Consumer<HabibWalletViewModel>( child: Consumer<HabibWalletViewModel>(
builder: (context, habibWalletVM, child) { builder: (context, habibWalletVM, child) {
final hospitals = habibWalletVM.advancePaymentHospitals; final hospitals = habibWalletVM.advancePaymentHospitals;

@ -1,4 +1,3 @@
// widgets/patient_information_step.dart
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/app_export.dart';
import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart';
@ -7,7 +6,6 @@ import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart';
import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart';
import 'package:hmg_patient_app_new/widgets/input_widget.dart'; import 'package:hmg_patient_app_new/widgets/input_widget.dart';
@ -67,14 +65,14 @@ class PatientInformationStepState extends State<PatientInformationStep> {
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
children: [ children: [
const SizedBox(height: 12), const SizedBox(height: 12),
_buildSectionTitle('Patient information'), _buildSectionTitle('Patient information'.needTranslation),
const SizedBox(height: 12), const SizedBox(height: 12),
_buildIdentificationField(formManager), _buildIdentificationField(formManager),
_buildPatientNameField(formManager), _buildPatientNameField(formManager),
// _buildPatientCountryField(context, formManager), // _buildPatientCountryField(context, formManager),
_buildPatientPhoneField(formManager), _buildPatientPhoneField(formManager),
const SizedBox(height: 20), const SizedBox(height: 20),
_buildSectionTitle('Where the patient located'), _buildSectionTitle('Where the patient located'.needTranslation),
_buildPatientCityField(context, formManager), _buildPatientCityField(context, formManager),
], ],
), ),
@ -96,8 +94,8 @@ class PatientInformationStepState extends State<PatientInformationStep> {
child: TextInputWidget( child: TextInputWidget(
controller: _identificationController, controller: _identificationController,
padding: const EdgeInsets.symmetric(horizontal: 16.0), padding: const EdgeInsets.symmetric(horizontal: 16.0),
hintText: 'Enter Identification Number*', hintText: 'Enter Identification Number*'.needTranslation,
labelText: 'Identification Number', labelText: 'Identification Number'.needTranslation,
errorMessage: formManager.errors.patientIdentification, errorMessage: formManager.errors.patientIdentification,
hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.patientIdentification), hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.patientIdentification),
onChange: (value) { onChange: (value) {
@ -116,8 +114,8 @@ class PatientInformationStepState extends State<PatientInformationStep> {
child: TextInputWidget( child: TextInputWidget(
controller: _nameController, controller: _nameController,
padding: const EdgeInsets.symmetric(horizontal: 16.0), padding: const EdgeInsets.symmetric(horizontal: 16.0),
hintText: 'Patient Name*', hintText: 'Patient Name*'.needTranslation,
labelText: 'Name', labelText: 'Name'.needTranslation,
keyboardType: TextInputType.text, keyboardType: TextInputType.text,
errorMessage: formManager.errors.patientName, errorMessage: formManager.errors.patientName,
hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.patientName), hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.patientName),
@ -131,29 +129,11 @@ class PatientInformationStepState extends State<PatientInformationStep> {
); );
} }
// Widget _buildPatientCountryField(BuildContext context, ReferralFormManager formManager) {
// return DropdownWidget(
// labelText: 'Country',
// hintText: formManager.formData.patientCountry?.name ?? "Select Country",
// isEnable: false,
// hasSelectionCustomIcon: true,
// labelColor: Colors.black,
// padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16),
// selectionCustomIcon: AppAssets.arrow_down,
// leadingIcon: AppAssets.globe,
// dropdownItems: [],
// errorMessage: formManager.errors.patientCountry,
// hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.patientCountry),
// ).paddingSymmetrical(0, 4).onPress(() {
// _showCountryBottomSheet(context, formManager);
// });
// }
Widget _buildPatientPhoneField(ReferralFormManager formManager) { Widget _buildPatientPhoneField(ReferralFormManager formManager) {
return Focus( return Focus(
focusNode: _phoneFocusNode, focusNode: _phoneFocusNode,
child: TextInputWidget( child: TextInputWidget(
labelText: 'Phone Number', labelText: 'Phone Number'.needTranslation,
hintText: "5xxxxxxxx", hintText: "5xxxxxxxx",
controller: _phoneController, controller: _phoneController,
padding: const EdgeInsets.all(8), padding: const EdgeInsets.all(8),
@ -179,7 +159,7 @@ class PatientInformationStepState extends State<PatientInformationStep> {
Widget _buildPatientCityField(BuildContext context, ReferralFormManager formManager) { Widget _buildPatientCityField(BuildContext context, ReferralFormManager formManager) {
return DropdownWidget( return DropdownWidget(
labelText: 'City', labelText: 'City',
hintText: formManager.formData.patientCity?.description ?? "Select City", hintText: formManager.formData.patientCity?.description ?? "Select City".needTranslation,
isEnable: false, isEnable: false,
hasSelectionCustomIcon: true, hasSelectionCustomIcon: true,
labelColor: Colors.black, labelColor: Colors.black,
@ -199,7 +179,7 @@ class PatientInformationStepState extends State<PatientInformationStep> {
showCommonBottomSheetWithoutHeight( showCommonBottomSheetWithoutHeight(
context, context,
title: "Select City", title: "Select City".needTranslation,
child: Consumer<HmgServicesViewModel>( child: Consumer<HmgServicesViewModel>(
builder: (context, hmgServicesVM, child) { builder: (context, hmgServicesVM, child) {
final cities = hmgServicesVM.getAllCitiesList; final cities = hmgServicesVM.getAllCitiesList;

@ -1,21 +1,16 @@
// widgets/requester_form_step.dart
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/app_export.dart';
import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.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/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/e_referral_form_model.dart';
import 'package:hmg_patient_app_new/presentation/e_referral/e-referral_validator.dart';
import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart'; import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart';
import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart';
import 'package:hmg_patient_app_new/widgets/input_widget.dart'; import 'package:hmg_patient_app_new/widgets/input_widget.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
// widgets/requester_form_step.dart
// widgets/requester_form_step.dart
class RequesterFormStep extends StatefulWidget { class RequesterFormStep extends StatefulWidget {
const RequesterFormStep({super.key}); const RequesterFormStep({super.key});
@ -72,7 +67,7 @@ class RequesterFormStepState extends State<RequesterFormStep> {
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
children: [ children: [
// const SizedBox(height: 12), // const SizedBox(height: 12),
_buildSectionTitle('Referral requester information'), _buildSectionTitle('Referral requester information'.needTranslation),
const SizedBox(height: 12), const SizedBox(height: 12),
_buildNameField(formManager), _buildNameField(formManager),
// _buildPhoneField(formManager), // _buildPhoneField(formManager),
@ -98,8 +93,8 @@ class RequesterFormStepState extends State<RequesterFormStep> {
child: TextInputWidget( child: TextInputWidget(
controller: _nameController, controller: _nameController,
padding: const EdgeInsets.symmetric(horizontal: 16.0), padding: const EdgeInsets.symmetric(horizontal: 16.0),
hintText: 'Enter Referral Requester Name*', hintText: 'Enter Referral Requester Name*'.needTranslation,
labelText: 'Requester Name', labelText: 'Requester Name'.needTranslation,
keyboardType: TextInputType.text, keyboardType: TextInputType.text,
errorMessage: formManager.errors.requesterName, errorMessage: formManager.errors.requesterName,
isAllowLeadingIcon: true, isAllowLeadingIcon: true,
@ -112,40 +107,12 @@ class RequesterFormStepState extends State<RequesterFormStep> {
).paddingSymmetrical(0, 8), ).paddingSymmetrical(0, 8),
); );
} }
//
// Widget _buildPhoneField(ReferralFormManager formManager) {
// return Focus(
// focusNode: _phoneFocusNode,
// child: TextInputWidget(
// labelText: 'Phone Number',
// hintText: "5xxxxxxxx",
// controller: _phoneController,
// padding: const EdgeInsets.all(8),
// keyboardType: TextInputType.number,
// onChange: (value) {
// formManager.updateRequesterPhone(value ?? '');
// },
// onCountryChange: (value) {
// formManager.updateCountryEnum(value);
// },
// prefix: '966',
// isBorderAllowed: false,
// isAllowLeadingIcon: true,
// fontSize: 13,
// isCountryDropDown: true,
// leadingIcon: AppAssets.smart_phone,
// errorMessage: formManager.errors.requesterPhone,
// hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.requesterPhone)
// ).paddingSymmetrical(0, 8),
// );
// }
Widget _buildRelationshipField(BuildContext context, ReferralFormManager formManager) { Widget _buildRelationshipField(BuildContext context, ReferralFormManager formManager) {
return DropdownWidget( return DropdownWidget(
labelText: "Relationship", labelText: "Relationship".needTranslation,
hintText: formManager.formData.relationship?.textEn ?? "Select Relation", hintText: formManager.formData.relationship?.textEn ?? "Select Relation".needTranslation,
isEnable: false, isEnable: false,
selectedValue: formManager.formData.relationship?.textEn ?? "Select Relation", selectedValue: formManager.formData.relationship?.textEn ?? "Select Relation".needTranslation,
errorMessage: formManager.errors.relationship, errorMessage: formManager.errors.relationship,
hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.relationship), hasError: !ValidationUtils.isNullOrEmpty(formManager.errors.relationship),
hasSelectionCustomIcon: false, hasSelectionCustomIcon: false,
@ -165,8 +132,8 @@ class RequesterFormStepState extends State<RequesterFormStep> {
controller: _otherNameController, controller: _otherNameController,
keyboardType: TextInputType.text, keyboardType: TextInputType.text,
padding: const EdgeInsets.symmetric(horizontal: 16.0), padding: const EdgeInsets.symmetric(horizontal: 16.0),
hintText: 'Other Name*', hintText: 'Other Name*'.needTranslation,
labelText: 'Other Name', labelText: 'Other Name'.needTranslation,
errorMessage: formManager.errors.otherRelationshipName, errorMessage: formManager.errors.otherRelationshipName,
onChange: (value) { onChange: (value) {
formManager.updateOtherRelationshipName(value ?? ''); formManager.updateOtherRelationshipName(value ?? '');
@ -185,7 +152,7 @@ class RequesterFormStepState extends State<RequesterFormStep> {
showCommonBottomSheetWithoutHeight( showCommonBottomSheetWithoutHeight(
context, context,
title: "Select Relation", title: "Select Relation".needTranslation,
child: Consumer<HmgServicesViewModel>( child: Consumer<HmgServicesViewModel>(
builder: (context, hmgServicesVM, child) { builder: (context, hmgServicesVM, child) {
if (hmgServicesVM.relationTypes.isEmpty) { if (hmgServicesVM.relationTypes.isEmpty) {

@ -1,13 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart';
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
import 'package:hmg_patient_app_new/features/hmg_services/models/ui_models/e_referral_form_model.dart';
import 'package:hmg_patient_app_new/presentation/e_referral/e-referral_validator.dart';
import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart'; import 'package:hmg_patient_app_new/presentation/e_referral/e_referral_form_manager.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart';
import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
import 'package:hmg_patient_app_new/features/hmg_services/hmg_services_view_model.dart';
import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart';
import 'package:hmg_patient_app_new/widgets/input_widget.dart'; import 'package:hmg_patient_app_new/widgets/input_widget.dart';
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';

Loading…
Cancel
Save