How can I add request header automatically using http package

Issue

Currently I’m sending header with every request like as follow which is very repetitive.
Is there any process so that all my request will have a request header automatically ?
Or how can I avoid code repetition for the following lines:

    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    String token = sharedPreferences.getString('accessToken');
    headers: {
        'Contet-type': 'application/json',
        'Authorization': 'Bearer $token',
      }

My complete API Request code:

Future<http.Response> getAUser(userId) async {
    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    String token = sharedPreferences.getString('accessToken');
    
    return await http.get(
      '$baseUrl/user/$userId/',
      headers: {
        'Contet-type': 'application/json',
        'Authorization': 'Bearer $token',
      },
    ).timeout(Duration(seconds: 30));
    
  }

Solution

Yes you can centralize the headers in a separate class!

class BaseService {
      Map<String, String> baseHeaders;
    
      Future initBaseService() async {
    final preferences = await SharedPreferences.getInstance();
    baseHeaders= {
      "Accept": "application/json",
      "Content-Type": "application/json; charset=utf-8",
      "Authorization": "Bearer ${preferences.getString("TOKEN")}",
    };
  }
}

And then, you can inherit your class with the base class to have access to these methods.

 class UserService extends BaseService {
      Future<http.Response> getAUser(userId) async {
        await initBaseService();
    
        return await http
            .get(
              '$baseUrl/user/$userId/',
              headers: baseHeaders,
            )
            .timeout(Duration(seconds: 30));
      }
    }

Answered By – Lapa Ny Aina Tanjona

Answer Checked By – Katrina (FlutterFixes Volunteer)

Leave a Reply

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