Home > Software engineering >  Get token auth value to another dart using sharedprefence
Get token auth value to another dart using sharedprefence

Time:03-06

how to retrieve token variable from sharedprefence in flutter? i am very new to implement api for my flutter project because previously I was only told to work on the frontend, i have saved auth token in login and here is my code to store token in sharedprefence

signIn(String email, password) async {
    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    Map data = {
      'email': email,
      'password': password
    };
    var jsonResponse = null;
    var response = await http.post(Uri.parse("/api/login"), body: data);
    if(response.statusCode == 200) {
      jsonResponse = json.decode(response.body);
      if(jsonResponse != null) {
        setState(() {
          _isLoading = false;
        });
        sharedPreferences.setString("token", jsonResponse['data']['token']['original']['token']);
        Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (BuildContext context) => HomePage()), (Route<dynamic> route) => false);
      }
    }
    else {
      
      setState(() {
        _isLoading = false;
      });
      scaffoldMessenger.showSnackBar(SnackBar(content:Text("Mohon cek Email dan Password kembali!", textAlign: TextAlign.center,), backgroundColor: Colors.red,));
    }
  }

and here is the darts place that I want to call the token for auth in the post method

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:kiriapp/models/angkot.dart';
class AngkotProvider with ChangeNotifier {
  
  late AngkotModel _angkot;
  AngkotModel get angkot => _angkot;
  set angkot(AngkotModel newAngkot) {
    _angkot = newAngkot;
    notifyListeners();
  }
  static Future<AngkotModel?> tambah(
      String user_id,
      String route_id,
      String plat_nomor,
      String pajak_tahunan,
      String pajak_stnk,
      String kir_bulanan) async {
    try {
      var body = {
        'user_id': user_id,
        'route_id': route_id,
        'plat_nomor': plat_nomor,
        'pajak_tahunan': pajak_tahunan,
        'pajak_stnk': pajak_stnk,
        'kir_bulanan': kir_bulanan,
      };
      print(body);
      
      var response = await http.post(
        Uri.parse('api/create'),
        headers: {
          'Authorization': 'Bearer $howtocallthetoken?,
        },
        body: body,
      );
      print(response.statusCode);
      print(response.body);
      if (response.statusCode == 201) {
        return AngkotModel.fromJson(jsonDecode(response.body));
      } else if (response.statusCode == 400) {
        return AngkotModel.fromJson(jsonDecode(response.body));
      }{
        return null;
      }
    } catch (e) {
      print(e);
      return null;
    }
  }
}

thanks

CodePudding user response:

To store something in shared preference we use setString function, just like you did. Now to retrieve it, you should use getString and it will return the token you stored earlier.

  SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
  String accessToken = sharedPreferences.getString("token");
  
  var response = await http.post(
    Uri.parse('api/create'),
    headers: {
      'Authorization': 'Bearer $accessToken',
    },
    body: body,
  );

Don't forget to make the function async, and handle null values as the getString function might return token as null if not stored correctly.

  • Related