求助: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
相关产品推荐
相关产品推荐

