import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:local_auth/error_codes.dart' as auth_error; import 'package:local_auth/local_auth.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.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/dr_app_toast_msg.dart'; import '../../widgets/shared/dr_app_circular_progress_Indeicator.dart'; DrAppSharedPreferances sharedPref = new DrAppSharedPreferances(); class KnownUserLogin extends StatefulWidget { @override _KnownUserLoginState createState() => _KnownUserLoginState(); } class _KnownUserLoginState extends State { Future _prefs = SharedPreferences.getInstance(); final LocalAuthentication auth = LocalAuthentication(); String _authorized = "not Authorized"; bool _isAuthenticating = false; Future _loggedUserFuture; var _loggedUser; int _loginType = 1; String _platformImei; Future _loginTypeFuture; Map _loginTypeMap = { 1: { "name": "SMS", 'imageUrl': 'assets/images/verification_sms_lg_icon.png', }, 2: { "name": "FingerPrint", 'imageUrl': 'assets/images/verification_fingerprint_lg_icon.png' }, 3: { "name": "Face", 'imageUrl': 'assets/images/verification_faceid_lg_icon.png' }, 4: { "name": "WhatsApp", 'imageUrl': 'assets/images/verification_whatsapp_lg_icon.png' } }; Future getSharedPref() async { sharedPref.getObj(LOGGED_IN_USER).then((userInfo) { _loggedUser = userInfo; }); sharedPref.getString('platformImei').then((imei) { _platformImei = imei; }); } @override void initState() { super.initState(); _loggedUserFuture = getSharedPref(); } @override Widget build(BuildContext context) { AuthViewModel authProv = Provider.of(context); // var imeiModel = {'IMEI': _platformImei}; // _loginTypeFuture = authProv.selectDeviceImei(imeiModel); return FutureBuilder( future: Future.wait([_loggedUserFuture, _loginTypeFuture]), builder: (BuildContext context, AsyncSnapshot snapshot) { _loginTypeFuture.then((res) { _loginType = 2; //res['SELECTDeviceIMEIbyIMEI_List'][0]['LogInType']; }).catchError((err) { print('${err}'); DrAppToastMsg.showErrorToast(err); }); switch (snapshot.connectionState) { case ConnectionState.waiting: return DrAppCircularProgressIndeicator(); default: if (snapshot.hasError) { DrAppToastMsg.showErrorToast('Error: ${snapshot.error}'); return Text('Error: ${snapshot.error}'); } else { return Column( mainAxisAlignment: MainAxisAlignment.start, children: [ Stack(children: [ Container( decoration: BoxDecoration( border: Border.all( color: HexColor('#CCCCCC'), ), borderRadius: BorderRadius.circular(50)), margin: const EdgeInsets.fromLTRB(0, 20.0, 30, 0), child: Row( // mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Container( height: 100, width: 100, decoration: new BoxDecoration( // color: Colors.green, // border color shape: BoxShape.circle, border: Border.all(color: HexColor('#CCCCCC'))), child: CircleAvatar( child: Image.asset( 'assets/images/dr_avatar.png', fit: BoxFit.cover, ), )), Container( margin: EdgeInsets.symmetric( vertical: 3, horizontal: 15), child: Column( // mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( _loggedUser['List_MemberInformation'][0] ['MemberName'], style: TextStyle( color: HexColor('515A5D'), fontSize: 2.5 * SizeConfig.textMultiplier, fontWeight: FontWeight.w800), ), Text( 'ENT Spec', style: TextStyle( color: HexColor('515A5D'), fontSize: 1.5 * SizeConfig.textMultiplier), ) ], ), ) ], ), ), Positioned( top: 7, right: 70, child: Image.asset( 'assets/images/close_icon.png', fit: BoxFit.cover, )) ]), buildVerificationTypeImageContainer(), buildButtonsContainer(context) ], ); } } }); } Container buildVerificationTypeImageContainer() { print('${_loginTypeMap[_loginType]}'); return Container( height: 200, width: 200, child: Center( child: Image.asset( _loginTypeMap[_loginType]['imageUrl'], fit: BoxFit.cover, ), )); } // Container buildButtonsContainer(BuildContext context) { return Container( margin: EdgeInsetsDirectional.fromSTEB(0, 0, 30, 0), width: double.infinity, child: Column( children: [ RaisedButton( onPressed: _authenticate, elevation: 0.0, child: Container( width: double.infinity, height: 50, child: Center( child: Text( "Verify using ${_loginTypeMap[_loginType]['name']}" .toUpperCase(), // textAlign: TextAlign.center, style: TextStyle( color: Colors.white, fontSize: 2.5 * SizeConfig.textMultiplier), ), ), ), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), side: BorderSide(width: 0.5, color: HexColor('#CCCCCC'))), ), SizedBox( height: 10, ), Container( width: double.infinity, height: 50, child: FlatButton( onPressed: () { navigateToMoreOption(); }, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), side: BorderSide( width: 1, color: Theme.of(context).primaryColor)), child: Text( "More verification Options".toUpperCase(), style: TextStyle( color: Theme.of(context).primaryColor, fontSize: 2.5 * SizeConfig.textMultiplier), )), ), SizedBox( height: 20, ), ], ), ); } navigateToMoreOption() { Navigator.of(context).pushNamed(VERIFICATION_METHODS); } _authenticate() { if (_loginType == 1) { _authenticateBySMS(); } if (_loginType == 2) { _authenticateByFingerPrint(); } if (_loginType == 3) { _authenticateByFace(); } if (_loginType == 4) { _authenticateByWhatsApp(); } } Future _authenticateByFingerPrint() async { _getAvailableBiometrics(); bool authenticated = false; try { setState(() { _isAuthenticating = true; _authorized = 'Authenticating'; }); authenticated = await auth.authenticateWithBiometrics( localizedReason: 'Scan your fingerprint to authenticate', useErrorDialogs: true, stickyAuth: false); setState(() { _isAuthenticating = false; _authorized = 'Authenticating'; }); } on PlatformException catch (e) { print(e); } if (!mounted) return; final String message = authenticated ? 'Authorized' : 'Not Authorized'; if (message == 'Authorized') { navigateToHome(); } setState(() { print('_authorized' + _authorized); _authorized = message; print('_authorized' + _authorized); }); } Future _authenticateBySMS() { print('_authenticateBySMS'); } Future _authenticateByFace() { print('_authenticateByFace'); } Future _authenticateByWhatsApp() { print('_authenticateByWhatsApp'); } Future _getAvailableBiometrics() async { List availableBiometrics; try { availableBiometrics = await auth.getAvailableBiometrics(); } on PlatformException catch (e) { print(e); if (e.code == auth_error.notAvailable) { showErorrMsg("Auth Methods Not Available"); } else if (e.code == auth_error.passcodeNotSet) { showErorrMsg("Auth Methods Not passcodeNotSet"); } else if (e.code == auth_error.permanentlyLockedOut) { showErorrMsg("Auth Methods Not permanentlyLockedOut"); } } if (!mounted) return; setState(() { print('availableBiometrics $availableBiometrics'); }); } navigateToHome() { Navigator.of(context).pushNamed(HOME); } showErorrMsg(localMsg) { DrAppToastMsg.showErrorToast(localMsg); } }