|
@@ -0,0 +1,78 @@
|
|
|
+import 'package:dio/dio.dart';
|
|
|
+import 'package:flutter/material.dart';
|
|
|
+
|
|
|
+class DioPage extends StatefulWidget {
|
|
|
+ @override
|
|
|
+ State<StatefulWidget> createState() {
|
|
|
+ return _DioPageState();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+class _DioPageState extends State<DioPage> {
|
|
|
+
|
|
|
+Dio dio = Dio(
|
|
|
+ BaseOptions(
|
|
|
+ baseUrl: 'http://localhost:8080/api/v1',
|
|
|
+ connectTimeout: Durations.short4,
|
|
|
+ receiveTimeout: Durations.short3,
|
|
|
+ ),
|
|
|
+);
|
|
|
+
|
|
|
+Future<void> fetchData() async {
|
|
|
+ try {
|
|
|
+ Response response = await dio.get('http://localhost:8080/api/v1');
|
|
|
+ print(response.data);
|
|
|
+ } on DioException catch (e) {
|
|
|
+ print(e.message);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+Future<void> 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<String> 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();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|