import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:get/get.dart'; import 'package:pin_code_fields/pin_code_fields.dart'; import '../../../appLocalization/language_key.dart'; import '../../../constants/image_constants.dart'; import '../../../controller/base_controller.dart'; import '../../../serverRequest/all_request.dart'; import '../../../customWidget/dialogues/success_dialogue.dart'; class VerifyOtpController extends GetxController { final baseController = Get.find<BaseController>(); RxInt counter = 90.obs; Timer? timer; StreamController<ErrorAnimationType> errorController = StreamController<ErrorAnimationType>(); TextEditingController otpTextController = TextEditingController(); RxBool verifyLoader = false.obs; @override void onInit() { startTimer(); AllHttpRequest().generateAuth(); super.onInit(); } @override void onClose() { timer?.cancel(); super.onClose(); } onClickVerifyHandler(BuildContext context) { verifyLoader(true); Future.delayed( const Duration(seconds: 2), () => { if (baseController.generatedOtp.value == otpTextController.value.text) { verificationSuccess( context: context, assetName: ImageConstants.verificationSuccess, title: verifySuccessTitle.tr, subtitle: verifySuccessSubTitle.tr) } else { resetLoading(), Fluttertoast.showToast(msg: incorrectOTPError.tr) }, }); update(); } onClickResendOTP() { resetTimer(); startTimer(); resetLoading(); ///During resend otp auth is fetched from state variable and is not regenerated AllHttpRequest().sendOtp(); update(); } startTimer() { ///Decrease the counter value up to 0 timer = Timer.periodic(const Duration(seconds: 1), (timer) { if (counter > 0) { counter--; } else { timer.cancel(); } update(); }); } resetTimer() { ///Set counter to 90s counter = 90.obs; } resetLoading() { ///Reset Loading and clear otp in pintextfield otpTextController.clear(); verifyLoader(false); } }