如何在设备 Flutter 中保存缓存
Posted
技术标签:
【中文标题】如何在设备 Flutter 中保存缓存【英文标题】:How to save cache in device Flutter 【发布时间】:2020-05-21 03:44:03 【问题描述】:我是 Flutter 新手,这是我在 Flutter 中的第一个项目。我想做一个项目,一旦从 API 加载数据,它们就会缓存在设备中。下次即使我的设备离线,它也可以非常快速地加载。我在这里可以使用 Dio 包和 dio 缓存管理器包来缓存服务器的 json 响应。然后使用缓存图片包缓存图片。任何人都可以给我一些如何编写代码的例子吗?提前致谢
【问题讨论】:
为什么不将数据保存在 sqlite db 中......它是用户设备的本地 你可以使用moor。 @DAMMAK 谢谢你的回复,你的意思是把我的 API 响应保存到 sqlite 中?对不起,我是第一次使用颤振 @JohnJoe 感谢您的回复。我的数据来自 API,也可以使用 is package 吗?对不起,我是第一次使用颤振 使用共享偏好来存储响应 【参考方案1】:是的,我会推荐用于颤振的 sqflite 包,我刚刚想出了如何使用它来解决同样的问题!我是通过这个 YouTube 视频了解到的:https://youtu.be/1BwjNEKD8g8。
【讨论】:
感谢您的回复,我想做类似 facebook 的项目。离线时,帖子仍然保留在那里。如果在线可以加载新帖子。所有数据均来自 API。也可以用sqlite? 我不知道...我还是编码新手!我只知道在我的项目中我只想在本地保存数据,而 sqflite 对此非常有效。抱歉,我无法提供更多帮助!【参考方案2】:尝试共享偏好https://pub.dev/packages/shared_preferences,
只需将您的响应解码为 string 并保存到 sharePreference, 并在需要时将该字符串编码为对象。
import 'package:shared_preferences/shared_preferences.dart';
//storing response as string
SharedPreferences sharedPref = await SharedPreferences.getInstance();
Map decode_options = jsonDecode(jsonString);
String user = jsonEncode(User.fromJson(decode_options));
sharedPref.setString('user', user);//storing
//getting string and converting into Object
SharedPreferences sharedPref = await SharedPreferences.getInstance();
Map userMap = jsonDecode(sharedPref.getString('user')); //retriving
var user = User.fromJson(userMap);
class User
final String name;
final String age;
User(this.name, this.age);
factory User.fromJson(Map<String, dynamic> parsedJson)
return new User(
name: parsedJson['name'] ?? "",
age: parsedJson['age'] ?? "");
Map<String, dynamic> toJson()
return
"name": this.name,
"age": this.age
;
【讨论】:
谢谢你的回复,我能知道jsonString是从哪里来的吗?因为我收到未定义名称“jsonString”的错误。尝试将名称更正为已定义的名称,或定义名称。 jsonstring 是来自服务调用的响应 json 我需要把 SharedPreferences 放在模型类代码这里还是 http 响应那里? 在屏幕“例如:Loginpage.dart”类中使用 ShrPref 以获得响应 先生,我把我的代码放在上面,我已经将 SharedPreferences 添加到代码中,但是当我离线时它只显示加载。你能检查一下我把 SharedPreferences 放错了吗?【参考方案3】:在 Flutter 中进行缓存的另一种最佳方式是使用 hive。 它检索数据的速度比 Sqflite 和共享首选项更快
例如,你可以查看这个 GitHub 仓库:https://github.com/shashiben/Anime-details
这将展示如何将其余 API 数据缓存到 hive 中,并且下一次它将显示来自 hive 的数据。
我认为这个答案对你有帮助
【讨论】:
我的 API 数据在分页中。 Hive 也可以保存吗?以上是关于如何在设备 Flutter 中保存缓存的主要内容,如果未能解决你的问题,请参考以下文章