Session
Shared Preferences
plugin: shared_preference
- Injection
- Static
core/session.dart
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
class Session {
Session(this._pref);
final SharedPreferences _pref;
Future<bool> saveUser(Map<String, dynamic> user) async {
return _pref.setString('user', jsonEncode(user));
}
Future<Map<String, dynamic>?> fetchUser() async {
final userString = _pref.getString('user');
if (userString == null) return null;
return jsonDecode(userString) as Map<String, dynamic>;
}
Future<bool> removeUser() async => _pref.remove('user');
Future<bool> saveToken(Map<String, dynamic> token) async {
return _pref.setString('token', jsonEncode(token));
}
Future<Map<String, dynamic>?> fetchToken() async {
final tokenString = _pref.getString('token');
if (tokenString == null) return null;
return jsonDecode(tokenString) as Map<String, dynamic>;
}
Future<bool> removeToken() async => _pref.remove('token');
}
- global session calling
main.dart
final late Session session;
Future<void> main() async {
final pref = await SharedPreferences.getInstance();
session = Session(pref);
...
}
// call everywhere
session.saveUser(user);
- local session calling
LoginController.dart
Future<LoginState> execute() async {
...
final pref = await SharedPreferences.getInstance();
final session = Session(pref);
session.saveUser(user);
...
}
core/session.dart
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
class Session {
static Future<bool> saveUser(Map<String, dynamic> user) async {
final pref = await SharedPreferences.getInstance();
return pref.setString('user', jsonEncode(user));
}
static Future<Map<String, dynamic>?> fetchUser() async {
final pref = await SharedPreferences.getInstance();
final userString = pref.getString('user');
if (userString == null) return null;
return jsonDecode(userString) as Map<String, dynamic>;
}
static Future<bool> removeUser() async {
final pref = await SharedPreferences.getInstance();
return pref.remove('user');
}
static Future<bool> saveToken(Map<String, dynamic> token) async {
final pref = await SharedPreferences.getInstance();
return pref.setString('token', jsonEncode(token));
}
static Future<Map<String, dynamic>?> fetchToken() async {
final tokenString = _pref.getString('token');
if (tokenString == null) return null;
return jsonDecode(tokenString) as Map<String, dynamic>;
}
static Future<bool> removeToken() async {
final pref = await SharedPreferences.getInstance();
return pref.remove('token');
}
}
- calling
LoginController.dart
Future<LoginState> execute() async {
...
Session.saveUser(user);
...
}