Shaz
Shaz

Reputation: 2647

Global configuration (interceptor) for dio in Flutter

First time with Flutter. I'm using dio to send HTTP requests, and I have to add a header to all requests, which I do with an interceptor, like this:

Dio dio = new Dio();
dio.interceptors.add(InterceptorsWrapper(
    onRequest:(RequestOptions options) async {
      options.headers["X-Requested-With"] = "XMLHttpRequest";
    })
);

It works in main.dart, but if I want to import another class like MyHomePage.dart and do HTTP requests there, I'd have to redefine the interceptor in that class too.

How can I implement this interceptor for my whole application without adding it in every .dart file?

Upvotes: 2

Views: 7095

Answers (2)

user15701614
user15701614

Reputation:

This worked good for me, without interceptors, just create a class and use it in your app.

import 'package:dio/dio.dart';
import '../helpers/api_url.dart';

class dioClient {
  Dio dio = Dio();

  static Dio simpleDio() {
    return Dio(BaseOptions(
        baseUrl: apiUrl(),
        headers: {'Content-Type': 'application/json; charset=UTF-8'}));
  }

  static Dio dioWithCookie(String cookie) {
    return Dio(BaseOptions(baseUrl: apiUrl(), headers: {
      'Content-Type': 'application/json; charset=UTF-8',
      'Cookie': cookie
    }));
  }
}

Upvotes: 0

George Herbert
George Herbert

Reputation: 400

Create a function that houses the DIO and then call it where needed

Dio getDio() {
  Dio dio = new Dio();
  dio.interceptors.add(InterceptorsWrapper(onRequest: (RequestOptions options) async {
    options.headers["X-Requested-With"] = "XMLHttpRequest";
  }));
  return dio;
}

Upvotes: 8

Related Questions