shared_preferences: ^0.5.10 #持久化
import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
///localData 對(duì)外調(diào)用
var localData = LocalData();
///本地?cái)?shù)據(jù)
class LocalData {
// 工廠方法構(gòu)造函數(shù)
factory LocalData() => _getInstance();
// instance的getter方法度迂,singletonManager.instance獲取對(duì)象
static LocalData get instance => _getInstance();
// 靜態(tài)變量_instance藤乙,存儲(chǔ)唯一對(duì)象
static LocalData _instance;
// 獲取對(duì)象
static LocalData _getInstance() {
if (_instance == null) {
// 使用私有的構(gòu)造方法來創(chuàng)建對(duì)象
_instance = LocalData._internal();
}
return _instance;
}
// 私有的自定義命名式構(gòu)造方法,通過它實(shí)現(xiàn)一個(gè)類;
// 子類不能繼承internal
// 不是關(guān)鍵字惭墓,可定義其他名字
LocalData._internal() {
//初始化(設(shè)置一些默認(rèn)的)...
_initSharedPreferences();
}
///.....................以上為單例............................
//SharedPreferences
static SharedPreferences _preferences;
///初始化SharedPreferences
_initSharedPreferences() async {
_preferences = await SharedPreferences.getInstance();
}
/// 根據(jù)key存儲(chǔ)int類型
Future<bool> setInt(String key, int value) {
return _preferences.setInt(key, value);
}
/// 根據(jù)key獲取int類型
int getInt(String key, {int defaultValue = 0}) {
return _preferences.getInt(key) ?? defaultValue;
}
/// 根據(jù)key存儲(chǔ)double類型
Future<bool> setDouble(String key, double value) {
return _preferences.setDouble(key, value);
}
/// 根據(jù)key獲取double類型
double getDouble(String key, {double defaultValue = 0.0}) {
return _preferences.getDouble(key) ?? defaultValue;
}
/// 根據(jù)key存儲(chǔ)字符串類型
Future<bool> setString(String key, String value) {
return _preferences.setString(key, value);
}
/// 根據(jù)key獲取字符串類型
String getString(String key, {String defaultValue = ""}) {
return _preferences.getString(key) ?? defaultValue;
}
/// 根據(jù)key存儲(chǔ)布爾類型
Future<bool> setBool(String key, bool value) {
return _preferences.setBool(key, value);
}
/// 根據(jù)key獲取布爾類型
bool getBool(String key, {bool defaultValue = false}) {
return _preferences.getBool(key) ?? defaultValue;
}
/// 根據(jù)key存儲(chǔ)字符串類型數(shù)組
Future<bool> setStringList(String key, List<String> value) {
return _preferences.setStringList(key, value);
}
/// 根據(jù)key獲取字符串類型數(shù)組
List<String> getStringList(String key, {List<String> defaultValue = const []}) {
return _preferences.getStringList(key) ?? defaultValue;
}
/// 根據(jù)key存儲(chǔ)Map類型
Future<bool> setMap(String key, Map value) {
return _preferences.setString(key, json.encode(value));
}
/// 根據(jù)key獲取Map類型
Map getMap(String key) {
String jsonStr = _preferences.getString(key) ?? "";
return jsonStr.isEmpty ? Map : json.decode(jsonStr);
}
//以下為通用方法....
/// 通用設(shè)置持久化數(shù)據(jù)
set<T>(String key, T value) {
String type = value.runtimeType.toString();
switch (type) {
case "String":
setString(key, value as String);
break;
case "int":
setInt(key, value as int);
break;
case "bool":
setBool(key, value as bool);
break;
case "double":
setDouble(key, value as double);
break;
case "List<String>":
setStringList(key, value as List<String>);
break;
case "_InternalLinkedHashMap<String, String>":
setMap(key, value as Map);
break;
}
}
/// 獲取持久化數(shù)據(jù)
dynamic get<T>(String key) {
dynamic value = _preferences.get(key);
if (value.runtimeType.toString() == "String") {
if (_isJson(value)) {
return json.decode(value);
}
}
return value;
}
/// 獲取持久化數(shù)據(jù)中所有存入的key
Set<String> getKeys() {
return _preferences.getKeys();
}
/// 獲取持久化數(shù)據(jù)中是否包含某個(gè)key
bool containsKey(String key) {
return _preferences.containsKey(key);
}
/// 刪除持久化數(shù)據(jù)中某個(gè)key
Future<bool> remove(String key) async {
return await _preferences.remove(key);
}
/// 清除所有持久化數(shù)據(jù)
Future<bool> clear() async {
return await _preferences.clear();
}
/// 重新加載所有數(shù)據(jù),僅重載運(yùn)行時(shí)
Future<void> reload() async {
return await _preferences.reload();
}
/// 判斷是否是json字符串
_isJson(String value) {
try {
JsonDecoder().convert(value);
return true;
} catch (e) {
return false;
}
}
}
參考:
https://blog.csdn.net/Calvin_zhou/article/details/117290861
http://www.reibang.com/p/71260bf0fdbb
https://blog.csdn.net/qq_14876133/article/details/125487330
http://www.reibang.com/p/735b5684e900