7.0 KiB
7.0 KiB
🔐 Authentication System - Implementation Guide
This guide demonstrates the beautiful and functional login system that has been implemented for your Flutter application using Material 3 design.
📋 What's Been Created
1. Custom Auth Widgets (/lib/features/auth/presentation/widgets/)
AuthTextField
- Purpose: Reusable styled text field specifically for authentication forms
- Features:
- Material 3 design with consistent theming
- Focus states with color animations
- Built-in validation styling
- Prefix and suffix icon support
- Accessibility support
- Proper keyboard navigation
AuthTextField(
controller: _emailController,
labelText: 'Email Address',
hintText: 'Enter your email',
keyboardType: TextInputType.emailAddress,
prefixIcon: const Icon(Icons.email_outlined),
validator: _validateEmail,
)
AuthButton
- Purpose: Reusable primary button for authentication actions
- Features:
- Three button types: filled, outlined, text
- Loading states with progress indicators
- Icon support
- Consistent Material 3 styling
- Accessibility compliant
- Smooth animations
AuthButton(
onPressed: _handleLogin,
text: 'Sign In',
isLoading: isLoading,
type: AuthButtonType.filled,
icon: const Icon(Icons.login),
)
2. Authentication Pages
LoginPage (/lib/features/auth/presentation/pages/login_page.dart)
- Features:
- Modern Material 3 design with smooth animations
- Email and password fields with comprehensive validation
- Password visibility toggle
- Remember me checkbox
- Forgot password link
- Sign up navigation link
- Responsive design for all screen sizes
- Loading states and error handling
- Integration with Riverpod state management
- Haptic feedback for better UX
- Privacy policy and terms links
RegisterPage (/lib/features/auth/presentation/pages/register_page.dart)
- Features:
- Full name, email, password, and confirm password fields
- Real-time password requirements validation
- Visual password strength indicators
- Terms of service agreement checkbox
- Form validation with clear error messages
- Smooth animations and transitions
- Responsive design
- Integration with existing auth state management
3. Integration with Existing Architecture
State Management (Riverpod)
- Integrated with existing
AuthNotifierandAuthState - Proper error handling and loading states
- State synchronization with route guards
Routing (GoRouter)
- Updated router configuration to use new auth pages
- Proper navigation flow between login and register
- Integration with existing route guards
Theme Integration
- Uses existing Material 3 theme configuration
- Consistent with app color scheme and typography
- Responsive typography and spacing
- Dark mode support
🚀 How to Use
1. Navigation to Auth Pages
// Navigate to login page
context.pushNamed('/auth/login');
// Navigate to register page
context.pushNamed('/auth/register');
2. Listening to Auth State
class MyWidget extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final authState = ref.watch(authNotifierProvider);
return authState.when(
initial: () => const CircularProgressIndicator(),
loading: () => const CircularProgressIndicator(),
authenticated: (user) => Text('Welcome ${user.name}!'),
unauthenticated: (message) => const Text('Please log in'),
error: (message) => Text('Error: $message'),
);
}
}
3. Programmatic Authentication
// Login
await ref.read(authNotifierProvider.notifier).login(
email: 'user@example.com',
password: 'password123',
);
// Logout
await ref.read(authNotifierProvider.notifier).logout();
🎨 Design Features
Material 3 Design System
- Color Scheme: Uses app's primary colors with proper contrast ratios
- Typography: Responsive text scaling based on screen size
- Elevation: Subtle shadows and depth following Material 3 guidelines
- Shape: Rounded corners with consistent radius values
- Animation: Smooth transitions and micro-interactions
Responsive Design
- Mobile First: Optimized for mobile devices
- Tablet Support: Adaptive layout for larger screens
- Desktop Ready: Maximum width constraints for desktop viewing
- Keyboard Navigation: Full keyboard accessibility support
Accessibility
- Screen Readers: Proper semantic labels and hints
- Color Contrast: WCAG AA compliant color combinations
- Touch Targets: Minimum 48dp touch areas
- Focus Management: Logical tab order and focus indicators
🔧 Customization Options
Theme Customization
The auth pages automatically adapt to your app theme. Customize colors in:
// lib/core/theme/app_colors.dart
static const ColorScheme lightScheme = ColorScheme(...);
Validation Rules
Customize validation in the page files:
String? _validateEmail(String? value) {
// Your custom email validation
}
String? _validatePassword(String? value) {
// Your custom password validation
}
Button Styles
Customize button appearance:
AuthButton(
type: AuthButtonType.outlined, // filled, outlined, text
width: 200, // Custom width
height: 60, // Custom height
)
🔄 State Management Flow
User Action (Login)
↓
AuthButton onPressed
↓
AuthNotifier.login()
↓
AuthState.loading
↓
LoginUseCase.call()
↓
AuthRepository.login()
↓
[Success] AuthState.authenticated(user)
[Error] AuthState.error(message)
↓
UI Updates (LoginPage listens to state)
↓
Navigation (Route Guards redirect based on auth state)
🧪 Testing
Widget Tests
testWidgets('LoginPage should display email and password fields', (tester) async {
await tester.pumpWidget(
ProviderScope(
child: MaterialApp(
home: LoginPage(),
),
),
);
expect(find.byType(AuthTextField), findsNWidgets(2));
expect(find.byType(AuthButton), findsOneWidget);
});
Integration Tests
testWidgets('User can complete login flow', (tester) async {
// Test complete login flow
});
🚀 Next Steps
- Implement Backend Integration: Connect to your authentication API
- Add Biometric Auth: Implement fingerprint/face ID support
- Social Login: Add Google, Apple, Facebook login options
- Forgot Password: Implement password reset flow
- Email Verification: Add email verification process
📱 Screenshots
The auth system provides:
- ✅ Smooth animations and transitions
- ✅ Comprehensive form validation
- ✅ Loading states and error handling
- ✅ Responsive design for all devices
- ✅ Material 3 design consistency
- ✅ Dark mode support
- ✅ Accessibility compliance
- ✅ Integration with existing architecture
Your users will enjoy a polished, professional authentication experience that matches your app's design system perfectly!