import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:go_router/go_router.dart'; import 'package:driver/core/l10n/app_localizations.dart'; import '../cubit/auth_cubit.dart'; import '../cubit/auth_state.dart'; import '../../../core/ui/tripz_scaffold.dart'; import '../../../core/ui/tripz_button.dart'; import '../../../core/ui/tripz_text_field.dart'; class OtpScreen extends StatefulWidget { const OtpScreen({super.key}); @override State createState() => _OtpScreenState(); } class _OtpScreenState extends State { final _controller = TextEditingController(); @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { final l10n = AppLocalizations.of(context)!; return TripzScaffold( showBackButton: true, onBack: () => context.go('/phone'), child: BlocConsumer( listener: (context, state) { if (state.status == AuthStatus.error && state.error != null) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(state.error!)), ); } }, builder: (context, state) { return Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ const SizedBox(height: 24), Text( l10n.otpTitle, style: Theme.of(context).textTheme.titleLarge, ), const SizedBox(height: 8), Text( l10n.otpSentTo(state.phone), style: Theme.of(context).textTheme.bodyMedium?.copyWith( color: Theme.of(context).colorScheme.onSurfaceVariant, ), ), const SizedBox(height: 28), TripzTextField( controller: _controller, label: l10n.otpLabel, keyboardType: TextInputType.number, textAlign: TextAlign.center, maxLength: 6, ), const SizedBox(height: 20), TripzButton( label: l10n.confirm, loading: state.status == AuthStatus.authenticating, onPressed: () => context.read().verify(_controller.text), ), ], ); }, ), ); } }