如何使用Flutter保存到本地存储?


96

在Android中,如果我有要在各个会话之间保留的信息,我知道可以使用SharedPreferences或创建SQLite数据库,甚至将文件写入设备并在以后读取。

是否可以仅使用Flutter来保存和还原此类数据?还是我需要像服务示例中那样为Android和iOS编写设备特定的代码?

Answers:


116

有几种选择:


我写了一个flutter服务来访问SQLite,请参见github.com/ripple182/FlutterSQLiteSample
涟漪182 '17

如果我使用房间,可以吗?如果我使用Room,ios会怎样?
MNFS

1
对于共享首选项,这似乎更好地工作:pub.dev/packages/shared_preferences
Yster


51

如果您想保存一个小的值,请稍后再参考。那么您应该使用shared_preferences将数据存储为键值数据

但是,如果要存储大数据,则应使用SQLITE

但是,您始终可以使用可脱机使用的firebase数据库

由于我们在谈论本地存储,因此您始终可以在磁盘上读写文件

其他解决方案:


如何决定何时使用sqflite或firebase?
stickedoverflow

1
sqflite仅将其存储在手机中。firebase在中央数据库中同步,您可以在其中执行后端查询。firebase还使设备之间的同步变得容易。
Feu

请注意,Firebase的Firestore默认为10MB,并且可以设置为不少于1MB,最大为100MB。不建议使用纯脱机访问。如果您打算仅将此选项用作本地存储选项并且数据很大,则可能需要重新考虑。 firebase.google.com/docs/reference/android/com/google/firebase/…–
兰德

这应该是首选的答案,因为它仅说明了在不同情况下应查找的位置。
janpeterka

12

您可以使用flutter官方插件中的共享首选项https://github.com/flutter/plugins/tree/master/packages/shared_preferences

它对Android使用共享首选项,对iOS使用NSUserDefaults。


1
这是大型数据库的理想选择吗?
temp_

1
@temp_我对iOS不太了解。但是,Android上的“共享首选项”绝对不适合大型数据库。它们以纯XML文件的形式写入文件系统,并在需要时从文件系统读取。它们主要用于存储应用程序首选项和类似内容。
forgemo

对于共享首选项,这似乎更好地工作:pub.dev/packages/shared_preferences
Yster

6

答案很晚,但我希望它也会对以后再来这里的人有所帮助。

我将提供要保存的类别及其各自的最佳方法...

  1. 共享首选项 在存储简单值(例如颜色主题,应用程序语言,上一个滚动位置(在阅读应用程序中)时)时,使用此选项。这些是您希望在应用程序重新启动时保留的简单设置。存储大的东西(列表,地图,图像),但是这需要序列化和反序列化。要了解有关这种反序列化和序列化的更多信息,请转到此处
  2. 文件 当您拥有更多由您定义的数据(例如日志文件,图像文件,并且可能要导出csv文件)时,这很有用。我听说一旦磁盘用完了,存储清理程序就可以清除这种持久性空间..不确定,因为我从未见过..除了序列化和反序列化之外,它还可以存储几乎所有内容。
  3. 保存到数据库 这对于有点复杂的数据非常有帮助。而且我认为这不会被光盘清洁器所洗净,因为它存储在AppData中(对于android)。在这种情况下,您的数据存储在SQLite数据库中。它的插件是SQFLite。您可能希望在此处输入的数据种类类似于可以由数据库表示的所有内容。

5

如果您只需要存储诸如API令牌或登录数据(而不是密码!)之类的简单值,这就是我使用的方法:

import 'package:shared_preferences/shared_preferences.dart';

asyncFunc() async { // Async func to handle Futures easier; or use Future.then
  SharedPreferences prefs = await SharedPreferences.getInstance();
}
...

// Set
prefs.setString('apiToken', token);

// Get
String token = prefs.getString('apiToken');

// Remove
prefs.remove('apiToken');

不要忘记shared_preferences在pubspec.yaml中添加依赖项(保留间距格式):

dependencies:

  shared_preferences: any


0

我认为,如果要在本地存储中存储大量数据,则可以使用sqflite库。设置非常容易,我亲自使用过一些测试项目,并且效果很好。

https://github.com/tekartik/sqflite 这是一个教程-https: //proandroiddev.com/flutter-bookshelf-app-part-2-personal-notes-and-database-integration-a3b47a84c57

如果您要将数据存储在云中,则可以使用firebase。这是由Google提供的可靠服务。

https://firebase.google.com/docs/flutter/setup


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.