【问题标题】:Shared_Preferences for Flutter Web?Flutter Web 的 Shared_Preferences?
【发布时间】: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 中存储共享首选项的最佳替代方案是什么?

【问题讨论】:

    标签: flutter async-await


    【解决方案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

      【讨论】:

      【解决方案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 非常相似。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2023-01-16
        • 2021-01-26
        • 2020-10-20
        • 2021-03-29
        • 2021-04-26
        • 1970-01-01
        • 2020-04-17
        • 2021-08-28
        • 2020-06-29
        相关资源
        最近更新 更多