Отображение чатов

This commit is contained in:
Халимов Рустам
2026-05-14 22:56:42 +03:00
parent ccffc5a53c
commit 0b013def2e
29 changed files with 6365 additions and 842 deletions
@@ -1,5 +1,6 @@
abstract class AuthLocalDataSource {
Future<String?> getToken();
String? getTokenSync();
Future<void> saveToken(String token);
Future<String?> getRefreshToken();
Future<void> saveRefreshToken(String token);
@@ -15,6 +15,11 @@ class AuthLocalDataSourceImpl implements AuthLocalDataSource {
return sharedPreferences.getString(_accessTokenKey);
}
@override
String? getTokenSync() {
return sharedPreferences.getString(_accessTokenKey);
}
Future<String?> getRefreshToken() async {
return sharedPreferences.getString(_refreshTokenKey);
}
@@ -51,7 +51,16 @@ class AuthRepositoryImpl implements AuthRepository {
@override
Future<Result<User>> getCurrentUser() async {
return await remoteDataSource.getCurrentUser();
final result = await remoteDataSource.getCurrentUser();
if (result.isFailure) {
// If remote fails (e.g. offline), try to return a dummy user with stored ID
// to keep the app in authenticated state if we have a token
final userId = await localDataSource.getUserId();
if (userId != null) {
return Result.success(User(id: userId, name: 'User', email: ''));
}
}
return result;
}
@override
@@ -60,5 +69,11 @@ class AuthRepositoryImpl implements AuthRepository {
}
@override
bool get isLoggedIn => false;
bool get isLoggedIn {
// This is problematic because it's synchronous but SharedPreferences is async.
// However, in our DI we wait for SharedPreferences.getInstance().
// We can use a synchronous check if we expose it or just use the fact that
// AuthBloc calls authChecked which is async.
return localDataSource.getTokenSync() != null;
}
}