Отображение чатов
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user