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

Rea*_*nkm 70 flutter

在Android中,如果我有想要在会话中持久保存的信息,我知道我可以使用SharedPreferences或创建SQLite数据库,甚至可以将文件写入设备并在以后阅读.

有没有办法只使用Flutter保存和恢复这样的数据?或者我是否需要为服务示例中的Android和iOS编写特定于设备的代码?

Set*_*add 88

有几个选择:


Rao*_*che 38

如果你想要保存一个你想稍后提到的小值的情况.然后,您应该使用shared_preferences将数据存储为键值数据

但如果你想存储大数据,你应该使用SQLITE

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

由于我们讨论的是本地存储,因此您始终可以将文件读写到磁盘

其他方案:


Abo*_*zlR 14

您可以使用本地存储

flutter pub add localstorage
Run Code Online (Sandbox Code Playgroud)

1-添加依赖项pubspec.yaml根据上一个更改版本

dependencies:
  ...
  localstorage: ^4.0.0+1
Run Code Online (Sandbox Code Playgroud)

2-然后运行以下命令

flutter packages get
Run Code Online (Sandbox Code Playgroud)

3- 导入本地存储:

import 'package:localstorage/localstorage.dart';
Run Code Online (Sandbox Code Playgroud)

4-创建实例

class MainApp extends StatelessWidget {
  final LocalStorage storage = new LocalStorage('localstorage_app');
  ...
}
Run Code Online (Sandbox Code Playgroud)

项目添加到 lcoalstorage :

void addItemsToLocalStorage() {
  storage.setItem('name', 'Abolfazl');
  storage.setItem('family', 'Roshanzamir');

  final info = json.encode({'name': 'Darush', 'family': 'Roshanzami'});
  storage.setItem('info', info);
}
Run Code Online (Sandbox Code Playgroud)

从 lcoalstorage获取一个项目:

void getitemFromLocalStorage() {
  final name = storage.getItem('name'); // Abolfazl
  final family = storage.getItem('family'); // Roshanzamir
  
  Map<String, dynamic> info = json.decode(storage.getItem('info'));
  final info_name=info['name'];
  final info_family=info['family'];
}
Run Code Online (Sandbox Code Playgroud)

从本地存储中删除项目:

void removeItemFromLocalStorage() {
  storage.deleteItem('name');
  storage.deleteItem('family');
  storage.deleteItem('info');
}
Run Code Online (Sandbox Code Playgroud)


ema*_*nga 12

一个迟到的答案,但我希望它也能帮助以后访问这里的任何人..

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

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


Fur*_*tas 10

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

它使用Android的共享首选项,iOS的NSUserDefaults.


Geo*_*rge 10

如果你只需要存储简单的值,比如 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');
Run Code Online (Sandbox Code Playgroud)

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

dependencies:

  shared_preferences: any
Run Code Online (Sandbox Code Playgroud)


小智 7

有几个选项:

Moor:Dart 的持久性库

读写文件

颤振的共享首选项插件

用于颤振的 SQlite


归档时间:

查看次数:

58180 次

最近记录:

6 年,3 月 前