family screen & widgets

pull/76/head
aamir-csol 1 month ago
parent a79dcad221
commit f9bfc131a8

@ -808,6 +808,9 @@ class ApiConsts {
static final String registerUser = 'Services/Authentication.svc/REST/PatientRegistration';
static final String addFamilyFile = 'Services/Patients.svc/REST/ShareFamilyFileService';
static final String sendFamilyFileActivation = 'Services/Authentication.svc/REST/SendActivationCodeForFamilyFile';
static final String checkActivationCodeForFamily = 'Services/Authentication.svc/REST/CheckActivationCodeForFamilyFile';
// static values for Api
static final double appVersionID = 18.7;

@ -125,6 +125,8 @@ class RequestUtils {
required bool isForRegister,
required bool isFileNo,
dynamic payload,
required bool isExcludedUser,
int? responseID,
}) {
AppState _appState = getIt.get<AppState>();
var request = SendActivationRequest();
@ -156,6 +158,15 @@ class RequestUtils {
request.isRegister = false;
}
request.deviceTypeID = request.searchType;
if (isExcludedUser) {
//INFO: Only for Excluded User Family Member Addition
request.isPatientExcluded = isExcludedUser;
request.responseID = responseID;
request.status = 2;
request.familyRegionID = zipCode == CountryEnum.saudiArabia.countryCode ? 1 : 2;
}
return request;
}

