import 'package:flutter/foundation.dart'; import 'package:result_monad/result_monad.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../friendica_client/friendica_client.dart'; import '../globals.dart'; import '../models/auth/credentials.dart'; import '../models/exec_error.dart'; import 'secrets_service.dart'; import 'timeline_manager.dart'; class AuthService extends ChangeNotifier { Credentials? _currentCredentials; bool _loggedIn = false; bool get loggedIn => _loggedIn && _currentCredentials != null; Credentials get currentCredentials => _currentCredentials!; Future getStoredLoginState() async { final prefs = await SharedPreferences.getInstance(); return prefs.getBool('logged-in') ?? false; } FutureResult signIn( Credentials credentials) async { final client = ProfileClient(credentials); final result = await client.getMyProfile(); if (result.isFailure) { await clearCredentials(); return result.errorCast(); } getIt().storeCredentials( client.credentials.copy( userId: result.value.id, avatar: result.value.avatarUrl, ), ); await _setLoginState(true); _currentCredentials = credentials; notifyListeners(); return Result.ok(client); } Future signOut() async { await _setLoginState(false); getIt().clear(); _currentCredentials = null; notifyListeners(); } Future clearCredentials() async { _currentCredentials = null; await _setLoginState(false); notifyListeners(); } Future _setLoginState(bool state) async { final prefs = await SharedPreferences.getInstance(); await prefs.setBool('logged-in', state); _loggedIn = state; } }