import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:go_router/go_router.dart'; import '../../core/theme/app_theme.dart'; import 'auth_cubit.dart'; /// صفحه‌ی ورود شماره موبایل. class MobileScreen extends StatefulWidget { const MobileScreen({super.key}); @override State createState() => _MobileScreenState(); } class _MobileScreenState extends State { final _controller = TextEditingController(); @override void dispose() { _controller.dispose(); super.dispose(); } bool get _valid => RegExp(r'^09\d{9}$').hasMatch(_controller.text.trim()); @override Widget build(BuildContext context) { return Scaffold( body: SafeArea( child: BlocConsumer( listener: (context, state) { if (state.status == AuthStatus.otpSent) { context.push('/otp'); } else if (state.status == AuthStatus.error) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(state.error ?? 'خطا')), ); } }, builder: (context, state) { final loading = state.status == AuthStatus.loading; return Padding( padding: const EdgeInsets.all(24), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text('سلطان حکم', style: TextStyle( fontSize: 36, fontWeight: FontWeight.bold, color: AppColors.gold)), const SizedBox(height: 8), const Text('برای ورود شماره موبایلت رو وارد کن', style: TextStyle(color: Colors.white70)), const SizedBox(height: 32), TextField( controller: _controller, keyboardType: TextInputType.phone, textAlign: TextAlign.center, style: const TextStyle(fontSize: 20, letterSpacing: 2), inputFormatters: [ FilteringTextInputFormatter.digitsOnly, LengthLimitingTextInputFormatter(11), ], decoration: const InputDecoration(hintText: '09xxxxxxxxx'), onChanged: (_) => setState(() {}), ), const SizedBox(height: 24), ElevatedButton( onPressed: (!_valid || loading) ? null : () => context .read() .requestOtp(_controller.text.trim()), child: loading ? const SizedBox( height: 22, width: 22, child: CircularProgressIndicator(strokeWidth: 2)) : const Text('دریافت کد'), ), ], ), ); }, ), ), ); } }