import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; class PasswordScreen extends StatefulWidget { const PasswordScreen({super.key}); @override State createState() => _PasswordScreenState(); } class _PasswordScreenState extends State { final TextEditingController _passwordController = TextEditingController(); final TextEditingController _confirmPasswordController = TextEditingController(); final FocusNode _passwordFocusNode = FocusNode(); final FocusNode _confirmPasswordFocusNode = FocusNode(); bool _obscurePassword = true; bool _obscureConfirmPassword = true; @override void dispose() { _passwordController.dispose(); _confirmPasswordController.dispose(); _passwordFocusNode.dispose(); _confirmPasswordFocusNode.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(25), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox(height: 75), Text( 'Set New Password', style: TextStyle( fontSize: 30, fontWeight: FontWeight.bold, color: Theme.of(context).colorScheme.primary, ), ), SizedBox(height: 5), Text( 'Create a strong password to secure your account', style: TextStyle(fontSize: 18), textAlign: TextAlign.center, ), Image.asset('assets/password.png', width: 300), // Password Input TextField( controller: _passwordController, focusNode: _passwordFocusNode, obscureText: _obscurePassword, decoration: InputDecoration( labelText: 'New Password', hintText: 'Enter your new password', border: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide(color: Colors.grey.shade300), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide( color: Theme.of(context).colorScheme.primary, width: 2, ), ), contentPadding: EdgeInsets.symmetric( horizontal: 16, vertical: 16, ), suffixIcon: IconButton( icon: Icon( _obscurePassword ? Icons.visibility : Icons.visibility_off, color: Colors.grey.shade600, ), onPressed: () { setState(() { _obscurePassword = !_obscurePassword; }); }, ), ), ), SizedBox(height: 20), // Confirm Password Input TextField( controller: _confirmPasswordController, focusNode: _confirmPasswordFocusNode, obscureText: _obscureConfirmPassword, decoration: InputDecoration( labelText: 'Confirm Password', hintText: 'Confirm your new password', border: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide(color: Colors.grey.shade300), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(12), borderSide: BorderSide( color: Theme.of(context).colorScheme.primary, width: 2, ), ), contentPadding: EdgeInsets.symmetric( horizontal: 16, vertical: 16, ), suffixIcon: IconButton( icon: Icon( _obscureConfirmPassword ? Icons.visibility : Icons.visibility_off, color: Colors.grey.shade600, ), onPressed: () { setState(() { _obscureConfirmPassword = !_obscureConfirmPassword; }); }, ), ), ), SizedBox(height: 20), // Password Requirements Container( padding: EdgeInsets.all(16), decoration: BoxDecoration( color: Colors.grey.shade50, borderRadius: BorderRadius.circular(12), border: Border.all(color: Colors.grey.shade200), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( 'Password Requirements:', style: TextStyle( fontWeight: FontWeight.w600, fontSize: 14, color: Colors.grey.shade700, ), ), SizedBox(height: 8), _buildRequirement('At least 8 characters', true), _buildRequirement('Contains uppercase letter', true), _buildRequirement('Contains lowercase letter', true), _buildRequirement('Contains number', true), _buildRequirement('Contains special character', false), ], ), ), SizedBox(height: 40), ], ), ), ), bottomNavigationBar: SizedBox( height: 130, child: Column( children: [ Padding( padding: const EdgeInsets.symmetric(horizontal: 25), child: Row( children: [ Expanded( child: ElevatedButton( onPressed: () { // TODO: Add password update logic String password = _passwordController.text; String confirmPassword = _confirmPasswordController.text; print('Password: $password'); print('Confirm Password: $confirmPassword'); context.go('/onboarding/login'); }, style: ElevatedButton.styleFrom( padding: EdgeInsets.symmetric(vertical: 16), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), ), child: Text( 'Update Password', style: TextStyle(fontSize: 16), ), ), ), SizedBox(width: 16), Expanded( child: OutlinedButton( onPressed: () { context.go('/onboarding/login'); }, style: OutlinedButton.styleFrom( padding: EdgeInsets.symmetric(vertical: 16), side: BorderSide(color: Colors.grey.shade300), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), ), child: Text( 'Back to Login', style: TextStyle(fontSize: 16), ), ), ), ], ), ), SizedBox(height: 20), TextButton( onPressed: () { context.go('/'); }, child: Text('Continue as guest?', style: TextStyle(fontSize: 14)), ), ], ), ), ); } Widget _buildRequirement(String text, bool isMet) { return Padding( padding: EdgeInsets.symmetric(vertical: 2), child: Row( children: [ Icon( isMet ? Icons.check_circle : Icons.circle_outlined, size: 16, color: isMet ? Colors.green : Colors.grey.shade600, ), SizedBox(width: 8), Text( text, style: TextStyle( fontSize: 12, color: isMet ? Colors.grey.shade600 : Colors.grey.shade400, ), ), ], ), ); } }