Flutter iOS共享首选项在出现空错误时显示setstring

时间:2019-05-11 18:12:24

标签: ios flutter sharedpreferences

我有一个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”)

1 个答案:

答案 0 :(得分:1)

insertDetails中,您传递的是null的{​​{1}},因此,当您尝试执行prefs时,它将失败。

将您的问题中的其他详细信息汇总在一起,这是因为您传递的值尚未初始化。

您的事情过于复杂。您有一个成员变量

prefs.setString

那根本什么也没做。 Future<SharedPreferences> _prefs = SharedPreferences.getInstance(); 是单例,因此只要有需要就获取参考就没有害处。

还要注意的是,不必等待共享首选项上SharedPreferences的结果。新值将立即写入内存缓存中,并且本机请求将分派到Android或iOS层以将其提交到存储。

像这样重构.setString()

insertDetails