Flutter Web 的 Shared_Preferences?

Posted

技术标签:

【中文标题】Flutter Web 的 Shared_Preferences?【英文标题】:Shared_Preferences for Flutter Web? 【发布时间】:2020-02-28 20:42:14 【问题描述】:

Shared_preferences (https://pub.dev/packages/shared_preferences) 似乎不适用于 Flutter for Web。

当按下按钮时,我会调用以下函数。

 getEmail() async 
    print("reached 1st line");
    SharedPreferences prefs = await SharedPreferences.getInstance();
    print("reached 2nd line");
    String _confirmedEmail = prefs.getString('_confirmedEmail') ?? "";
)

它打印“到达第一行”而不是“到达第二行”,这意味着程序不会超过等待语句。有趣的是,我也没有收到任何错误。在 await 语句之后似乎只是忽略了函数的其余部分。

在 Flutter for Web 中存储共享首选项的最佳替代方案是什么?

【问题讨论】:

【参考方案1】:

在最新版本的shared_prefs中,flutter默认支持web

SharedPreferences pref = await SharedPreferences.getInstance();

 //for setting values locally:
await pref.setString("token", myJWTToken);

//for getting values: 
dynamic token = pref.getString("token");

但如果您正在寻找替代方案,那么您可以使用flutter_session 包来实现几乎类似的目的。

//for setting values locally:
await FlutterSession().set("token", myJWTToken);

//for getting values: 
dynamic token = await FlutterSession().get("token");

【讨论】:

【参考方案2】:

shared_preferences 不应该与 Flutter Web 一起使用,这就是为什么实例的值永远不会返回的原因。为此,您可以改用任何键值存储,例如sembast

UPD:该软件包从 0.5.6 版开始支持 Web

【讨论】:

***.com/questions/64691179/…你能帮忙吗【参考方案3】:

好消息,从 0.5.6 版开始shared_prefsflutter 默认支持 web

现在它包括shared_preferences for web

您的代码应该无需更改即可工作,只需更新 pubspec.yaml

中的依赖项
dependencies:
 shared_preferences: ^0.5.6

【讨论】:

这些共享偏好会持续多久?我看到,当我执行“flutter run -d chrome”时,我可以在该会话期间存储该会话中显示的内容,但如果我在浏览器上点击刷新,那么我会丢失我的共享首选项。这是否按设计工作?这可能与在调试模式下运行有关吗? @Eradicatore 当我制作“flutter build web”然后在虚拟主机上发布时,它对我有用。试试这个命令,然后启动主索引 html 文件。 是的!我想知道是否也可能是这种情况。当我像这样在 GCP VM 上部署它时,它确实对我有用。谢谢! @user3808307 我还需要添加shared_preferences_web 作为依赖项才能使其正常工作。在撰写本文时,看起来 Web 实现尚未被认可到主要的 shared_preferences 包中。【参考方案4】:

我认为它现在受到支持。这取决于 shared_preferences_web image from pub dev

【讨论】:

你测试过这个网页吗?【参考方案5】:

当您在pub.dev 中搜索库时,您可能会检查标签。

对于网络,最好的实现方式是实现网络缓存,dcache 使用flutter_web 实现缓存。

import 'package:dcache/dcache.dart';

void main() 
  Cache c = new SimpleCache(storage: new SimpleStorage(size: 20));

    c.set("key", 42);
    print(c.get("key")); // 42
    print(c.containsKey("unknown_key")); // false
    print(c.get("unknown_key")); // nil

如您所见,与 Flutter 的 shared_preferences 非常相似。

希望这会有所帮助。

【讨论】:

以上是关于Flutter Web 的 Shared_Preferences?的主要内容,如果未能解决你的问题,请参考以下文章

flutter web(3) 快速创建web工程并运行

flutter项目中添加web支持

如何将 Flutter 移动应用迁移到 Flutter Web

Flutter web 最新进展: 发掘更多可能!

flutter Web端支持内嵌加载网页

Flutter 调味移动应用和 Flutter web