import 'dart:convert'; import 'package:fcs/domain/entities/user.dart'; import 'package:shared_preferences/shared_preferences.dart'; class SharedPref { static final SharedPref instance = SharedPref._(); SharedPref._(); static Future isFirstLaunch() async { SharedPreferences prefs = await SharedPreferences.getInstance(); return prefs.getBool('first_launch'); } static Future finishFirstLaunch() async { SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setBool('first_launch', false); } static Future getLang() async { SharedPreferences prefs = await SharedPreferences.getInstance(); return prefs.getString('language'); } static Future saveLang(String lang) async { SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setString('language', lang); } static Future getStaffMode() async { SharedPreferences prefs = await SharedPreferences.getInstance(); return prefs.getBool('staff_mode_on'); } static Future saveStaffMode(bool staffMode) async { SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setBool('staff_mode_on', staffMode); } static Future saveUser(User user) async { await _save("user", user.toJson()); } static Future getUser() async { try { return User.fromJson(await _read("user")); } catch (e) { return null; } } static Future removeUser() async { return await _remove("user"); } static Future saveSkippedRecoverEmail(bool skipped) async { await _save("skipped_recovery_email", skipped); } static Future getSkippedRecoverEmail() async { try { bool _skipped = await _read("skipped_recovery_email"); return _skipped; } catch (e) { return null; } } static _read(String key) async { try { final prefs = await SharedPreferences.getInstance(); return json.decode(prefs.getString(key) ?? ""); } catch (e) { print("Error:$e"); } } static _save(String key, value) async { try { final prefs = await SharedPreferences.getInstance(); prefs.setString(key, json.encode(value)); } catch (e) { print("Error:$e"); } } static _remove(String key) async { final prefs = await SharedPreferences.getInstance(); prefs.remove(key); } static Future saveRecentSearch(String key, String query) async { SharedPreferences prefs = await SharedPreferences.getInstance(); //Use `Set` to avoid duplication of recentSearches Set allSearches = prefs.getStringList(key)?.toSet() ?? {}; //Place it at first in the set allSearches = {query, ...allSearches}; prefs.setStringList(key, allSearches.toList()); } static Future?> getRecentSearch(String key, String query) async { SharedPreferences prefs = await SharedPreferences.getInstance(); final allSearches = prefs.getStringList(key); return allSearches!.where((search) => search.startsWith(query)).toList(); } static Future clearRecentSearch(String key) async { return await _remove(key); } static Future getPinLockOn() async { SharedPreferences prefs = await SharedPreferences.getInstance(); return prefs.getBool('pin_lock'); } static Future setPinLockOn(bool isLockOn) async { SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setBool('pin_lock', isLockOn); } }