import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:pinput/pinput.dart'; import 'package:provider/provider.dart'; import 'package:phone_login/auth/auth_state.dart'; class SmsVerificationScreen extends StatefulWidget { const SmsVerificationScreen({super.key}); @override State createState() => _SmsVerificationScreenState(); } class _SmsVerificationScreenState extends State { final TextEditingController _pinController = TextEditingController(); final FocusNode _pinFocusNode = FocusNode(); String? _verificationId; @override void initState() { super.initState(); // In a real app, the verificationId would be passed from the previous screen // For now, we'll store it in a global variable or use another mechanism } @override void dispose() { _pinController.dispose(); _pinFocusNode.dispose(); super.dispose(); } @override Widget build(BuildContext context) { final authState = Provider.of(context); return Scaffold( appBar: AppBar(title: const Text('SMS Verification')), body: Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ const Text( 'Enter the 6-digit code sent to your phone', textAlign: TextAlign.center, style: TextStyle(fontSize: 16), ), const SizedBox(height: 20), Pinput( length: 6, controller: _pinController, focusNode: _pinFocusNode, onCompleted: (pin) async { // In a real app, we'd have the verificationId from the previous step // This is a simplified implementation if (_verificationId != null) { await authState.verifyOTP(_verificationId!, pin); if (authState.errorMessage != null) { if (context.mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(authState.errorMessage!)), ); } } else { if (context.mounted) { context.go('/'); } } } }, ), const SizedBox(height: 20), authState.isLoading ? const Center(child: CircularProgressIndicator()) : ElevatedButton( onPressed: _pinController.text.length == 6 ? () async { // In a real app, we'd have the verificationId from the previous step if (_verificationId != null) { await authState.verifyOTP(_verificationId!, _pinController.text); if (!context.mounted) return; if (authState.errorMessage != null) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(authState.errorMessage!)), ); } else { context.go('/'); } } } : null, child: const Text('Verify'), ), if (authState.errorMessage != null) Padding( padding: const EdgeInsets.only(top: 16.0), child: Text( authState.errorMessage!, style: const TextStyle(color: Colors.red), textAlign: TextAlign.center, ), ), ], ), ), ); } }