|
|
|
|
import 'package:easy_localization/easy_localization.dart';
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/app_assets.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/app_state.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/common_models/nationality_country_model.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/core/dependencies.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/extensions/string_extensions.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/theme/colors.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/widgets/appbar/app_bar_widget.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/widgets/bottomsheet/generic_bottom_sheet.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart';
|
|
|
|
|
import 'package:hmg_patient_app_new/widgets/input_widget.dart';
|
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
|
|
|
|
|
|
class RegisterNewStep2 extends StatefulWidget {
|
|
|
|
|
var nHICData;
|
|
|
|
|
var payload;
|
|
|
|
|
|
|
|
|
|
RegisterNewStep2(this.nHICData, this.payload, {Key? key}) : super(key: key);
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
_RegisterNew createState() => _RegisterNew();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class _RegisterNew extends State<RegisterNewStep2> {
|
|
|
|
|
bool isFromDubai = true;
|
|
|
|
|
AuthenticationViewModel? authVM;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void initState() {
|
|
|
|
|
super.initState();
|
|
|
|
|
authVM = context.read<AuthenticationViewModel>();
|
|
|
|
|
authVM!.loadCountriesData(context: context);
|
|
|
|
|
// isFromDubai = widget.payload.zipCode!.contains("971") || widget.payload.zipCode!.contains("+971");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void dispose() {
|
|
|
|
|
super.dispose();
|
|
|
|
|
authVM!.clearDefaults();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
AppState appState = getIt.get<AppState>();
|
|
|
|
|
return Scaffold(
|
|
|
|
|
appBar: CustomAppBar(
|
|
|
|
|
onBackPressed: () {
|
|
|
|
|
Navigator.of(context).pop();
|
|
|
|
|
authVM!.clearDefaults();
|
|
|
|
|
},
|
|
|
|
|
onLanguageChanged: (lang) {},
|
|
|
|
|
hideLogoAndLang: true,
|
|
|
|
|
),
|
|
|
|
|
body: SingleChildScrollView(
|
|
|
|
|
reverse: false,
|
|
|
|
|
padding: EdgeInsets.only(left: 24.h, right: 24.h, top: 24.h),
|
|
|
|
|
child: Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: <Widget>[
|
|
|
|
|
Directionality(
|
|
|
|
|
textDirection: Directionality.of(context),
|
|
|
|
|
child: Container(
|
|
|
|
|
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(24)),
|
|
|
|
|
padding: EdgeInsets.only(left: 16.h, right: 16.h),
|
|
|
|
|
child: Column(
|
|
|
|
|
children: [
|
|
|
|
|
TextInputWidget(
|
|
|
|
|
labelText: isFromDubai ? LocaleKeys.fullName.tr() : LocaleKeys.name.tr(),
|
|
|
|
|
hintText: isFromDubai ? "name" ?? "" : (widget.nHICData!.firstNameEn!.toUpperCase() + " " + widget.nHICData!.lastNameEn!.toUpperCase()),
|
|
|
|
|
controller: null,
|
|
|
|
|
isEnable: true,
|
|
|
|
|
prefix: null,
|
|
|
|
|
isAllowRadius: false,
|
|
|
|
|
isBorderAllowed: false,
|
|
|
|
|
keyboardType: TextInputType.text,
|
|
|
|
|
isAllowLeadingIcon: true,
|
|
|
|
|
isReadOnly: isFromDubai ? false : true,
|
|
|
|
|
leadingIcon: AppAssets.user_circle)
|
|
|
|
|
.paddingSymmetrical(0.h, 16.h),
|
|
|
|
|
Divider(height: 1, color: AppColors.greyColor),
|
|
|
|
|
TextInputWidget(
|
|
|
|
|
labelText: LocaleKeys.nationalIdNumber.tr(),
|
|
|
|
|
hintText: isFromDubai ? "widget.payload.nationalID!" : (widget.nHICData!.idNumber ?? ""),
|
|
|
|
|
controller: null,
|
|
|
|
|
isEnable: true,
|
|
|
|
|
prefix: null,
|
|
|
|
|
isAllowRadius: false,
|
|
|
|
|
isBorderAllowed: false,
|
|
|
|
|
isAllowLeadingIcon: true,
|
|
|
|
|
isReadOnly: true,
|
|
|
|
|
leadingIcon: AppAssets.student_card)
|
|
|
|
|
.paddingSymmetrical(0.h, 16.h),
|
|
|
|
|
Divider(height: 1, color: AppColors.greyColor),
|
|
|
|
|
isFromDubai
|
|
|
|
|
? Selector<AuthenticationViewModel, GenderTypeEnum?>(
|
|
|
|
|
selector: (_, authViewModel) => authViewModel.genderType,
|
|
|
|
|
shouldRebuild: (previous, next) => previous != next,
|
|
|
|
|
builder: (context, genderType, child) {
|
|
|
|
|
final authVM = context.read<AuthenticationViewModel>();
|
|
|
|
|
return DropdownWidget(
|
|
|
|
|
labelText: LocaleKeys.gender.tr(),
|
|
|
|
|
hintText: LocaleKeys.malE.tr(),
|
|
|
|
|
isEnable: true,
|
|
|
|
|
dropdownItems: GenderTypeEnum.values.map((e) => appState.isArabic() ? e.typeAr : e.type).toList(),
|
|
|
|
|
selectedValue: genderType != null ? (appState.isArabic() ? genderType.typeAr : genderType.type) : "",
|
|
|
|
|
onChange: authVM.onGenderChange,
|
|
|
|
|
isBorderAllowed: false,
|
|
|
|
|
hasSelectionCustomIcon: true,
|
|
|
|
|
isAllowRadius: false,
|
|
|
|
|
padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0),
|
|
|
|
|
selectionCustomIcon: AppAssets.arrow_down,
|
|
|
|
|
leadingIcon: AppAssets.user_full,
|
|
|
|
|
).withVerticalPadding(8);
|
|
|
|
|
})
|
|
|
|
|
: TextInputWidget(
|
|
|
|
|
labelText: LocaleKeys.gender.tr(),
|
|
|
|
|
hintText: (widget.nHICData!.gender ?? ""),
|
|
|
|
|
controller: null,
|
|
|
|
|
isEnable: true,
|
|
|
|
|
prefix: null,
|
|
|
|
|
isAllowRadius: false,
|
|
|
|
|
isBorderAllowed: false,
|
|
|
|
|
isAllowLeadingIcon: true,
|
|
|
|
|
isReadOnly: isFromDubai ? false : true,
|
|
|
|
|
leadingIcon: AppAssets.user_full,
|
|
|
|
|
onChange: (value) {})
|
|
|
|
|
.paddingSymmetrical(0.h, 16.h),
|
|
|
|
|
Divider(height: 1, color: AppColors.greyColor),
|
|
|
|
|
isFromDubai
|
|
|
|
|
? Selector<AuthenticationViewModel, MaritalStatusTypeEnum?>(
|
|
|
|
|
selector: (_, authViewModel) => authViewModel.maritalStatus,
|
|
|
|
|
shouldRebuild: (previous, next) => previous != next,
|
|
|
|
|
builder: (context, maritalStatus, child) {
|
|
|
|
|
final authVM = context.read<AuthenticationViewModel>(); // For onChange
|
|
|
|
|
return DropdownWidget(
|
|
|
|
|
labelText: LocaleKeys.maritalStatus.tr(),
|
|
|
|
|
hintText: LocaleKeys.married.tr(),
|
|
|
|
|
isEnable: true,
|
|
|
|
|
dropdownItems: MaritalStatusTypeEnum.values.map((e) => appState.isArabic() ? e.typeAr : e.type).toList(),
|
|
|
|
|
selectedValue: maritalStatus != null ? (appState.isArabic() ? maritalStatus.typeAr : maritalStatus.type) : "",
|
|
|
|
|
onChange: authVM.onMaritalStatusChange,
|
|
|
|
|
isBorderAllowed: false,
|
|
|
|
|
hasSelectionCustomIcon: true,
|
|
|
|
|
isAllowRadius: false,
|
|
|
|
|
padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0),
|
|
|
|
|
selectionCustomIcon: AppAssets.arrow_down,
|
|
|
|
|
leadingIcon: AppAssets.smart_phone,
|
|
|
|
|
).withVerticalPadding(8);
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
: TextInputWidget(
|
|
|
|
|
labelText: LocaleKeys.maritalStatus.tr(),
|
|
|
|
|
hintText: appState.isArabic()
|
|
|
|
|
? (MaritalStatusTypeExtension.fromValue(widget.nHICData!.maritalStatusCode)!.typeAr)
|
|
|
|
|
: (MaritalStatusTypeExtension.fromValue(widget.nHICData!.maritalStatusCode)!.type),
|
|
|
|
|
isEnable: true,
|
|
|
|
|
prefix: null,
|
|
|
|
|
isAllowRadius: false,
|
|
|
|
|
isBorderAllowed: false,
|
|
|
|
|
isAllowLeadingIcon: true,
|
|
|
|
|
isReadOnly: true,
|
|
|
|
|
leadingIcon: AppAssets.smart_phone,
|
|
|
|
|
onChange: (value) {})
|
|
|
|
|
.paddingSymmetrical(0.h, 16.h),
|
|
|
|
|
Divider(height: 1, color: AppColors.greyColor),
|
|
|
|
|
isFromDubai
|
|
|
|
|
? Selector<AuthenticationViewModel, ({List<NationalityCountries>? countriesList, NationalityCountries? selectedCountry, bool isArabic})>(
|
|
|
|
|
selector: (context, authViewModel) {
|
|
|
|
|
final appState = getIt.get<AppState>();
|
|
|
|
|
return (
|
|
|
|
|
countriesList: authViewModel.countriesList,
|
|
|
|
|
selectedCountry: authViewModel.pickedCountryByUAEUser,
|
|
|
|
|
isArabic: appState.isArabic(),
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
shouldRebuild: (previous, next) => previous.countriesList != next.countriesList || previous.selectedCountry != next.selectedCountry || previous.isArabic != next.isArabic,
|
|
|
|
|
builder: (context, data, child) {
|
|
|
|
|
final authVM = context.read<AuthenticationViewModel>();
|
|
|
|
|
return DropdownWidget(
|
|
|
|
|
labelText: LocaleKeys.country.tr(),
|
|
|
|
|
hintText: LocaleKeys.uae.tr(),
|
|
|
|
|
isEnable: true,
|
|
|
|
|
dropdownItems: (data.countriesList ?? []).map((e) => data.isArabic ? e.nameN ?? "" : e.name ?? "").toList(),
|
|
|
|
|
selectedValue: data.selectedCountry != null
|
|
|
|
|
? data.isArabic
|
|
|
|
|
? data.selectedCountry!.nameN ?? ""
|
|
|
|
|
: data.selectedCountry!.name ?? ""
|
|
|
|
|
: "",
|
|
|
|
|
onChange: authVM.onUAEUserCountrySelection,
|
|
|
|
|
isBorderAllowed: false,
|
|
|
|
|
hasSelectionCustomIcon: true,
|
|
|
|
|
isAllowRadius: false,
|
|
|
|
|
padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0),
|
|
|
|
|
selectionCustomIcon: AppAssets.arrow_down,
|
|
|
|
|
leadingIcon: AppAssets.globe,
|
|
|
|
|
).withVerticalPadding(8);
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
: TextInputWidget(
|
|
|
|
|
labelText: LocaleKeys.nationality.tr(),
|
|
|
|
|
hintText: appState.isArabic()
|
|
|
|
|
? (authVM!.countriesList!.firstWhere((e) => e.id == (widget.nHICData!.nationalityCode ?? ""), orElse: () => NationalityCountries()).nameN ?? "")
|
|
|
|
|
: (authVM!.countriesList!.firstWhere((e) => e.id == (widget.nHICData!.nationalityCode ?? ""), orElse: () => NationalityCountries()).name ?? ""),
|
|
|
|
|
isEnable: true,
|
|
|
|
|
prefix: null,
|
|
|
|
|
isAllowRadius: false,
|
|
|
|
|
isBorderAllowed: false,
|
|
|
|
|
isAllowLeadingIcon: true,
|
|
|
|
|
isReadOnly: true,
|
|
|
|
|
leadingIcon: AppAssets.globe,
|
|
|
|
|
onChange: (value) {})
|
|
|
|
|
.paddingSymmetrical(0.h, 16.h),
|
|
|
|
|
Divider(
|
|
|
|
|
height: 1,
|
|
|
|
|
color: AppColors.greyColor,
|
|
|
|
|
),
|
|
|
|
|
TextInputWidget(
|
|
|
|
|
labelText: LocaleKeys.mobileNumber.tr(),
|
|
|
|
|
hintText: ("widget.payload.mobileNo" ?? ""),
|
|
|
|
|
controller: authVM!.phoneNumberController,
|
|
|
|
|
isEnable: true,
|
|
|
|
|
prefix: null,
|
|
|
|
|
isAllowRadius: false,
|
|
|
|
|
isBorderAllowed: false,
|
|
|
|
|
isAllowLeadingIcon: true,
|
|
|
|
|
isReadOnly: true,
|
|
|
|
|
leadingIcon: AppAssets.call,
|
|
|
|
|
onChange: (value) {})
|
|
|
|
|
.paddingSymmetrical(0.h, 16.h),
|
|
|
|
|
Divider(
|
|
|
|
|
height: 1,
|
|
|
|
|
color: AppColors.greyColor,
|
|
|
|
|
),
|
|
|
|
|
TextInputWidget(
|
|
|
|
|
labelText: LocaleKeys.dob.tr(),
|
|
|
|
|
hintText: isFromDubai ? "widget.payload.dob!" : (widget.nHICData!.dateOfBirth ?? ""),
|
|
|
|
|
controller: authVM!.dobController,
|
|
|
|
|
isEnable: true,
|
|
|
|
|
prefix: null,
|
|
|
|
|
isBorderAllowed: false,
|
|
|
|
|
isAllowLeadingIcon: true,
|
|
|
|
|
isReadOnly: true,
|
|
|
|
|
leadingIcon: AppAssets.birthday_cake,
|
|
|
|
|
selectionType: SelectionTypeEnum.calendar,
|
|
|
|
|
).paddingSymmetrical(0.h, 16.h),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
SizedBox(height: 50.h),
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
Expanded(
|
|
|
|
|
child: CustomButton(
|
|
|
|
|
text: LocaleKeys.cancel.tr(),
|
|
|
|
|
icon: AppAssets.cancel,
|
|
|
|
|
onPressed: () {
|
|
|
|
|
Navigator.of(context).pop();
|
|
|
|
|
authVM!.clearDefaults();
|
|
|
|
|
},
|
|
|
|
|
backgroundColor: AppColors.secondaryLightRedColor,
|
|
|
|
|
borderColor: AppColors.secondaryLightRedColor,
|
|
|
|
|
textColor: AppColors.primaryRedColor,
|
|
|
|
|
iconColor: AppColors.primaryRedColor,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
SizedBox(
|
|
|
|
|
width: 16,
|
|
|
|
|
),
|
|
|
|
|
Expanded(
|
|
|
|
|
child: CustomButton(
|
|
|
|
|
backgroundColor: AppColors.lightGreenColor,
|
|
|
|
|
borderColor: AppColors.lightGreenColor,
|
|
|
|
|
textColor: AppColors.textGreenColor,
|
|
|
|
|
text: LocaleKeys.confirm.tr(),
|
|
|
|
|
icon: AppAssets.confirm,
|
|
|
|
|
iconColor: AppColors.textGreenColor,
|
|
|
|
|
onPressed: () {
|
|
|
|
|
// if (isFromDubai) {
|
|
|
|
|
// if (name == null) {
|
|
|
|
|
// AppToast.showErrorToast(message: LocaleKeys.enterFullName);
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// if (!name!.contains(" ")) if (selectedGenderType == null) {
|
|
|
|
|
// AppToast.showErrorToast(message: TranslationBase.of(context).enterFullName);
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// if (selectedMaritalStatusType == null) {
|
|
|
|
|
// AppToast.showErrorToast(message: TranslationBase.of(context).chooseMaritalStatus);
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// if (selectedCountry == null) {
|
|
|
|
|
// AppToast.showErrorToast(message: TranslationBase.of(context).chooseCountry);
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
showModel(context: context);
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void showModel({required BuildContext context}) {
|
|
|
|
|
showModalBottomSheet(
|
|
|
|
|
context: context,
|
|
|
|
|
isScrollControlled: true,
|
|
|
|
|
isDismissible: false,
|
|
|
|
|
backgroundColor: Colors.transparent,
|
|
|
|
|
builder: (bottomSheetContext) => Padding(
|
|
|
|
|
padding: EdgeInsets.only(bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom),
|
|
|
|
|
child: SingleChildScrollView(
|
|
|
|
|
child: GenericBottomSheet(
|
|
|
|
|
textController: TextEditingController(),
|
|
|
|
|
isForEmail: true,
|
|
|
|
|
buttons: [
|
|
|
|
|
Padding(
|
|
|
|
|
padding: const EdgeInsets.only(bottom: 10),
|
|
|
|
|
child: CustomButton(
|
|
|
|
|
text: LocaleKeys.submit,
|
|
|
|
|
onPressed: () {
|
|
|
|
|
// if (emailAddress.text.isEmpty) {
|
|
|
|
|
// Utils.showErrorToast(TranslationBase.of(context).enterEmailAddress);
|
|
|
|
|
// return;
|
|
|
|
|
// } else {
|
|
|
|
|
// Navigator.of(context).pop();
|
|
|
|
|
// registerNow();
|
|
|
|
|
// }
|
|
|
|
|
},
|
|
|
|
|
backgroundColor: AppColors.bgGreenColor,
|
|
|
|
|
borderColor: AppColors.bgGreenColor,
|
|
|
|
|
textColor: AppColors.whiteColor),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|