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/credentials.dart'; import '../models/exec_error.dart'; import 'secrets_service.dart'; import 'timeline_manager.dart'; class AuthService extends ChangeNotifier { FriendicaClient? _friendicaClient; bool _loggedIn = false; bool get loggedIn => _loggedIn && _friendicaClient != null; FriendicaClient get currentClient => _friendicaClient!; String get currentId => _friendicaClient?.credentials.userId ?? ''; String get currentHandle => _friendicaClient?.credentials.handle ?? ''; String get currentServer => _friendicaClient?.credentials.serverName ?? ''; String get currentAvatarUrl => _friendicaClient?.credentials.avatar ?? ''; Future getStoredLoginState() async { final prefs = await SharedPreferences.getInstance(); return prefs.getBool('logged-in') ?? false; } FutureResult signIn( Credentials credentials) async { final client = FriendicaClient(credentials: 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); _friendicaClient = client; notifyListeners(); return Result.ok(client); } Future signOut() async { await _setLoginState(false); getIt().clear(); _friendicaClient = null; notifyListeners(); } Future clearCredentials() async { _friendicaClient = null; await _setLoginState(false); notifyListeners(); } Future _setLoginState(bool state) async { final prefs = await SharedPreferences.getInstance(); await prefs.setBool('logged-in', state); _loggedIn = state; } }