createDio static method

Dio createDio()

Implementation

static Dio createDio() {
  BaseOptions options = BaseOptions(
    baseUrl: AppConfig.shared.baseUrl,
    validateStatus: (status) {
      return status != 401;
    },
    headers: {
      'Content-Type': 'application/json',
    },
  );

  var dio = Dio(options);


  dio.interceptors.add(
    InterceptorsWrapper(
      onRequest: (options, handler) async {
        final token = di.sl<PrefUtils>().getToken();
        if (token.isNotEmpty) {
          options.headers['Authorization'] = 'Bearer $token';
        }
        return handler.next(options);
      },
      onError: (DioException error, handler) async {
        if (error.response?.statusCode == 401) {
         di.sl<PrefUtils>().logout();

          final currentRoute = appRouter.current.name;
          if (currentRoute != LoginRoute.name) {
            appRouter.replaceAll([const LoginRoute()]);
          }
          return handler.reject(error);
        }
        return handler.next(error);
      },
    ),
  );


  dio.httpClientAdapter = IOHttpClientAdapter(
    createHttpClient: () {
      final HttpClient client =
      HttpClient(context: SecurityContext(withTrustedRoots: false));
      // You can test the intermediate / root cert here. We just ignore it.
      client.badCertificateCallback =
      ((X509Certificate cert, String host, int port) => true);
      return client;
    },
  );

  dio.interceptors.add(TalkerDioLogger(
    settings: const TalkerDioLoggerSettings(
      printRequestHeaders: true,
      printResponseHeaders: true,
      printResponseMessage: true,
    ),
  ));

  return dio;
}