Flutter预交付检查清单App:二维列表本地存读方案求助
你可以通过JSON序列化/反序列化的方式解决这个问题——SharedPreferences本身只支持存储基本数据类型和字符串,把你的嵌套List转换成JSON字符串就能存进去,读取时再转回来就行。以下是具体实现步骤和代码示例(假设你用的是Flutter):
1. 保存数据到SharedPreferences
当App需要关闭(比如页面销毁、App进入后台时),执行以下操作:
import 'package:shared_preferences/shared_preferences.dart'; import 'dart:convert'; Future<void> saveChecklistData(List<List> listOfCars) async { final prefs = await SharedPreferences.getInstance(); // 把嵌套List转成JSON字符串 String jsonString = jsonEncode(listOfCars); await prefs.setString('checklist_data', jsonString); }
2. 从SharedPreferences恢复数据
在App启动时(比如页面初始化阶段),读取并恢复数据:
Future<List<List>> loadChecklistData() async { final prefs = await SharedPreferences.getInstance(); String? jsonString = prefs.getString('checklist_data'); if (jsonString != null) { // 把JSON字符串转回嵌套List List<dynamic> decodedList = jsonDecode(jsonString); // 转换为List<List>类型 return decodedList.cast<List>(); } else { // 如果没有存储的数据,返回默认的硬编码清单 return [ [false, "CUSTOMER NAME", "REG PLATE", false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], [false, "CUSTOMER NAME", "REG PLATE", false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false], ]; } }
3. 调用时机
- 保存:可以在页面的
dispose()方法中调用,或者监听App生命周期(比如用WidgetsBindingObserver监听didChangeAppLifecycleState,当状态变为AppLifecycleState.paused或AppLifecycleState.detached时触发保存)。 - 读取:在页面的
initState()中调用,初始化你的listOfCars变量。
注意事项
- 你的嵌套List里包含布尔值和字符串,jsonEncode/jsonDecode能直接处理这些类型,无需额外适配。
- 虽然当前结构能满足需求,但后续如果要扩展字段或逻辑,建议把每个车辆清单封装成实体类(比如
CarChecklist),再序列化存储,会更易维护。
内容的提问来源于stack exchange,提问作者puzzlemasterman
相关产品推荐
相关产品推荐

