flutter jsonEncode和jsonDecode,sharedpreferences存model数据
·
思路就是tojson转map,然后用jsonEncode转成String(不可以用toString强转,保存不了原来的格式了)。然后用jsonDecode转成map,用fromJsom解析数据
jsonEncode相等于json.encode
jsonDecode相等于json.decode
1.写好本地存储,List
//打招呼保存用户ID和时间戳
static setSayHiDataList(List<String> sayHiList) {
StorageManager.sharedPreferences?.setStringList('sayHiDataList', sayHiList);
}
//获取打招呼的用户ID和时间戳
static get getSayHiDataList =>
StorageManager.sharedPreferences?.getStringList('sayHiDataList');
2.要存的模型
//一键打招呼保存用户ID和时间戳
class SayHiData{
String? userId;
String? dateMs;
SayHiData({this.userId,this.dateMs});
SayHiData.fromJson(dynamic json){
userId = json['userId'];
dateMs = json['dateMs'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['userId'] = userId;
data['dateMs'] = dateMs;
return data;
}
}
3.存数据,用toJson转成Map类型然后用jsonEncode转String
List<String> sayHiDataList = [];
//获取已经存好的数据
if (SPHelper.getSayHiDataList == null) {
SPHelper.setSayHiDataList([]);
if (SPHelper.getSayHiDataList != null) {
sayHiDataList = SPHelper.getSayHiDataList;
SayHiData sayHiData = SayHiData(
userId: Global.userId,
dateMs: DateUtil.getNowDateMs().toString());
sayHiDataList.add(jsonEncode(sayHiData.toJson()));//存数据,用toJson转成Map类型然后用jsonEncode转String
SPHelper.setSayHiDataList(sayHiDataList);
}
} else {
sayHiDataList = SPHelper.getSayHiDataList;
SayHiData sayHiData = SayHiData(
userId: Global.userId, dateMs: DateUtil.getNowDateMs().toString());
sayHiDataList.add(jsonEncode(sayHiData.toJson()));
SPHelper.setSayHiDataList(sayHiDataList);
}
4.用jsonDecode将String转Map,然后用fromJson取值
if (SPHelper.getSayHiDataList != null) {
List<String> sayHiDataList = SPHelper.getSayHiDataList;
for (int i = 0; i < sayHiDataList.length; i++) {
SayHiData sayHiData =
SayHiData.fromJson(jsonDecode(sayHiDataList[i]));//用jsonDecode将String转Map,然后用fromJson取值
if (sayHiData.userId == Global.userId) {
//获取当前用户ID的一键打招呼的当天次数
sayHiTime++;
//保存该用户的下标,用于获取最后一个时间戳
timeIndex.add(i);
}
}
//下标列表不为空则已经打过招呼,为空则还没打过招呼
if (timeIndex.isNotEmpty) {
//获取当前用户的上一次打招呼时间戳
lastSayHiTime =
SayHiData.fromJson(jsonDecode(sayHiDataList[timeIndex.last]))
.dateMs ??
'';
if (sayHiTime < 3) {
if (lastSayHiTime != '') {
lastTimeDate = DateTime.fromMillisecondsSinceEpoch(
int.parse(lastSayHiTime));
} else {
//没有数据则没打过招呼
isSayHi = false;
}
//超过4个小时可以弹出弹窗
if (lastTimeDate != null) {
if (DateTime.now().hour - lastTimeDate.hour >= 4) {
isSayHi = false;
} else {
//否则不弹
isSayHi = true;
Future.delayed(Duration.zero, () {
EventBusUtil.fire(
QueueDialogEvent(DialogKey.HAS_SAY_HI_DIALOG));
});
}
}
} else {
//超过或等于三次就不可打招呼
isSayHi = true;
Future.delayed(Duration.zero, () {
EventBusUtil.fire(
QueueDialogEvent(DialogKey.HAS_SAY_HI_DIALOG));
});
}
}
if (!isSayHi) {
//弹出打招呼弹窗
Future.delayed(Duration.zero, () {
EventBusUtil.fire(
QueueDialogEvent(DialogKey.HAS_NO_SAY_HI_DIALOG));
});
}
}
更多推荐



所有评论(0)