cargo66/lib/data/data_sources/local/user_local_data_source.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);
}
}