import 'dart:convert'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/widgets/appbar/app_bar_widget.dart'; import 'package:hmg_patient_app_new/widgets/input_widget.dart'; import 'package:provider/provider.dart'; class Register extends StatefulWidget { final Function? changePageViewIndex; const Register({Key? key, this.changePageViewIndex}) : super(key: key); @override _Register createState() => _Register(); } class _Register extends State { @override void initState() { getPatientOccupationList(); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( appBar: CustomAppBar( onBackPressed: () {}, onLanguageChanged: (String value) {}, ), body: Column( children: [ Expanded( child: ListView( padding: EdgeInsets.all(21), physics: BouncingScrollPhysics(), children: [ SizedBox(height: 10), Padding( padding: EdgeInsets.all(10), child: Text( LocaleKeys.enterNationalId.tr(), style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.64, height: 23 / 16), )), SizedBox(height: 10), PhoneNumberSelectorWidget(onNumberChange: (value) => {}, onCountryChange: (value) => ), SizedBox(height: 12), TextInputWidget(labelText: LocaleKeys.nationalIdNumber.tr(), hintText: "Xxxxxxxxx", controller: TextEditingController()), SizedBox(height: 20), Row( children: [ Expanded( child: Row( children: [ Radio( value: 1, groupValue: isHijri, onChanged: (value) { }, ), Text(LocaleKeys.hijriDate.tr()), ], ), ), Expanded( child: Row( children: [ Radio( value: 0, groupValue: isHijri, onChanged: (value) { }, ), Text(LocaleKeys.gregorianDate.tr()), ], ), ), ], ), Row(children: [ Container( width: SizeConfig.realScreenWidth! * .89, child: isHijri == 1 ? Directionality( textDirection: TextDirection.ltr, child: inputWidget(TranslationBase.of(context).dob, "DD/MM/YYYYY", dob, isNumber: false, suffix: Icon( Icons.calendar_today, size: 16, ))) : Container( child: InkWell( onTap: () { if (isHijri != null) _selectDate(context); }, child: Directionality( textDirection: TextDirection.ltr, child: inputWidget(TranslationBase.of(context).dob, "DD/MM/YYYYY", dobEn, isNumber: false, isEnable: false, suffix: Icon( Icons.calendar_today, size: 16, )))))), ]) ], ), ), Container( width: double.maxFinite, // height: 80.0, color: Colors.white, // margin: EdgeInsets.only(bottom: 50.0), child: Row( children: [ Expanded( child: Padding( padding: EdgeInsets.all(10), child: DefaultButton(TranslationBase.of(context).cancel, () { Navigator.of(context).pop(); locator().loginRegistration.registration_cancel(step: 'enter details'); }, textColor: Colors.white, color: Color(0xffD02127))), ), Expanded( child: Padding( padding: EdgeInsets.all(10), child: DefaultButton(TranslationBase.of(context).next, () { startRegistration(); locator().loginRegistration.registration_enter_details(); }, textColor: Colors.white, color: isButtonDisabled == true ? Colors.grey : Color(0xff359846))), ), ], ), ) ], ), ); } Future _selectDate(BuildContext context) async { DatePicker.showDatePicker( context, showTitleActions: true, minTime: DateTime(DateTime.now().year - 100, 1, 1), maxTime: DateTime.now(), onConfirm: (date) { selectedDate = date; setState(() { final intl.DateFormat dateFormat = intl.DateFormat('dd/MM/yyyy'); dobEn.text = dateFormat.format(date); }); }, currentTime: DateTime.now(), ); } Widget inputWidget(String _labelText, String _hintText, TextEditingController _controller, {String? prefix, bool isEnable = true, bool hasSelection = false, bool isNumber = true, Icon? suffix}) { return Container( padding: EdgeInsets.only(left: 16, right: 16, bottom: 15, top: 15), alignment: Alignment.center, decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), color: Colors.white, border: Border.all( color: Color(0xffefefef), width: 1, ), ), child: InkWell( onTap: hasSelection ? () {} : null, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( _labelText, style: TextStyle( fontSize: 11, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.44, ), ), TextField( enabled: isEnable, scrollPadding: EdgeInsets.zero, keyboardType: isNumber ? TextInputType.numberWithOptions(signed: true) : TextInputType.datetime, controller: _controller, onChanged: (value) => {validateForm()}, style: TextStyle( fontSize: 14, height: 21 / 14, fontWeight: FontWeight.w400, color: Color(0xff2B353E), letterSpacing: -0.44, ), decoration: InputDecoration( isDense: true, hintText: _hintText, hintStyle: TextStyle( fontSize: 14, height: 21 / 14, fontWeight: FontWeight.w400, color: Color(0xff575757), letterSpacing: -0.56, ), prefixIconConstraints: BoxConstraints(minWidth: 50), prefixIcon: prefix == null ? null : Text( "+" + prefix, style: TextStyle( fontSize: 14, height: 21 / 14, fontWeight: FontWeight.w500, color: Color(0xff2E303A), letterSpacing: -0.56, ), ), contentPadding: EdgeInsets.zero, border: InputBorder.none, focusedBorder: InputBorder.none, enabledBorder: InputBorder.none, ), ), ], ), ), if (hasSelection) Icon(Icons.keyboard_arrow_down_outlined), if (suffix != null) suffix ], ), ), ); } startRegistration() { final intl.DateFormat dateFormat = intl.DateFormat('dd/MM/yyyy'); if (isButtonDisabled == false) { var request = CheckPatientForRegistration(); request.patientMobileNumber = int.parse(mobileNo); request.zipCode = countryCode; request.patientOutSA = countryCode == '966' ? 0 : 1; request.patientIdentificationID = int.parse(nationalIDorFile.text); request.patientID = 0; request.isRegister = true; request.dob = isHijri == 1 ? dob.text : dateFormat.format(selectedDate); request.isHijri = isHijri; this.checkPatientForRegisteration(request); } } checkPatientForRegisteration(request) { int languageID = Provider.of(context, listen: false).isArabic ? 1 : 2; GifLoaderDialogUtils.showMyDialog(context); this.authService.checkPatientForRegisteration(request, languageID).then((response) => {checkUserStatus(response, request)}).catchError((err) { GifLoaderDialogUtils.hideDialog(context); ConfirmDialog dialog = new ConfirmDialog( context: context, confirmMessage: err, okText: TranslationBase.of(context).confirm, cancelText: TranslationBase.of(context).cancel_nocaps, okFunction: () => { ConfirmDialog.closeAlertDialog(context), Navigator.of(context).push(FadePage(page: Register())), }, cancelFunction: () => {ConfirmDialog.closeAlertDialog(context)}); dialog.showAlertDialog(context); }); } void validateForm() { if (util.validateIDBox(nationalIDorFile.text, loginType) == true && mobileNo.length >= 9 && util.isSAUDIIDValid(nationalIDorFile.text, loginType) == true && isHijri != null && (dobEn.text != null || dob.text != null)) { setState(() { isButtonDisabled = false; }); } else { setState(() { isButtonDisabled = true; }); } } checkUserStatus(response, CheckPatientForRegistration request) async { GifLoaderDialogUtils.hideDialog(context); if (response is Map) { var nRequest = request.toJson(); nRequest['LogInTokenID'] = response['LogInTokenID']; if (response['hasFile'] == true) { ConfirmDialog dialog = new ConfirmDialog( context: context, confirmMessage: response['ErrorEndUserMessage'], okText: TranslationBase.of(context).ok, cancelText: TranslationBase.of(context).cancel, okFunction: () { AlertDialogBox.closeAlertDialog(context); sharedPref.setObject(REGISTER_DATA_FOR_LOGIIN, nRequest); LoginRegistration.loginMethod = 1; // 1=NationalID, by default from Registration Navigator.of(context).push(FadePage(page: Login())); }, cancelFunction: () {}) .showAlertDialog(context); } else { final intl.DateFormat dateFormat = intl.DateFormat('dd/MM/yyyy'); nRequest['forRegister'] = true; nRequest['isRegister'] = true; nRequest["PatientIdentificationID"] = nRequest["PatientIdentificationID"].toString(); nRequest['dob'] = isHijri == 1 ? dob.text : dateFormat.format(selectedDate); nRequest['isHijri'] = isHijri; sharedPref.setObject(REGISTER_DATA_FOR_LOGIIN, nRequest); sharedPref.setString(LOGIN_TOKEN_ID, response['LogInTokenID']); if (request.patientOutSA == 0) { this.chekUserData(response['LogInTokenID']); } else { Navigator.of(context).push(FadePage(page: ConfirmLogin(changePageViewIndex: widget.changePageViewIndex, fromRegistration: true, isDubai: true))); } } } else { // if (response['ErrorCode'] == '-986') { //AppToast.showErrorToast(message: response); AlertDialogBox( context: context, confirmMessage: response, okText: TranslationBase.of(context).ok, okFunction: () { AlertDialogBox.closeAlertDialog(context); Navigator.of(context).pop(); }).showAlertDialog(context); //} } } chekUserData(loginToken) { // let m = hijri(this.dateOfBirth).locale('en'); // // const dateHijri = m.format('iDD/iMM/iYYYY'); // const request = { // PatientIdentificationID: this.id.toString(), // // TokenID: token, // DOB: this.dateOption === '1' ? this.dateOfBirth : moment(this.dateOfBirth).format('DD/MM/YYYY'), // IsHijri: Number(this.dateOption) // } final intl.DateFormat dateFormat = intl.DateFormat('dd/MM/yyyy'); GifLoaderDialogUtils.showMyDialog(context); var request = CheckUserStatusRequest(); request.patientIdentificationID = nationalIDorFile.text; request.dOB = isHijri == 1 ? dob.text : dateFormat.format(selectedDate); request.isHijri = isHijri; request.patientOutSA = countryCode == '966' ? 0 : 1; this.authService.checkUserStatus(request).then((result) => { GifLoaderDialogUtils.hideDialog(context), if (result is Map) { result = CheckUserStatusResponse.fromJson(result as Map), sharedPref.setObject(NHIC_DATA, result), // widget.changePageViewIndex!(1), Navigator.of(context).push(FadePage(page: ConfirmLogin(changePageViewIndex: widget.changePageViewIndex, fromRegistration: true))), } else { AppToast.showErrorToast(message: result != null ? result : TranslationBase.of(context).somethingWentWrong), } }); } getPatientOccupationList() async { patientOccupationList.clear(); await authService.getPatientOccupationList().then((result) { sharedPref.setString(PATIENT_OCCUPATION_LIST, json.encode(result['GetOccupationLst'])); }).catchError((err) { AppToast.showErrorToast(message: err); }); } }