我目前正在学习 flutter 和 dart。我不是一个非常有经验的开发人员(主要是一些 C++ 知识),但我真的很喜欢 Flutter,并且我开始开发一些用于测试和学习的 App。我唯一真正的问题是我不明白如何将内容保存到设备上。我知道有一些教程,但它们并没有真正涵盖我想知道的内容。
计数器示例很好地向初学者展示了如何保存一个 int。但在我的应用程序中,我想保存具有 int、string 和 list 值的对象列表。
所以我的问题是
- 如何保存对象?
- 我可以简单地保存对象列表吗?
- 如果我有两个不同的对象,我是否要将它们保存在一个或两个单独的文件中?与用户选择的主题或偏好值相同吗?
- 在我的应用程序中,用户应该能够扩展现有的对象列表。如何将那些已经存在的对象保存到设备中?
- 如何读取文件以及数据的结构如何?我获取的是我保存的对象还是只是它们的值?
你看:我经验还不是很丰富,但是我真的很想了解更多关于Flutter的知识!因此,如果您有关于该主题或一般 Flutter 的任何好的链接或建议,请分享!
感谢您的帮助!
最佳答案
当我需要存储少量数据时,我使用shared_preferences 。我在存储之前将 Dart 对象编码为 json,并在检索时进行解码。
要保存对象,请将其编码为 json。要保存对象列表,请对整个列表进行编码。您可以选择是将不同的对象一起保存还是单独保存。
当保存的对象列表发生更改时,我只需重写整个列表即可。
您可能应该从一些简单的对象开始。这样您会发现可以非常轻松地保存和读取它们。
(Dart 的一大优点是您可以从命令行运行它。通过这种方式,您可以先创建和测试数据对象,然后再将它们包含在 Flutter 应用程序中。单元测试直接内置于 Dart 中。 )
这是一个知道如何将自身编码/解码为 json 的类的示例
class Membership {
int _index;
String _name;
String _id;
Membership(this._index, this._name, this._id);
Membership.fromJson(Map<String, dynamic> m) {
_index = m['index'];
_name = m['name'];
_id = m['id'];
}
String get id => _id;
String get name => _name;
int get index => _index;
Map<String, dynamic> toJson() => {
'index': _index,
'name': _name,
'id': _id,
};
}
如果你有一个成员(member)资格列表,你可以像这样保存它
List<Membership> memberships = [];
final String membershipKey = 'someuniquestring'; // maybe use your domain + appname
SharedPreferences sp = await SharedPreferences.getInstance();
sp.setString(membershipKey, json.encode(memberships));
然后像这样检索它
memberships = [];
json
.decode(sp.getString(membershipKey))
.forEach((map) => memberships.add(new Membership.fromJson(map)));
// don't forget to call setState((){}) to update the Widgets
关于file - Flutter - 保存文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49907078/