75 lines
1.9 KiB
Dart
75 lines
1.9 KiB
Dart
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
import '../../../core/core.dart';
|
|
import '../../models/models.dart';
|
|
|
|
abstract class UserLocalDataSource {
|
|
Future<String> getToken();
|
|
|
|
Future<UserModel> getUser();
|
|
|
|
Future<void> saveToken(String token);
|
|
|
|
Future<void> saveUser(UserModel user);
|
|
|
|
Future<void> clearCache();
|
|
|
|
Future<bool> isTokenAvailable();
|
|
}
|
|
|
|
const cachedToken = 'TOKEN';
|
|
const cachedUser = 'USER';
|
|
|
|
class UserLocalDataSourceImpl implements UserLocalDataSource {
|
|
final FlutterSecureStorage secureStorage;
|
|
final SharedPreferences sharedPreferences;
|
|
UserLocalDataSourceImpl({required this.sharedPreferences, required this.secureStorage});
|
|
|
|
@override
|
|
Future<String> getToken() async {
|
|
String? token = await secureStorage.read(key: cachedToken);
|
|
return Future.value(token);
|
|
}
|
|
|
|
@override
|
|
Future<void> saveToken(String token) async {
|
|
await secureStorage.write(key: cachedToken, value: token);
|
|
}
|
|
|
|
@override
|
|
Future<UserModel> getUser() async {
|
|
if (sharedPreferences.getBool('first_run') ?? true) {
|
|
await secureStorage.deleteAll();
|
|
sharedPreferences.setBool('first_run', false);
|
|
}
|
|
final jsonString = sharedPreferences.getString(cachedUser);
|
|
if (jsonString != null) {
|
|
return Future.value(userModelFromJson(jsonString));
|
|
} else {
|
|
throw CacheException();
|
|
}
|
|
}
|
|
|
|
@override
|
|
Future<void> saveUser(UserModel user) {
|
|
return sharedPreferences.setString(
|
|
cachedUser,
|
|
userModelToJson(user),
|
|
);
|
|
}
|
|
|
|
@override
|
|
Future<bool> isTokenAvailable() async {
|
|
String? token = await secureStorage.read(key: cachedToken);
|
|
return Future.value((token != null));
|
|
}
|
|
|
|
@override
|
|
Future<void> clearCache() async {
|
|
await secureStorage.deleteAll();
|
|
// await sharedPreferences.remove(cachedCart);
|
|
await sharedPreferences.remove(cachedUser);
|
|
}
|
|
}
|