diff --git a/lib/config/config.dart b/lib/config/config.dart index 5781a91d..dade19d6 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -61,3 +61,6 @@ const CHANNEL = 9; const SESSION_ID = 'BlUSkYymTt'; const IS_LOGIN_FOR_DOCTOR_APP = true; const PATIENT_OUT_SA = false; + +/// Timer Info +const TIMER_MIN =10; diff --git a/lib/screens/auth/verify_account_screen.dart b/lib/screens/auth/verify_account_screen.dart index 58a54144..61d58306 100644 --- a/lib/screens/auth/verify_account_screen.dart +++ b/lib/screens/auth/verify_account_screen.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import '../../lookups/auth_lookup.dart'; @@ -28,7 +30,6 @@ class _VerifyAccountScreenState extends State { @override Widget build(BuildContext context) { - // return Container()]; return AppScaffold( isLoading: _isLoading, body: SafeArea( @@ -39,7 +40,7 @@ class _VerifyAccountScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ AuthHeader(loginType.verifyPassword), - VerifyAccount(changeLoadingStata:changeLoadingStata), + VerifyAccount(changeLoadingStata: changeLoadingStata), ], ), ), diff --git a/lib/widgets/auth/show_timer_text.dart b/lib/widgets/auth/show_timer_text.dart new file mode 100644 index 00000000..3ee67312 --- /dev/null +++ b/lib/widgets/auth/show_timer_text.dart @@ -0,0 +1,102 @@ +import 'dart:async'; + +import 'package:doctor_app_flutter/config/config.dart'; +import 'package:doctor_app_flutter/config/size_config.dart'; +import 'package:doctor_app_flutter/providers/auth_provider.dart'; +import 'package:doctor_app_flutter/providers/patients_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:hexcolor/hexcolor.dart'; +import 'package:provider/provider.dart'; + +class ShowTimerText extends StatefulWidget { + ShowTimerText({Key key, this.model}); + final model; + + @override + _ShowTimerTextState createState() => _ShowTimerTextState(); +} + +class _ShowTimerTextState extends State { + String timerText = (TIMER_MIN - 1).toString() + ':59'; + int min = TIMER_MIN - 1; + int sec = 59; + Timer _timer; + + AuthProvider authProv; + + resendCode() { + min = TIMER_MIN - 1; + sec = 59; + _timer = Timer.periodic(Duration(seconds: 1), (Timer timer) { + if (min <= 0 && sec <= 0) { + timer.cancel(); + } else { + setState(() { + sec = sec - 1; + if (sec == 0 && min == 0) { + min = 0; + sec = 0; + } else if (sec == 0) { + min = min - 1; + sec = 59; + } + timerText = min.toString() + ':' + sec.toString(); + }); + } + }); + } + + @override + void initState() { + super.initState(); + resendCode(); + } + + @override + void dispose() { + _timer.cancel(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + authProv = Provider.of(context); + return Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + InkWell( + onTap: min != 0 || sec != 0 + ? null + : () { + resendActivatioinCode(); + }, + child: Text( + min == 0 && sec == 0 ? 'Resend Login Code' : timerText, + style: TextStyle( + fontSize: 3.0 * SizeConfig.textMultiplier, + color: + min == 0 && sec == 0 ? Colors.blue : Hexcolor('#B8382C'), + fontWeight: FontWeight.bold), + ), + ), + ], + ), + ); + } + + resendActivatioinCode() { + authProv + .sendActivationCodeByOtpNotificationType(widget.model) + .then((res) => { + // print('$value') + if (res['MessageStatus'] == 1) + {resendCode()} + else + {helpers.showErrorToast(res['ErrorEndUserMessage'])} + }) + .catchError((err) { + helpers.showErrorToast(); + }); + } +} diff --git a/lib/widgets/auth/verfiy_account.dart b/lib/widgets/auth/verfiy_account.dart index 7bf1944f..0ebbeab4 100644 --- a/lib/widgets/auth/verfiy_account.dart +++ b/lib/widgets/auth/verfiy_account.dart @@ -1,7 +1,9 @@ +import 'dart:async'; + import 'package:doctor_app_flutter/config/shared_pref_kay.dart'; import 'package:doctor_app_flutter/models/clinic_model.dart'; -import 'package:doctor_app_flutter/models/doctor_profile_model.dart'; import 'package:doctor_app_flutter/models/profile_req_Model.dart'; +import 'package:doctor_app_flutter/widgets/auth/show_timer_text.dart'; import 'package:flutter/material.dart'; import 'package:hexcolor/hexcolor.dart'; import 'package:provider/provider.dart'; @@ -35,6 +37,8 @@ class _VerifyAccountState extends State { Future _loggedUserFuture; var _loggedUser; AuthProvider authProv; + bool _isInit =true; + var model; @override void initState() { super.initState(); @@ -47,6 +51,17 @@ class _VerifyAccountState extends State { }); } + @override + void didChangeDependencies() { + super.didChangeDependencies(); + if (_isInit) { + authProv = Provider.of(context); + final routeArgs = ModalRoute.of(context).settings.arguments as Map; + model = routeArgs['model']; + } + _isInit = false; + } + @override Widget build(BuildContext context) { authProv = Provider.of(context); @@ -132,10 +147,11 @@ class _VerifyAccountState extends State { onSaved: (val) { verifyAccountFormValue['digit3'] = val; - },onFieldSubmitted: (_) { - FocusScope.of(context) - .requestFocus(focusD4); - }, + }, + onFieldSubmitted: (_) { + FocusScope.of(context) + .requestFocus(focusD4); + }, validator: validateCodeDigit)), Container( width: SizeConfig.realScreenWidth * 0.20, @@ -190,14 +206,7 @@ class _VerifyAccountState extends State { color: Hexcolor('#CCCCCC'))), ), buildSizedBox(20), - Center( - child: Text( - "Resend in 4.20", - style: TextStyle( - fontSize: 3.0 * SizeConfig.textMultiplier, - ), - ), - ), + ShowTimerText(model: model), buildSizedBox(10), ]))); } @@ -401,10 +410,10 @@ class _VerifyAccountState extends State { } }).catchError((err) { print('$err'); - changeLoadingStata(false); + changeLoadingStata(false); - print('$err'); - helpers.showErrorToast(); + print('$err'); + helpers.showErrorToast(); }); } } diff --git a/lib/widgets/auth/verification_methods.dart b/lib/widgets/auth/verification_methods.dart index 061d85c6..3a7fa482 100644 --- a/lib/widgets/auth/verification_methods.dart +++ b/lib/widgets/auth/verification_methods.dart @@ -270,7 +270,7 @@ class _VerificationMethodsState extends State { widget.changeLoadingStata(false); if (res['MessageStatus'] == 1) { - Navigator.of(context).pushNamed(VERIFY_ACCOUNT); + Navigator.of(context).pushNamed(VERIFY_ACCOUNT, arguments: {'model':model}); } else { print(res['ErrorEndUserMessage']); helpers.showErrorToast(res['ErrorEndUserMessage']);