Files
tatlock-ui/lib/core/auth/auth_state.dart
T
jpmschweitzerandClaude Opus 4.5 3af4fd16f8 feat: Phase 1 foundation - core infrastructure and navigation
Clean Architecture structure:
- core/config - Environment configuration
- core/theme - Material 3 theming with FlexColorScheme
- core/error - Typed exception hierarchy
- core/api - Dio HTTP clients with interceptors
- core/auth - Authentication state management
- routing - go_router with shell navigation
- shared/layouts - Adaptive scaffold

Dependencies added:
- flutter_riverpod, riverpod_annotation, riverpod_generator
- freezed, freezed_annotation, json_serializable
- dio, go_router, shared_preferences
- flex_color_scheme, flutter_adaptive_scaffold

Features:
- Responsive navigation (rail on desktop, bottom on mobile)
- Dashboard placeholder with welcome card
- Theme switching infrastructure
- API client ready for Core API and Tatlock API

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-30 17:15:54 +01:00

27 lines
687 B
Dart

import 'package:freezed_annotation/freezed_annotation.dart';
part 'auth_state.freezed.dart';
/// Authentication state.
@freezed
class AuthState with _$AuthState {
const factory AuthState({
@Default(false) bool isAuthenticated,
String? accessToken,
String? refreshToken,
DateTime? expiresAt,
String? userId,
String? userName,
String? userEmail,
}) = _AuthState;
const AuthState._();
/// Check if token is expired or will expire soon.
bool get isTokenExpired {
if (expiresAt == null) return true;
// Consider expired if less than 1 minute remaining
return DateTime.now().isAfter(expiresAt!.subtract(const Duration(minutes: 1)));
}
}