@ -17,12 +17,9 @@ abstract class AuthenticationRepo {
Future<Either<Failure, GenericApiModel<dynamic>>> checkPatientAuthentication({required dynamic checkPatientAuthenticationReq});
Future<Either<Failure, GenericApiModel<dynamic>>> sendActivationCodeRepo({required dynamic sendActivationCodeReq, String? languageID, bool isRegister = false});
Future<Either<Failure, GenericApiModel<dynamic>>> sendActivationCodeRepo({required dynamic sendActivationCodeReq, String? languageID, bool isRegister = false, bool isExcludedUser = false});
Future<Either<Failure, GenericApiModel<dynamic>>> checkActivationCodeRepo(
{required dynamic newRequest, // could be CheckActivationCodeReq or CheckActivationCodeRegisterReq
required String? activationCode,
required bool isRegister});
Future<Either<Failure, GenericApiModel<dynamic>>> checkActivationCodeRepo({required dynamic newRequest, required String? activationCode, required bool isRegister, bool isExcludedUser = false});
Future<Either<Failure, GenericApiModel<dynamic>>> checkIfUserAgreed({required dynamic commonAuthanticatedRequest});
@ -134,6 +131,7 @@ class AuthenticationRepoImp implements AuthenticationRepo {
required dynamic sendActivationCodeReq,
String? languageID,
bool isRegister = false,
bool isExcludedUser = false,
}) async {
int isOutKsa = (sendActivationCodeReq.zipCode == '966' || sendActivationCodeReq.zipCode == '+966') ? 0 : 1;
sendActivationCodeReq.patientOutSA = isOutKsa;
@ -144,7 +142,11 @@ class AuthenticationRepoImp implements AuthenticationRepo {
Failure? failure;
await apiClient.post(
isRegister ? ApiConsts.sendActivationCodeRegister : ApiConsts.sendActivationCode,
isExcludedUser
? ApiConsts.sendFamilyFileActivation
: isRegister
? ApiConsts.sendActivationCodeRegister
: ApiConsts.sendActivationCode,
body: sendActivationCodeReq.toJson(),
onFailure: (error, statusCode, {messageStatus, failureType}) {
failure = failureType;
@ -176,6 +178,7 @@ class AuthenticationRepoImp implements AuthenticationRepo {
required dynamic newRequest, // could be CheckActivationCodeReq or CheckActivationCodeRegisterReq
required String? activationCode,
required bool isRegister,
bool isExcludedUser = false,
}) async {
if (isRegister) {
newRequest["activationCode"] = activationCode ?? "0000";
@ -189,7 +192,11 @@ class AuthenticationRepoImp implements AuthenticationRepo {
newRequest.isRegister = false;
}
final endpoint = isRegister ? ApiConsts.checkActivationCodeRegister : ApiConsts.checkActivationCode;
final endpoint = isExcludedUser
? ApiConsts.checkActivationCodeForFamily
: isRegister
? ApiConsts.checkActivationCodeRegister
: ApiConsts.checkActivationCode;
try {
GenericApiModel<dynamic>? apiResponse;

@ -344,7 +344,14 @@ class AuthenticationViewModel extends ChangeNotifier {
}
Future<void> sendActivationCode(
{required OTPTypeEnum otpTypeEnum, required String nationalIdOrFileNumber, required String phoneNumber, required bool isForRegister, dynamic payload, bool isComingFromResendOTP = false}) async {
{required OTPTypeEnum otpTypeEnum,
required String nationalIdOrFileNumber,
required String phoneNumber,
required bool isForRegister,
dynamic payload,
bool isComingFromResendOTP = false,
bool isExcludedUser = false,
int? responseID}) async {
var request = RequestUtils.getCommonRequestSendActivationCode(
otpTypeEnum: otpTypeEnum,
mobileNumber: phoneNumber,
@ -360,6 +367,8 @@ class AuthenticationViewModel extends ChangeNotifier {
? false
: true,
payload: payload,
isExcludedUser: isExcludedUser,
responseID: responseID,
);
// TODO: GET APP SMS SIGNATURE HERE
@ -369,7 +378,8 @@ class AuthenticationViewModel extends ChangeNotifier {
_appState.setUserRegistrationPayload = RegistrationDataModelPayload.fromJson(payload);
}
final resultEither = await _authenticationRepo.sendActivationCodeRepo(sendActivationCodeReq: request, isRegister: checkIsUserComingForRegister(request: payload), languageID: 'er');
final resultEither =
await _authenticationRepo.sendActivationCodeRepo(sendActivationCodeReq: request, isRegister: checkIsUserComingForRegister(request: payload), languageID: 'er', isExcludedUser: isExcludedUser);
resultEither.fold(
(failure) async => await _errorHandlerService.handleError(failure: failure),
@ -384,7 +394,9 @@ class AuthenticationViewModel extends ChangeNotifier {
} else {
if (apiResponse.data != null && apiResponse.data['isSMSSent'] == true) {
LoaderBottomSheet.hideLoader();
if (!isComingFromResendOTP) navigateToOTPScreen(otpTypeEnum: otpTypeEnum, phoneNumber: phoneNumber, isComingFromRegister: checkIsUserComingForRegister(request: payload), payload: payload);
if (!isComingFromResendOTP)
navigateToOTPScreen(
otpTypeEnum: otpTypeEnum, phoneNumber: phoneNumber, isComingFromRegister: checkIsUserComingForRegister(request: payload), payload: payload, isExcludedUser: isExcludedUser);
} else {
// TODO: Handle isSMSSent false
// navigateToOTPScreen(otpTypeEnum: otpTypeEnum, phoneNumber: phoneNumber);
@ -403,7 +415,13 @@ class AuthenticationViewModel extends ChangeNotifier {
}
Future<void> checkActivationCode(
{required String? activationCode, required OTPTypeEnum otpTypeEnum, required Function(String? message) onWrongActivationCode, Function()? onResendActivation}) async {
{required String? activationCode,
required OTPTypeEnum otpTypeEnum,
required Function(String? message) onWrongActivationCode,
Function()? onResendActivation,
bool isExcludedUser = false,
dynamic requestID,
dynamic responseID}) async {
bool isForRegister = (_appState.getUserRegistrationPayload.healthId != null || _appState.getUserRegistrationPayload.patientOutSa == true || _appState.getUserRegistrationPayload.patientOutSa == 1);
final request = RequestUtils.getCommonRequestWelcome(
@ -429,6 +447,13 @@ class AuthenticationViewModel extends ChangeNotifier {
//TODO: Error Here IN Zip Code.
loginType: loginTypeEnum.toInt)
.toJson();
if (isExcludedUser) {
request['PatientShareRequestID'] = requestID;
request['ResponseID'] = responseID;
request['Status'] = 3;
}
LoaderBottomSheet.showLoader();
if (isForRegister) {
if (_appState.getUserRegistrationPayload.patientOutSa == 0) request['DOB'] = _appState.getUserRegistrationPayload.dob;
@ -464,7 +489,8 @@ class AuthenticationViewModel extends ChangeNotifier {
}
});
} else {
final resultEither = await _authenticationRepo.checkActivationCodeRepo(newRequest: CheckActivationCodeRegisterReq.fromJson(request), activationCode: activationCode, isRegister: false);
final resultEither = await _authenticationRepo.checkActivationCodeRepo(
newRequest: CheckActivationCodeRegisterReq.fromJson(request), activationCode: activationCode, isRegister: false, isExcludedUser: isExcludedUser);
resultEither.fold(
(failure) async => await _errorHandlerService.handleError(
@ -573,12 +599,13 @@ class AuthenticationViewModel extends ChangeNotifier {
_navigationService.pushAndReplace(AppRoutes.landingScreen);
}
Future<void> navigateToOTPScreen({required OTPTypeEnum otpTypeEnum, required String phoneNumber, required bool isComingFromRegister, dynamic payload}) async {
Future<void> navigateToOTPScreen({required OTPTypeEnum otpTypeEnum, required String phoneNumber, required bool isComingFromRegister, dynamic payload, bool isExcludedUser = false}) async {
_navigationService.pushToOtpScreen(
phoneNumber: phoneNumber,
checkActivationCode: (int activationCode) async {
await checkActivationCode(
activationCode: activationCode.toString(),
isExcludedUser: isExcludedUser,
otpTypeEnum: otpTypeEnum,
onWrongActivationCode: (String? value) {
onWrongActivationCode(message: value);

@ -89,9 +89,11 @@ class _FamilyMedicalScreenState extends State<FamilyMedicalScreen> {
AuthenticationViewModel authVm = getIt.get<AuthenticationViewModel>();
return showCommonBottomSheetWithoutHeight(context,
title: "Add Family Member",
useSafeArea: true,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
"Please fill the below field to add a new family member to your profile".toText16(color: AppColors.textColor, weight: FontWeight.w500),
SizedBox(height: 20.h),
@ -104,10 +106,7 @@ class _FamilyMedicalScreenState extends State<FamilyMedicalScreen> {
countryList: CountryEnum.values,
onCountryChange: authVm.onCountryChange,
).paddingOnly(top: 8.h, bottom: 16.h),
Divider(
height: 1.h,
color: AppColors.spacerLineColor,
),
Divider(height: 1.h, color: AppColors.spacerLineColor),
TextInputWidget(
labelText: LocaleKeys.nationalIdNumber.tr(),
hintText: "xxxxxxxxx",
@ -123,13 +122,10 @@ class _FamilyMedicalScreenState extends State<FamilyMedicalScreen> {
padding: EdgeInsets.symmetric(vertical: 8.h),
leadingIcon: AppAssets.student_card,
).paddingOnly(top: 8.h, bottom: 8.h),
Divider(
height: 1.h,
color: AppColors.spacerLineColor,
),
Divider(height: 1.h, color: AppColors.spacerLineColor),
TextInputWidget(
labelText: LocaleKeys.phoneNumber.tr(),
hintText: "574345434",
hintText: "",
controller: authVm.phoneNumberController,
isEnable: true,
prefix: authVm.selectedCountrySignup.countryCode,
@ -140,35 +136,7 @@ class _FamilyMedicalScreenState extends State<FamilyMedicalScreen> {
keyboardType: TextInputType.number,
padding: EdgeInsets.symmetric(vertical: 8.h),
leadingIcon: AppAssets.smart_phone,
).paddingOnly(top: 8.h, bottom: 4),
//TextInputWidget(
// labelText: widget.isForEmail ? LocaleKeys.email.tr() : LocaleKeys.phoneNumber.tr(),
// hintText: widget.isForEmail ? "demo@gmail.com" : "5xxxxxxxx",
// controller: widget.textController!,
// focusNode: _textFieldFocusNode,
// autoFocus: widget.autoFocus,
// padding: EdgeInsets.all(8.h),
// keyboardType: widget.isForEmail ? TextInputType.emailAddress : TextInputType.number,
// onChange: (value) {
// if (widget.onChange != null) {
// widget.onChange!(value);
// }
// },
// onCountryChange: (value) {
// if (widget.onCountryChange != null) {
// widget.onCountryChange!(value);
// }
// },
// isEnable: true,
// isReadOnly: widget.isFromSavedLogin,
// prefix: widget.isForEmail ? null : widget.countryCode,
// isBorderAllowed: false,
// isAllowLeadingIcon: true,
// fontSize: 13.h,
// isCountryDropDown: widget.isEnableCountryDropdown,
// leadingIcon: widget.isForEmail ? AppAssets.email : AppAssets.smart_phone,
// )
).paddingOnly(top: 8.h, bottom: 4.h),
],
),
),
@ -184,7 +152,15 @@ class _FamilyMedicalScreenState extends State<FamilyMedicalScreen> {
onOkPress: () {
Navigator.of(context).pop();
},
)) {}
)) {
authVm.sendActivationCode(
otpTypeEnum: OTPTypeEnum.sms,
nationalIdOrFileNumber: authVm.nationalIdController.text,
phoneNumber: authVm.phoneNumberController.text,
isForRegister: false,
isExcludedUser: true,
responseID: 123);
}
},
icon: AppAssets.add_icon,
height: 56.h,

@ -73,9 +73,8 @@ class DialogServiceImp implements DialogService {
Future<void> showCommonBottomSheetWithoutH({String? label, required String message, required Function() onOkPressed, Function()? onCancelPressed}) async {
final context = navigationService.navigatorKey.currentContext;
if (context == null) return;
showCommonBottomSheetWithoutHeight(context, title: label ?? "", child: exceptionBottomSheetWidget(context: context, message: message, onOkPressed: onOkPressed, onCancelPressed: onCancelPressed),
callBackFunc: () {
});
showCommonBottomSheetWithoutHeight(context,
title: label ?? "", child: exceptionBottomSheetWidget(context: context, message: message, onOkPressed: onOkPressed, onCancelPressed: onCancelPressed), callBackFunc: () {});
}
@override

@ -113,6 +113,8 @@ void showCommonBottomSheetWithoutHeight(
bool isFullScreen = true,
bool isDismissible = true,
Widget? titleWidget,
bool useSafeArea = false,
}) {
showModalBottomSheet<String>(
sheetAnimationStyle: AnimationStyle(
@ -124,6 +126,7 @@ void showCommonBottomSheetWithoutHeight(
showDragHandle: false,
isDismissible: isDismissible,
backgroundColor: AppColors.bottomSheetBgColor,
useSafeArea: useSafeArea,
builder: (BuildContext context) {
return SafeArea(
top: false,

Loading…
Cancel
Save