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?的主要内容,如果未能解决你的问题,请参考以下文章