Flutter Web使用shared_preference 2.0.6调用getString出现空值报错
问题诱发原因
- 空安全类型匹配错误:shared_preferences 2.0.6为适配Flutter空安全的版本,
getString(key)方法在对应key未存储过值时会返回null。你直接将null赋值给非空类型String loginedInUser,运行时会直接抛出空值异常,代码执行中断,因此第二条日志无法触发,异常向上传递后会在FutureBuilder中抛出对应报错。 - 实例为null的调用异常:如果Web端的shared_preferences平台实现未正确注册,会导致
SharedPreferences.getInstance()返回null,调用prefs.getString时就会触发报错信息中的Receiver: null类异常。
解决方案
- 适配空返回值:修改代码处理可能的null返回,两种可选写法:
// 写法1:使用可空类型接收,后续做空判断 String? loginedInUser = prefs.getString("user"); print("logged in user: ${loginedInUser ?? "无登录用户"}"); // 写法2:设置默认值确保返回非空 String loginedInUser = prefs.getString("user") ?? ""; print("logged in user: $loginedInUser");
- 修复Web端实现注册异常:如果是Web端运行出现问题,依次执行
flutter clean、flutter pub get重新拉取依赖,确保shared_preferences_web平台实现被正常引入。 - 版本适配:如果你的项目未开启空安全,需要将shared_preferences降级到2.0.0以下的非空安全适配版本,避免版本不兼容引发的空异常。
内容的提问来源于stack exchange,提问作者vrb
相关产品推荐
相关产品推荐

