You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter预交付检查清单App:二维列表本地存读方案求助

解决嵌套List数据在SharedPreferences中的存储与恢复问题

你可以通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 22:07:41