Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions network/lib/rest/client/dio_client.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import 'package:dio/dio.dart';
import 'package:network/rest/client/rest_client.dart';
import 'package:network/rest/di/di.dart';

class DioClient implements RestClient{

final _dio = getIt.get<Dio>();

@override
Future<dynamic> get(String url, {Map<String, dynamic>? queryParameters}) async {
try {
final response = await _dio.get(url, queryParameters: queryParameters);
return response.data;
} on DioException catch (e) {
return _handleError(e);
}
}

@override
Future<dynamic> post(String url, {data, Map<String, dynamic>? queryParameters}) async {
try {
final response = await _dio.post(url, data: data, queryParameters: queryParameters);
return response.data;
} on DioException catch (e) {
return _handleError(e);
}
}

@override
Future<dynamic> put(String url, {data, Map<String, dynamic>? queryParameters}) async {
try {
final response = await _dio.put(url, data: data, queryParameters: queryParameters);
return response.data;
} on DioException catch (e) {
return _handleError(e);
}
}

@override
Future<dynamic> delete(String url, {Map<String, dynamic>? queryParameters}) async {
try {
final response = await _dio.delete(url, queryParameters: queryParameters);
return response.data;
} on DioException catch (e) {
return _handleError(e);
}
}

// Error handling function
dynamic _handleError(DioException e) {
// TODO handle exception
}

}
16 changes: 16 additions & 0 deletions network/lib/rest/client/dio_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import 'package:dio/dio.dart';

class DioProvider {
Dio createDio() {
Dio dio = Dio();

dio.options.baseUrl = "https://api.example.com";
dio.options.connectTimeout = const Duration(seconds: 10);
dio.options.receiveTimeout = const Duration(seconds: 10);
dio.options.headers = {
'Content-Type': 'application/json',
};
//TODO add interceptors
return dio;
}
}
29 changes: 29 additions & 0 deletions network/lib/rest/client/interceptor/token_interceptor.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import 'package:dio/dio.dart';

class TokenInterceptor implements InterceptorsWrapper{
final Future<String> Function() tokenProvider;

TokenInterceptor({required this.tokenProvider});

@override
void onError(DioException err, ErrorInterceptorHandler handler) {
return handler.next(err);
}

@override
void onRequest(RequestOptions options, RequestInterceptorHandler handler) async {
final token = await tokenProvider();

if (token.isNotEmpty) {
options.headers['Authorization'] = 'Bearer $token';
}

return handler.next(options);
}

@override
void onResponse(Response response, ResponseInterceptorHandler handler) {
return handler.next(response);
}

}
12 changes: 12 additions & 0 deletions network/lib/rest/client/rest_client.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
abstract class RestClient{

Future<dynamic> get(String url, {Map<String, dynamic>? queryParameters});
Future<dynamic> post(String url, {dynamic data, Map<String, dynamic>? queryParameters});
Future<dynamic> put(String url, {dynamic data, Map<String, dynamic>? queryParameters});
Future<dynamic> delete(String url, {Map<String, dynamic>? queryParameters});

//dynamic multipart();

//void addInterceptor();
//void deleteInterceptor();
}
9 changes: 9 additions & 0 deletions network/lib/rest/client/token_provider.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

import 'package:flutter_secure_storage/flutter_secure_storage.dart';

const _storage = FlutterSecureStorage();

Future<String> tokenProvider() async {
final token = await _storage.read(key: 'auth_token');
return token ?? '';
}
9 changes: 9 additions & 0 deletions network/lib/rest/di/di.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import 'package:dio/dio.dart';
import 'package:get_it/get_it.dart';
import 'package:network/rest/client/dio_provider.dart';

final getIt = GetIt.I;

void setup() {
getIt.registerLazySingleton<Dio>(() => DioProvider().createDio());
}
1 change: 1 addition & 0 deletions network/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ dependencies:

dio: ^5.6.0
get_it: 7.7.0
flutter_secure_storage: ^9.2.2

dev_dependencies:
flutter_test:
Expand Down