From 1f253c54e99e56d38c2bb58054e3f45ed6a78261 Mon Sep 17 00:00:00 2001 From: qzl Date: Thu, 26 Feb 2026 10:58:29 +0800 Subject: [PATCH] feat(auth): add countdown timer for resend button --- .../screens/register_verification_screen.dart | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/apps/lib/features/auth/ui/screens/register_verification_screen.dart b/apps/lib/features/auth/ui/screens/register_verification_screen.dart index 37070c7..d719379 100644 --- a/apps/lib/features/auth/ui/screens/register_verification_screen.dart +++ b/apps/lib/features/auth/ui/screens/register_verification_screen.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:go_router/go_router.dart'; @@ -43,13 +45,38 @@ class RegisterVerificationView extends StatefulWidget { class _RegisterVerificationViewState extends State { final _codeController = TextEditingController(); + Timer? _countdownTimer; + int _countdown = 60; + + @override + void initState() { + super.initState(); + _startCountdown(); + } @override void dispose() { + _countdownTimer?.cancel(); _codeController.dispose(); super.dispose(); } + void _startCountdown() { + setState(() { + _countdown = 60; + }); + _countdownTimer?.cancel(); + _countdownTimer = Timer.periodic(const Duration(seconds: 1), (timer) { + if (_countdown > 0) { + setState(() { + _countdown--; + }); + } else { + timer.cancel(); + } + }); + } + Future _handleComplete() async { final cubit = context.read(); cubit.verificationCodeChanged(_codeController.text);