import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../application/auth_controller.dart'; import '../../onboarding/presentation/onboarding_intro_screen.dart'; class AuthGate extends ConsumerWidget { const AuthGate({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final authState = ref.watch(authControllerProvider); if (authState == null) { return const SignInScreen(); } return const OnboardingIntroScreen(); } } class SignInScreen extends ConsumerStatefulWidget { const SignInScreen({super.key}); @override ConsumerState createState() => _SignInScreenState(); } class _SignInScreenState extends ConsumerState { final _formKey = GlobalKey(); final _emailController = TextEditingController(); final _passwordController = TextEditingController(); bool _isLoading = false; @override void dispose() { _emailController.dispose(); _passwordController.dispose(); super.dispose(); } Future _signIn() async { if (!_formKey.currentState!.validate()) return; setState(() => _isLoading = true); try { await ref.read(authControllerProvider.notifier).signInWithEmail( _emailController.text.trim(), _passwordController.text, ); } catch (e) { if (mounted) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Error: $e')), ); } } finally { if (mounted) setState(() => _isLoading = false); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('LifeTimer'), ), body: Padding( padding: const EdgeInsets.all(24.0), child: Form( key: _formKey, child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ const Text( 'Welcome Back', style: TextStyle( fontSize: 32, fontWeight: FontWeight.bold, ), textAlign: TextAlign.center, ), const SizedBox(height: 32), TextFormField( controller: _emailController, decoration: const InputDecoration( labelText: 'Email', border: OutlineInputBorder(), ), keyboardType: TextInputType.emailAddress, validator: (value) { if (value == null || value.isEmpty) { return 'Please enter your email'; } return null; }, ), const SizedBox(height: 16), TextFormField( controller: _passwordController, decoration: const InputDecoration( labelText: 'Password', border: OutlineInputBorder(), ), obscureText: true, validator: (value) { if (value == null || value.isEmpty) { return 'Please enter your password'; } return null; }, ), const SizedBox(height: 24), ElevatedButton( onPressed: _isLoading ? null : _signIn, child: _isLoading ? const CircularProgressIndicator() : const Text('Sign In'), ), const SizedBox(height: 16), TextButton( onPressed: () { // Navigate to sign up }, child: const Text('Don\'t have an account? Sign Up'), ), ], ), ), ), ); } }