You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Flutter Web中SharedPreferences浏览器关闭后自动清除问题

Flutter Web: SharedPreferences 数据在浏览器关闭后丢失的解决办法

问题根源

Flutter Web 上的 shared_preferences 插件默认使用浏览器的 sessionStorage 存储数据,而 sessionStorage 的特性就是仅在当前会话(标签页/浏览器窗口)有效,一旦关闭浏览器或标签页,数据就会被自动清空。这就是为什么页面刷新时数据保留,但关闭浏览器重启后数据丢失的核心原因。

解决步骤

1. 切换存储方式到 localStorage

要实现持久化存储,需要将插件的存储介质切换为 localStorage(浏览器持久化存储,除非手动清除或浏览器设置自动清除,否则数据会一直保留)。

在你的 Flutter Web 项目的 web/index.html 文件中,找到引入 flutter.js 的位置,在其后添加以下配置脚本:

<script>
  window.flutterWebPluginPreferences = {
    storage: 'localStorage'
  };
</script>

2. 验证配置生效

修改后重新运行项目,先存储测试数据:

import 'package:shared_preferences/shared_preferences.dart';

void saveTestData() async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setString('demo_key', 'persistent_test_value');
}

关闭浏览器后重新打开应用,读取数据验证:

void loadTestData() async {
  final prefs = await SharedPreferences.getInstance();
  final value = prefs.getString('demo_key');
  print(value); // 正常情况下会输出 'persistent_test_value'
}

额外注意事项

  • 确保你的 shared_preferences 包版本在 2.0.0 及以上(该版本开始支持配置存储类型)。
  • 如果浏览器开启了隐私模式或设置了「退出时清除浏览数据」,即使使用 localStorage,数据也可能被清空,需要检查浏览器的隐私设置。
  • 不要存储敏感数据在 localStorage 中,因为它是明文存储在浏览器中的,存在安全风险。

内容的提问来源于stack exchange,提问作者Deepak Denny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 23:45:42