【问题标题】:is there way to get a particular data which have been saved using shared preference?有没有办法获得使用共享偏好保存的特定数据?
【发布时间】:2022-01-16 13:05:31
【问题描述】:

#i 使用共享首选项保存了我所有的用户数据以执行自动登录,并且效果很好,数据被保存

 token = responseData['token'];
      userEmail = responseData['user_email'];
      userNicename = responseData['user_nicename'];
      userDisplayName = responseData['user_display_name'];
      userAddress = responseData['user_address'];
      userContact = responseData['user_contact'];
      userId = responseData['user_id'];
      userDisplayUrl = responseData['user_display_url'];
      notifyListeners();
      SharedPreferences prefs = await SharedPreferences.getInstance();
      final userData = jsonEncode({'token':token,'user_email':userEmail,'user_nicename':userNicename,'user_display_name':userDisplayName,'user_address':userAddress,'user_contact':userContact,'user_id':userId,'user_display_url':userDisplayUrl});
      prefs.setString('userData',userData);

#数据就是这样保存的

{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvc3dlZXQtYXJkaW5naGVsbGkuMy0xMDgtMTM4LTIwNi5wbGVzay5wYWdlIiwiaWF0IjoxNjQyMzMwNzQyLCJuYmYiOjE2NDIzMzA3NDIsImV4cCI6MTY0MjkzNTU0MiwiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMjgifX19.2jZEu-QNL3UxRiFSgVE728bF_cl_CZd0VJLT1f5HfCc","user_email":"sauravadhikari404@gmail.com","user_nicename":"sauravadhikari404","user_display_name":"SauravAdhikari404","user_address":null,"user_contact":null,"user_id":"28","user_display_url":""}

#现在我想访问单个数据,例如我只想获取该 user_id 或 user_email,但我不知道该怎么做,我尝试过这样

String? userData;
  @override

  void initState(){
    // TODO: implement initState
    getUserId();
    super.initState();
  }
  void getUserId()async{
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      userData = prefs.getString("userData");
      print(userData);
    });
  }

#正如我上面提到的,我的所有数据都在 userData 中,但现在我只想获取我的 user_id 或 user_email,但我无法

【问题讨论】:

标签: flutter dart dart-null-safety


【解决方案1】:

使用 jsonDecode 将其转换为 Map:

像这样:

setState(() {
  var userId = jsonDecode(prefs.getString("userData"))["user_id"];
  print(userId);
});

处理null 案例:

String? userDataString = prefs.getString("userData");
if(userDataString != null){
  var userId = jsonDecode(userDataString)["user_id"];
  var email = jsonDecode(userDataString)["user_email"];
}

【讨论】:

  • 感谢它的工作,但我们不能直接做 prefs.getString('userData')['user_id'] 只是假设
  • getString() 返回一个 String[] 不能在 String 上调用您可以为 getMap() 编写一个扩展,返回一个 Map(因为 [] 并使用Map) 并继续在您的项目中使用它。
猜你喜欢
  • 1970-01-01
  • 2019-10-07
  • 2011-06-14
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
相关资源
最近更新 更多