import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; class DioPage extends StatefulWidget { @override State createState() { return _DioPageState(); } } class _DioPageState extends State { Dio dio = Dio( BaseOptions( baseUrl: 'http://localhost:8080/api/v1', connectTimeout: Durations.short4, receiveTimeout: Durations.short3, ), ); Future fetchData() async { try { Response response = await dio.get('http://localhost:8080/api/v1'); print(response.data); } on DioException catch (e) { print(e.message); } } Future postData() async { try { Response response = await dio.post( 'http://localhost:8080/api/v1', data: {'key': 'value'}, ); print(response.data); } on DioException catch (e) { print(e.message); } } Future refreshToken() async { // Perform a request to the refresh token endpoint and return the new access token. // You can replace this with your own implementation. return 'your_new_access_token'; } @override Widget build(BuildContext context) { Function(dynamic options, dynamic handler) onRequest; Future Function(DioException e, dynamic handler) onError; dio.interceptors.add( InterceptorsWrapper( onRequest: onRequest = (options, handler) { // Add the access token to the request header options.headers['Authorization'] = 'Bearer your_access_token'; return handler.next(options); }, onError: onError = (DioException e, handler) async { if (e.response?.statusCode == 401) { // If a 401 response is received, refresh the access token String newAccessToken = await refreshToken(); // Update the request header with the new access token e.requestOptions.headers['Authorization'] = 'Bearer $newAccessToken'; // Repeat the request with the updated header return handler.resolve(await dio.fetch(e.requestOptions)); } return handler.next(e); }, ), ); throw UnimplementedError(); } }