is there way to get a particular data which have been saved using shared preference?

Issue

#i Saved all my user data using shared preference to perform autologin and it works well data is saved

 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);

#Data is saved in this manner

{"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":""}

#now i wanna access single single data like i wanna get that user_id only or user_email only but i dont know how to do it i tried like this

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);
    });
  }

#as i mentioned above all my data is comming in userData but now i wanna fetch my user_id only or user_email but i am unable to

Solution

Use jsonDecode to convert it to a Map:

Like so:

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

To handle the null case:

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

Answered By – Josteve

Answer Checked By – Gilberto Lyons (FlutterFixes Admin)

Leave a Reply

Your email address will not be published. Required fields are marked *