我正在制作Flutter应用来跟踪燃料费用。我有一个简单的对象:
class Entry {
double _fuel;
double _money;
double _distance;
Entry(this._fuel, this._money, this.distance);
Entry.fromJson(Map<String, dynamic> json) => Entry (json['fuel'], json['money'], json['distance']);
Map<String, dynamic> toJson() => {'fuel':_fuel, 'money':_money, 'distance':_distance};
}
每当我加满油箱时,我都想输入一个新条目,并永久保留所有这些条目。在应用程序中,我有一个List<Entry> entries
,但找不到将列表保存在SharedPreferences
中的方法。只有一种方法可以接受字符串列表。我应该通过遍历List<String>
并序列化每个条目,然后将该列表保存到List<Entries>
来创建一个新的SharedPreferences
还是有更简单的方法?当我想阅读SharedPreferences
时,如何重新创建列表?
更新:当然,我还需要能够从列表中删除特定条目。
谢谢。
答案 0 :(得分:6)
List<String>
确实是一个可行的选择,我可以想到的另一个选择是使用json.encode()
方法将整个列表序列化为json并将其另存为SharedPreferences中的字符串,然后检索并反序列化它们,然后对其进行迭代以再次将它们变成您的自定义对象。SharedPreferences prefs = await SharedPreferences.getInstance();
List<Entry> entries = // insert your objects here ;
final String entriesJson = json.encode(entries.map((entry) => entry.toJson()).toList());
prefs.setString('entries', entriesJson);
final String savedEntriesJson = prefs.getString('entries);
final List<dynamic> entriesDeserialized = json.decode(savedEntriesJson);
List<Entry> deserializedEntries = entriesDeserialized.map((json) => Entry.fromJson(json)).toList();
要从SharedPreferences中删除特定键(及其值),只需使用remove(key)
方法,或者如果您要使用相同的键,则可以将键设置为新值,将覆盖先前的值。
要从List<Entry>
中删除特定项目,可以通过remove(entry)
的{{1}}方法(如果可以通过),也可以根据需要删除某项目特定条件,例如使用List class
。
希望有帮助。
答案 1 :(得分:0)
要添加entry
,您无需序列化所有条目,只需使用getStringList
的{{1}}并将SharedPreferences
的{{1}}添加到字符串列表,并再次保存
json string