import 'package:stacked/stacked.dart'; import 'package:yimaru_app/app/app.locator.dart'; import 'package:yimaru_app/models/user_model.dart'; import 'package:yimaru_app/services/secure_storage_service.dart'; class AuthenticationService with ListenableServiceMixin { final _secureService = locator(); AuthenticationService() { listenToReactiveValues([_user]); } UserModel? _user; UserModel? get user => _user; Future userLoggedIn() async { if (await _secureService.getString('userId') != null) { return true; } return false; } Future getAccessToken() async => await _secureService.getString('accessToken'); Future getRefreshToken() async => await _secureService.getString('refreshToken'); Future getUserId() async => await _secureService.getInt('userId'); Future saveTokens({ required String access, required String refresh, }) async { await _secureService.setString('accessToken', access); await _secureService.setString('refreshToken', refresh); } Future saveUserName(Map data) async { await _secureService.setString('firstName', data['firstName']); _user = UserModel( userId: _user?.userId, accessToken: _user?.accessToken, refreshToken: _user?.refreshToken, profileCompleted: _user?.profileCompleted, firstName: await _secureService.getString('firstName'), ); } Future saveBasicUserData(Map data) async { await _secureService.setInt('userId', data['userId']); await _secureService.setString('accessToken', data['accessToken']); await _secureService.setString('refreshToken', data['refreshToken']); _user = UserModel( firstName: _user?.firstName, profileImage: _user?.profileImage, profileCompleted: _user?.profileCompleted, userId: await _secureService.getInt('userId'), accessToken: await _secureService.getString('accessToken'), refreshToken: await _secureService.getString('refreshToken'), ); } Future saveProfileStatus(bool value) async { await _secureService.setBool('profileCompleted', value); _user = UserModel( userId: _user?.userId, firstName: _user?.firstName, accessToken: _user?.accessToken, refreshToken: _user?.refreshToken, profileImage: _user?.profileImage, profileCompleted: await _secureService.getBool('profileCompleted')); } Future saveProfileImage(String image) async { await _secureService.setString('profileImage', image); _user = UserModel( userId: _user?.userId, firstName: _user?.firstName, accessToken: _user?.accessToken, refreshToken: _user?.refreshToken, profileCompleted: _user?.profileCompleted, profileImage: await _secureService.getString('profileImage'), ); notifyListeners(); } Future saveFullName(Map data) async { await _secureService.setBool('profileCompleted', true); await _secureService.setString('firstName', data['firstName']); _user = UserModel( userId: _user?.userId, accessToken: _user?.accessToken, refreshToken: _user?.refreshToken, profileImage: _user?.profileImage, firstName: await _secureService.getString('firstName'), profileCompleted: await _secureService.getBool('profileCompleted'), ); } Future isFirstTimeInstall() async => await _secureService.getBool('firstTimeInstall') ?? true; Future setFirstTimeInstall(bool value) async { await _secureService.setBool('firstTimeInstall', value); } Future getUser() async { _user = UserModel( userId: await _secureService.getInt('userId'), firstName: await _secureService.getString('firstName'), accessToken: await _secureService.getString('accessToken'), refreshToken: await _secureService.getString('refreshToken'), profileImage: await _secureService.getString('profileImage'), profileCompleted: await _secureService.getBool('profileCompleted'), ); return _user; } Future logOut() async { bool firstTimeInstall = await isFirstTimeInstall(); await _secureService.clear(); await setFirstTimeInstall(firstTimeInstall); } }