import 'package:flutter/foundation.dart'; import 'package:result_monad/result_monad.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../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; String _currentId = ''; String _currentHandle = ''; bool _loggedIn = false; Result get currentClient { if (_friendicaClient == null) { return Result.error(ExecError( type: ErrorType.authentication, message: 'Not logged in', )); } return Result.ok(_friendicaClient!); } bool get loggedIn => _loggedIn && _friendicaClient != null; String get currentId => _currentId; String get currentHandle => _currentHandle; 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) { return result.errorCast(); } getIt().storeCredentials(client.credentials); await _setLoginState(true); _friendicaClient = client; _currentId = result.value.id; _currentHandle = client.credentials.handle; notifyListeners(); return Result.ok(client); } Future signOut() async { print('Sign out'); await _setLoginState(false); getIt().clear(); _friendicaClient = null; _currentId = ''; _currentHandle = ''; 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; } }