将对象编码为 json,将其存储在 sharedprefs 中,然后将其作为字符串检索

Encode an objects to json, store it in sharedprefs, then retrieve it as string

在我的应用程序中,用户选择他想阅读的章节、他想开始的诗句和结束诗句。

我要把这三个字符串存起来,显示在他的“阅读历史”列表里,他可以在里面看到他以前所有的阅读。

我读到你可以通过创建一个 class 来做到这一点,将它们存储在一个对象中并将其转换为 JSON,然后将其存储在 sharedprefs 中。(或类似的东西)。 但是我不理解他们,因为他们和我的情况有点不同。

这是 class:

class Segment {
  final String chapter;
  final String from;
  final String to;

  Segment({this.chapter, this.from, this.to});

  factory Segment.fromJson(Map<String, dynamic> json) {
    return Segment(
      chapter: json['chapter'],
      from: json['from'],
      to: json['to'],
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'chapter': chapter,
      'from': from,
      'to': to,
    };
  }
}

这些是我想知道的步骤:

您可以在 Flutter 中存储具有共享首选项的 JSON(地图)对象,方法是将地图编码为原始 JSON(它基本上是一个字符串)。

要存储具有共享首选项的内容,您应该首先将其添加到您的依赖项中。 Here的怎么样。 然后在您的代码中的某处通过执行以下操作获取 SharedPreferences 对象的实例:

final prefs = await SharedPreferences.getInstance();

之后,您应该对从 Segment class 获得的 Map 进行编码,方法是:

Segment segment = Segment(...);
String rawJson = jsonEncode(segment.toJson());

要使用共享首选项保存这个新 JSON 运行 此命令将整个 JSON 存储为字符串:

prefs.setString('my_string_key', rawJson);

当您想从共享首选项中读取数据时,请使用:

final rawJson = prefs.getString('my_string_key') ?? '';
Map<String, dynamic> map = jsonDecode(rawJson);
final Segment = Segment.fromJson(map);

有关详细信息,请参阅此 article