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

Flutter中SharedPreferences数据赋值全局变量时出现空值问题的解决方法及原因解析

问题原因分析

嘿,这问题其实是个典型的赋值方向搞反的小失误!你看代码里这行:

userID = getUserId; 

这是把**初始为null的全局变量getUserId**赋值给了从SharedPreferences拿到的局部userID,完全搞反了赋值逻辑!这就导致第二个打印输出的是原本为空的全局变量值,而非你从本地存储取出的正确数据。

至于字符串类型出现空字符串的情况,本质也是类似逻辑错误:要么是赋值方向搞反,要么是没处理SharedPreferences返回null的场景,直接把null当成空字符串使用了。

解决方法

1. 修正赋值方向

把赋值语句反过来,将从SharedPreferences拿到的值存入全局变量:

int? getUserId; // 全局变量
Future fetch() async {
  var pref = await SharedPreferences.getInstance();
  var userID = pref.getInt('userID'); 
  print("userID from SharedPreferences: " + userID.toString()); 
  // 正确赋值:把局部获取的值赋值给全局变量
  getUserId = userID; 
  print("userID in global variable: " + getUserId.toString()); 
}

2. 等待异步操作完成

fetch()是异步方法,如果直接调用后立刻使用getUserId,大概率会因为异步操作未完成,拿到的还是null。调用时一定要用await等待执行完毕:
比如在页面的initState中加载数据:

@override
void initState() {
  super.initState();
  _loadUserData();
}

Future _loadUserData() async {
  await fetch();
  // 此时getUserId已完成赋值,可放心使用
  if (getUserId != null) {
    // 执行后续业务逻辑,比如请求用户详情等
  }
}

3. 处理空值/设置默认值

不管是整型还是字符串,都要处理SharedPreferences返回null的场景(比如用户首次登录未存数据、数据被清除),避免空值或空字符串问题:

  • 整型处理:
// 若未获取到userID,设置默认值(比如0,可根据业务调整)
getUserId = pref.getInt('userID') ?? 0;
  • 字符串处理:
String? userName;
Future fetchUserName() async {
  var pref = await SharedPreferences.getInstance();
  // 若未获取到userName,设置默认空串或提示文本
  userName = pref.getString('userName') ?? "";
}

4. (可选)封装SharedPreferences操作

为避免重复编写相似代码,可将SharedPreferences操作封装成工具类,降低出错概率:

class PrefsUtils {
  static Future<int?> getUserId() async {
    final pref = await SharedPreferences.getInstance();
    return pref.getInt('userID');
  }

  static Future<void> saveUserId(int id) async {
    final pref = await SharedPreferences.getInstance();
    await pref.setInt('userID', id);
  }
}

使用时逻辑更清晰:

Future fetch() async {
  getUserId = await PrefsUtils.getUserId();
  print("global userID: " + getUserId.toString());
}

内容的提问来源于stack exchange,提问作者Usama Hafeez Official

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:02:43