我有一个flutter应用程序,登录时我调用了共享首选项来存储一些值,例如令牌,用户ID等。所有这些在ios和android上均可正常运行。现在突然在ios上,它给了我NoSuchMethodError:方法“ setString”在null上被调用
这是代码段。
try {
//final jsonResponse = json.decode(responseJson);
Login login1 = new Login.fromJson(responseJson);
token = login1.token;
print(login1.fleetID);
await AuthUtils.insertDetails(_sharedPreferences, responseJson);
} catch (Err) {
print("ERrro is at" + Err.toString());
}
The whole of this function it self is async.
Below is the function where I call the to insert details.
static insertDetails(SharedPreferences prefs, var response) async {
print("Token is :"+response['token']);
print("userID is :"+response['userID']);
await prefs.setString(authTokenKey, response['token']);
await prefs.setString(userIdKey, response['userID']);
}
我已经打印出令牌和用户ID都不为空或为null。但是我仍然收到错误消息' setString 。但它仅在Android ios上运行良好
补充一下,我在下面找到了这个
接收者:null尝试调用:setString(“ auth_token”, “ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NTc2MDAzNTcsImV4cCI6MTU1NzYwNjM1NywianRpIjoiNmExOE9CTE9m”)
答案 0 :(得分:1)
在insertDetails
中,您传递的是null
的{{1}},因此,当您尝试执行prefs
时,它将失败。
将您的问题中的其他详细信息汇总在一起,这是因为您传递的值尚未初始化。
您的事情过于复杂。您有一个成员变量
prefs.setString
那根本什么也没做。 Future<SharedPreferences> _prefs = SharedPreferences.getInstance();
是单例,因此只要有需要就获取参考就没有害处。
还要注意的是,不必等待共享首选项上SharedPreferences
的结果。新值将立即写入内存缓存中,并且本机请求将分派到Android或iOS层以将其提交到存储。
像这样重构.setString()
:
insertDetails