import 'package:flutter/foundation.dart'; import '../models/user_profile.dart'; import '../services/api_client.dart'; import '../services/token_store.dart'; enum SessionStatus { loading, signedOut, signedIn } class SessionController extends ChangeNotifier { SessionController(this.api, this.tokens); final ApiClient api; final TokenStore tokens; SessionStatus status = SessionStatus.loading; UserProfile? user; Future initialize() async { final minimumSplash = Future.delayed( const Duration(milliseconds: 1100), ); final token = await tokens.read(); if (token == null) { status = SessionStatus.signedOut; } else { try { user = await api.me(); status = SessionStatus.signedIn; } catch (_) { await tokens.clear(); status = SessionStatus.signedOut; } } await minimumSplash; notifyListeners(); } Future login(String username, String password) async { final result = await api.login(username, password); await tokens.write(result.token); user = result.user; status = SessionStatus.signedIn; notifyListeners(); } Future register(Map input) async { final result = await api.register(input); await tokens.write(result.token); user = result.user; status = SessionStatus.signedIn; notifyListeners(); } Future logout() async { await tokens.clear(); user = null; status = SessionStatus.signedOut; notifyListeners(); } Future deleteAccount(String password) async { await api.deleteAccount(password); await logout(); } }