createDio function
- bool useCookies = true,
Creates a new Dio instance with configured interceptors.
On Android and iOS, HTTPS requests ride on the platform's native TLS stack via NativeAdapter (Cronet on Android, URLSession on iOS). Campus Wi-Fi has a TLS DPI that RSTs connections whose ClientHello fingerprint isn't on its allowlist; dart:io's BoringSSL fails, but Cronet and URLSession pass.
Cookies are shared across clients via the global cookieJar by default.
Set useCookies to false for public requests that must remain isolated from
authenticated session state.
Implementation
Dio createDio({bool useCookies = true}) {
final dio = Dio()
..options = BaseOptions(
validateStatus: (status) => status != null && status < 400,
followRedirects: false,
);
if (Platform.isAndroid || Platform.isIOS) {
dio.httpClientAdapter = NativeAdapter(
createCupertinoConfiguration: () =>
URLSessionConfiguration.defaultSessionConfiguration()
..httpShouldSetCookies = false,
);
}
dio.interceptors.addAll([
if (useCookies) CookieManager(cookieJar), // Store cookies
NullHeaderInterceptor(), // Strip Cookie: null from dio_cookie_manager
ClientIdentifierInterceptor(), // Identify app on campus Wi-Fi
HttpsInterceptor(), // Enforce HTTPS
RedirectInterceptor(() => dio), // Handle redirects within this Dio instance
LogInterceptor(), // Log requests and responses
]);
return dio;
}