import 'dart:io' show Platform; import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:doctor_app_flutter/models/auth/activation_Code_req_model.dart'; import 'package:doctor_app_flutter/screens/auth/verification_methods_screen.dart'; import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:provider/provider.dart'; import '../../config/size_config.dart'; import '../../core/viewModel/auth_view_model.dart'; import '../../routes.dart'; import '../../util/dr_app_shared_pref.dart'; import '../../util/helpers.dart'; import '../../widgets/shared/dr_app_circular_progress_Indeicator.dart'; DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); Helpers helpers = Helpers(); /* *@author: Elham Rababah *@Date:4/7/2020 *@param: *@return: *@desc: Verification Methods widget */ class VerificationMethods extends StatefulWidget { VerificationMethods({this.changeLoadingStata, this.password}); final password; final Function changeLoadingStata; @override _VerificationMethodsState createState() => _VerificationMethodsState(); } class _VerificationMethodsState extends State { MainAxisAlignment spaceBetweenMethods = MainAxisAlignment.spaceBetween; Future _loggedUserFuture; var _loggedUser; var verificationMethod; @override void initState() { super.initState(); _loggedUserFuture = getSharedPref(); } Future getSharedPref() async { sharedPref.getObj(LOGGED_IN_USER).then((userInfo) { _loggedUser = userInfo; }); } @override void didChangeDependencies() { super.didChangeDependencies(); final routeArgs = ModalRoute.of(context).settings.arguments as Map; verificationMethod = routeArgs != null ? routeArgs['verificationMethod'] : null; } @override Widget build(BuildContext context) { AuthViewModel authProv = Provider.of(context); return FutureBuilder( future: Future.wait([_loggedUserFuture]), builder: (BuildContext context, AsyncSnapshot snapshot) { switch (snapshot.connectionState) { case ConnectionState.waiting: return DrAppCircularProgressIndeicator(); default: if (snapshot.hasError) { helpers.showErrorToast('Error: ${snapshot.error}'); return Text('Error: ${snapshot.error}'); } else { return Container( width: SizeConfig.realScreenWidth * 0.80, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( hideSilentMethods() ? TranslationBase.of(context).firstStep : TranslationBase.of(context).pleaseChoose, style: TextStyle( fontSize: 3.5 * SizeConfig.textMultiplier, ), ), SizedBox( height: 20, ), Container( height: SizeConfig.realScreenHeight * 0.6, child: CustomScrollView( primary: false, slivers: [ SliverPadding( padding: const EdgeInsets.all(0), sliver: SliverGrid.count( // childAspectRatio: 0.7, crossAxisSpacing: 0, mainAxisSpacing: 5, crossAxisCount: 2, children: [ Visibility( visible: hideSilentMethods() ? false : true, child: buildFingerprintMethod( context, authProv), replacement: buildWhatsAppMethod(context, authProv), ), Visibility( visible: hideSilentMethods() ? false : true, child: buildFaceIDMethod(context, authProv), replacement: buildSMSMethod(context, authProv), ), Visibility( visible: hideSilentMethods() ? false : true, child: buildWhatsAppMethod( context, authProv)), Visibility( visible: hideSilentMethods() ? false : true, child: buildSMSMethod(context, authProv), ), ], ), ), ], ), // height: 500, ), SizedBox( // height: 20, ) ], ), ); } } }); } /* *@author: Elham Rababah *@Date:28/5/2020 *@param: BuildContext context, AuthProvider authProv *@return: Center widget *@desc: buildSMSMethod Methods widget */ Center buildSMSMethod(BuildContext context, AuthViewModel authProv) { return buildVerificationMethod( context, 'assets/images/verification_sms_icon.png', TranslationBase.of(context).sms, () { sendActivationCodeByOtpNotificationType(1, authProv); }); } /* *@author: Elham Rababah *@Date:28/5/2020 *@param: BuildContext context, AuthProvider authProv *@return: Center widget *@desc: build WhatsApp Methods widget */ Center buildWhatsAppMethod(BuildContext context, AuthViewModel authProv) { return buildVerificationMethod( context, 'assets/images/verification_whatsapp_icon.png', TranslationBase.of(context).whatsApp, () { sendActivationCodeByOtpNotificationType(2, authProv); }); } /* *@author: Elham Rababah *@Date:28/5/2020 *@param: BuildContext context, AuthProvider authProv *@return: Center widget *@desc: build FaceID Methods widget */ Center buildFaceIDMethod(BuildContext context, AuthViewModel authProv) { return buildVerificationMethod( context, 'assets/images/verification_faceid_icon.png', TranslationBase.of(context).faceId, () { sendActivationCodeByOtpNotificationType(3, authProv); }); } /* *@author: Elham Rababah *@Date:28/5/2020 *@param: BuildContext context, AuthProvider authProv *@return: Center widget *@desc: build Fingerprint Methods widget */ Center buildFingerprintMethod(BuildContext context, AuthViewModel authProv) { return buildVerificationMethod( context, 'assets/images/verification_fingerprint_icon.png', TranslationBase.of(context).fingerprint, () { sendActivationCodeByOtpNotificationType(4, authProv); }); } /* *@author: Elham Rababah *@Date:28/5/2020 *@param: BuildContext context, AuthProvider authProv *@return: Center widget *@desc: build Verification Methods widget */ Center buildVerificationMethod(context, url, dec, Function fun) { return Center( child: InkWell( onTap: fun, child: Container( // height: SizeConfig.heightMultiplier *2, height: SizeConfig.heightMultiplier * 19, width: SizeConfig.widthMultiplier * 37, padding: EdgeInsets.all(10), decoration: BoxDecoration( border: Border.all( width: 1, color: HexColor( '#CCCCCC') // <--- border width here ), borderRadius: BorderRadius.all(Radius.circular(10))), child: Column( children: [ Container( margin: EdgeInsetsDirectional.only( top: SizeConfig.heightMultiplier * 0.5), child: Image.asset( url, height: SizeConfig.heightMultiplier * 10, fit: BoxFit.cover, ), ), SizedBox( height: 10, ), Text( dec, style: TextStyle(fontSize: SizeConfig.textMultiplier * 2), ) ], ), ), ), ); } bool hideSilentMethods() { return verificationMethod == 4 || verificationMethod == 3 ? true : false; } /* *@author: Elham Rababah *@Date:15/4/2020 *@param: oTPSendType *@return: *@desc: send Activation Code By Otp Notification Type */ sendActivationCodeByOtpNotificationType(oTPSendType, AuthViewModel authProv) async { // TODO : build enum for verfication method if (oTPSendType == 1 || oTPSendType == 2) { widget.changeLoadingStata(true); int projectID = await sharedPref.getInt(PROJECT_ID); ActivationCodeModel activationCodeModel = ActivationCodeModel( facilityId: projectID, generalid: "Cs2020@2016\$2958", memberID: _loggedUser['List_MemberInformation'][0]['MemberID'], zipCode: _loggedUser['ZipCode'], mobileNumber: _loggedUser['MobileNumber'], password: widget.password); Map model = { "OTP_SendType": oTPSendType }; try { authProv .sendActivationCodeForDoctorApp(activationCodeModel) .then((res) { widget.changeLoadingStata(false); if (res['MessageStatus'] == 1) { print("VerificationCode : "+ res["VerificationCode"]); sharedPref.setString(VIDA_AUTH_TOKEN_ID, res["VidaAuthTokenID"]); sharedPref.setString(VIDA_REFRESH_TOKEN_ID, res["VidaRefreshTokenID"]); sharedPref.setString(LOGIN_TOKEN_ID, res["LogInTokenID"]); Navigator.of(context).pushReplacementNamed(VERIFY_ACCOUNT, arguments: {'model': model}); } else { print(res['ErrorEndUserMessage']); helpers.showErrorToast(res['ErrorEndUserMessage']); } }) .catchError((err) { print('$err'); widget.changeLoadingStata(false); helpers.showErrorToast(); }); } catch (e) {} } else { // TODO route to this page with parameters to inicate we should present 2 option if (Platform.isAndroid && oTPSendType == 3) { helpers.showErrorToast('Your device not support this feature'); } else { Navigator.of(context).push(MaterialPageRoute( builder: (BuildContext context) => VerificationMethodsScreen(password: widget.password,))); // Navigator.of(context).pushNamed(VERIFICATION_METHODS, // arguments: {'verificationMethod': oTPSendType}); } } } }