【问题标题】:Flutter & Shared Preferences : How do I save a list (of object) to local memory?Flutter & Shared Preferences:如何将(对象)列表保存到本地内存?
【发布时间】:2021-03-29 05:42:22
【问题描述】:

我想使用shared_preferences 包将对象列表保存到我的本地内存中。

假设这是我的班级:

class Person{
   String name;
   String age;
   String gender;
}

如何使用shared_preferences 做到这一点?

我期待收到大家的来信。谢谢。

【问题讨论】:

  • 最好使用sqflitehive 来保存和恢复对象列表。当您想要保存和恢复一个值(intString ...等)而不是列表时,首选shared_preference
  • 虽然不推荐将对象存储在共享首选项中,但如果您仍然需要,请查看第二个答案。 stackoverflow.com/questions/53931513/…

标签: flutter dart caching sharedpreferences


【解决方案1】:

您可以使用shared_preferences 保存List<String>。 因此,我们需要将Person 类及其列表转换为String,方法是将它们编码为JSON

class Person {
    String name;
    String age;
    String gender;
    Person({this.name, this.age, this.gender});

    factory Person.fromJson(Map<String, dynamic> parsedJson) {
        return new Person(
            name: parsedJson['name'] ?? "",
            age: parsedJson['age'] ?? "",
            gender: parsedJson['gender'] ?? "");
    }

    Map<String, dynamic> toJson() {
        return {
          "name": this.name,
          "age": this.age,
          "gender": this.gender,
        };
    }
}

void _savePersons(List<Person> persons) async {
   SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
   List<String> personsEncoded = persons.map((person) => jsonEncode(person.toJson())).toList();
   await sharedPreferences.setStringList('accounts', accounts);
}

以同样的方式,我们可以将保存的List&lt;Person&gt; 获取为JSON 对象并对其进行反序列化:

List<Person> _getPersons(List<Person> persons) async {
   SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
   await sharedPreferences.setStringList('accounts', accounts);
   return persons.map((person) => Person.fromJson(person)).toList();
}

【讨论】:

    猜你喜欢
    • 2019-02-11
    • 2021-03-29
    • 1970-01-01
    • 2019-08-27
    • 2021-06-28
    • 2021-06-10
    • 2019-08-11
    • 2019-08-27
    • 2020-11-26
    相关资源
    最近更新 更多