思路就是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转StringSPHelper.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));});}}

flutter jsonEncode和jsonDecode,sharedpreferences存model数据相关推荐

  1. Flutter jsonEncode 和 jsonDecode

    json_decode( )    ---- json 转 对象/数组 通常网路请求后的数据用此方法 转为我们需要的定义的对象 当第二个参数为true返回 array ,默认是false返回objec ...

  2. flutter可以用 mysql数据库_Flutter 本地数据存储(文件、SharedPreferences 、数据库 sqlite)使用示例...

    Flutter 提供了三种数据持久化方法,即文件.SharedPreferences 与数据库. 文件 Flutter 提供了两种文件存储的目录,即临时(Temporary)目录与文档(Documen ...

  3. Android本地存储键值对,flutter本地存储键值对简单数据(相当于web的localstorage) 代码实现...

    flutter中存储键值对简单数据(相当于前端localstorage概念) 首先需要安装一个官方推荐包: 1 dependencies: 2 flutter: 3 sdk: flutter 4 sh ...

  4. android SharedPreferences保存list数据

    今天,简单讲讲如何使用  SharedPreferences保存list数据. 网上找了很多资料,还是觉得这种比较简单.直接上代码: 保存: public static boolean saveA ...

  5. android 同步list数据,android SharedPreferences保存list数据

    释放双眼,带上耳机,听听看~! 今天,简单讲讲如何使用SharedPreferences保存list数据. 网上找了很多资料,还是觉得这种比较简单.直接上代码: 保存: public static b ...

  6. android 清空sp数据,Android 使用 SharedPreferences 保存少量数据的实现代码

    1 SharedPreferences 介绍 SharedPreferences是使用键值对的方式来存储数据的 SharedPreferences share = getSharedPreferenc ...

  7. 企业级闪存弥补数据经济价值短板

    IBM不是第一个推出全闪存列的存储厂商,但IBM找到了一条能够充分发挥闪存自身价值的途径,就是将闪存这种新技术与数据经济这一新计算时代的本质特征密切联系起来,指明了技术创新与业务创新.数据价值之间的内 ...

  8. ExtJS Model数据实体模型

    1.ExtJS数据模型基础 ExtJS数据包中重要的三类:Model(数据实体模型).Store(数据集)和Proxy(数据代理) ExtJS的数据模型主要包括: 数据实体模型:Model 数据实体模 ...

  9. 万能的model数据选择列表

    一.测试用例Person类说明: 头文件: #import <Foundation/Foundation.h> @interface Person : NSObject @property ...

最新文章

  1. 删除u盘mbr多余启动项 linux,高手教你怎么修复U盘的MBR
  2. 2016年 CodePen 最热门的前端代码 Top 100
  3. 关于Exchange Server 201数据库故障处理
  4. Servlet_快速入门
  5. 好程序员web前端分享CSS Bug、CSS Hack和Filter学习笔记
  6. 前端学习(3251):样式的模块化
  7. 密码学专题 口令输入的方式
  8. Windows10/11安装Linux子系统Ubuntu 20.04LTS,轻松使用生信软件,效率秒杀虚拟机
  9. js 拉勾网效果_借助JShaman,建立自己的JS代码混淆平台
  10. 以JQuery的方式封装 cookie 方便调用
  11. 配置MAC地址表实现绑定和过滤
  12. 16QAM 硬判决(Matlab)
  13. 浅谈FLUKE光缆认证?何为CFP?何为OFP?
  14. C# 解析Json文件(使用NewtonJson库)
  15. Kmeans、Kmeans++、Birch和KNN四种聚类算法对二维坐标点的聚类分析对比实验
  16. 科大讯飞智能办公本Air电纸书阅读器,让我的工作生活更加健康
  17. 橙瓜码字多端同步、十份云储存本地实时备份,最放心的码字软件
  18. arx cloneSameOwnerObjects
  19. 微信商家收款码和个人收款码区别,你知道吗?
  20. Unity 中摄像机跟踪的两种实现

热门文章

  1. 社群营销的3个常见方法,让客户自动成交?
  2. margin塌陷和margin合并
  3. Android databinding之数据单向与双向绑定详解与使用(三)
  4. 程序包lombok不存在
  5. python 知识大全_Python基础知识汇总
  6. ES6 - let命令
  7. wireless-ac 9462驱动下载_驱动精灵 v9.61去广告清爽版绿单文件版 下载更新备份电脑驱动工具...
  8. 二维正态分布及其最大值、最小值、和项、差项的期望
  9. iOS网络请求指南之《封装银联接口协议》(提交和返回数据都为XML格式)案例:备用无卡通道(收银台的订单退款、查询机制)【对接条码支付综合前置平台被扫支付订单申请退款(退款查询)】
  10. java 自定义自增_自定义全局自增ID生成器