Flutter中如何使用Shared Preferences保存Vehicle对象列表?
shared_preferences仅支持存储基础数据类型及字符串列表,因此我们需要将Vehicle对象序列化为JSON字符串后存储,读取时再反向解析为对象。结合你已实现的toJson()和fromJson()方法,具体操作如下:
1. 保存Vehicle列表
将每个Vehicle对象转成JSON字符串,组成列表后存入shared_preferences:
import 'dart:convert'; import 'package:shared_preferences/shared_preferences.dart'; Future<void> saveVehicles(List<Vehicle> vehicles) async { final prefs = await SharedPreferences.getInstance(); // 把每个Vehicle转为JSON字符串 final vehicleJsonStrings = vehicles.map((v) => jsonEncode(v.toJson())).toList(); await prefs.setStringList('saved_vehicles', vehicleJsonStrings); }
2. 读取Vehicle列表
从shared_preferences取出字符串列表,逐个解析为Vehicle对象:
Future<List<Vehicle>> loadVehicles() async { final prefs = await SharedPreferences.getInstance(); final vehicleJsonStrings = prefs.getStringList('saved_vehicles'); // 无存储数据时返回空列表 if (vehicleJsonStrings == null) return []; // 把每个JSON字符串转回Vehicle对象 return vehicleJsonStrings.map((str) => Vehicle.fromJson(jsonDecode(str))).toList(); }
可选简化方案:单JSON字符串存储
如果对象数量较多,也可以把整个列表转成一个JSON字符串存储,减少键值对操作:
保存
Future<void> saveVehicles(List<Vehicle> vehicles) async { final prefs = await SharedPreferences.getInstance(); final jsonStr = jsonEncode(vehicles.map((v) => v.toJson()).toList()); await prefs.setString('saved_vehicles', jsonStr); }
读取
Future<List<Vehicle>> loadVehicles() async { final prefs = await SharedPreferences.getInstance(); final jsonStr = prefs.getString('saved_vehicles'); if (jsonStr == null) return []; final List<dynamic> jsonList = jsonDecode(jsonStr); return jsonList.map((json) => Vehicle.fromJson(json)).toList(); }
使用示例
// 保存示例 final myVehicles = [ Vehicle(vehicleId: 'v001', vehicleType: '轿车'), Vehicle(vehicleId: 'v002', vehicleType: '摩托车'), ]; await saveVehicles(myVehicles); // 读取示例 final loadedVehicles = await loadVehicles(); print(loadedVehicles.first.vehicleType); // 输出:轿车
内容的提问来源于stack exchange,提问作者x98lol
相关产品推荐
相关产品推荐

