diff --git a/lib/common/api/api_client.dart b/lib/common/api/api_client.dart index 31f914a..95ab220 100644 --- a/lib/common/api/api_client.dart +++ b/lib/common/api/api_client.dart @@ -2,10 +2,8 @@ import 'package:awesome_dio_interceptor/awesome_dio_interceptor.dart'; import 'package:dio/dio.dart'; import 'package:flutter/foundation.dart'; import 'package:injectable/injectable.dart'; -import 'package:shared_preferences/shared_preferences.dart'; import '../../env.dart'; -import '../constant/local_storage_key.dart'; import 'api_failure.dart'; import 'errors/bad_network_error.dart'; import 'errors/bad_request_error.dart'; @@ -24,16 +22,11 @@ import 'interceptors/unauthorized_interceptor.dart'; class ApiClient { final Dio _dio; final Env _env; - final SharedPreferences _preferences; - ApiClient(this._dio, this._env, this._preferences) { + ApiClient(this._dio, this._env) { _dio.options.baseUrl = _env.baseUrl; _dio.options.validateStatus = (status) => status! < 500; _dio.options.connectTimeout = const Duration(seconds: 20); - _dio.options.headers = { - 'authorization': - 'Bearer ${_preferences.getString(LocalStorageKey.token)}', - }; _dio.interceptors.add(BadNetworkErrorInterceptor()); _dio.interceptors.add(BadRequestErrorInterceptor()); _dio.interceptors.add(InternalServerErrorInterceptor()); diff --git a/lib/common/function/app_function.dart b/lib/common/function/app_function.dart index ddffdda..617d7bf 100644 --- a/lib/common/function/app_function.dart +++ b/lib/common/function/app_function.dart @@ -1,4 +1,8 @@ import 'package:flutter/material.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +import '../../injection.dart'; +import '../constant/local_storage_key.dart'; void dismissKeyboard(BuildContext context) { final currentFocus = FocusScope.of(context); @@ -6,3 +10,10 @@ void dismissKeyboard(BuildContext context) { FocusManager.instance.primaryFocus?.unfocus(); } } + +Map getAuthorizationHeader() { + return { + 'Authorization': + 'Bearer ${getIt().getString(LocalStorageKey.token)}', + }; +} diff --git a/lib/infrastructure/analytic/datasource/remote_data_provider.dart b/lib/infrastructure/analytic/datasource/remote_data_provider.dart index c5827b1..4c55fa4 100644 --- a/lib/infrastructure/analytic/datasource/remote_data_provider.dart +++ b/lib/infrastructure/analytic/datasource/remote_data_provider.dart @@ -6,6 +6,7 @@ import 'package:injectable/injectable.dart'; import '../../../common/api/api_client.dart'; import '../../../common/api/api_failure.dart'; import '../../../common/extension/extension.dart'; +import '../../../common/function/app_function.dart'; import '../../../common/url/api_path.dart'; import '../../../domain/analytic/analytic.dart'; import '../analytic_dtos.dart'; @@ -28,6 +29,7 @@ class AnalyticRemoteDataProvider { 'date_from': dateFrom.toServerDate, 'date_to': dateTo.toServerDate, }, + headers: getAuthorizationHeader(), ); if (response.data['data'] == null) { diff --git a/lib/infrastructure/auth/datasources/local_data_provider.dart b/lib/infrastructure/auth/datasources/local_data_provider.dart index 0b146a6..26c460c 100644 --- a/lib/infrastructure/auth/datasources/local_data_provider.dart +++ b/lib/infrastructure/auth/datasources/local_data_provider.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'dart:developer'; import 'package:injectable/injectable.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -10,6 +11,7 @@ import '../auth_dtos.dart'; @injectable class AuthLocalDataProvider { final SharedPreferences _sharedPreferences; + final String _logName = 'AuthLocalDataProvider'; AuthLocalDataProvider(this._sharedPreferences); @@ -48,7 +50,11 @@ class AuthLocalDataProvider { } Future deleteAllAuth() async { - await _sharedPreferences.remove(LocalStorageKey.token); - await _sharedPreferences.remove(LocalStorageKey.user); + try { + await _sharedPreferences.remove(LocalStorageKey.token); + await _sharedPreferences.remove(LocalStorageKey.user); + } catch (e) { + log('deleteAllAuthError', name: _logName, error: e); + } } } diff --git a/lib/infrastructure/auth/datasources/remote_data_provider.dart b/lib/infrastructure/auth/datasources/remote_data_provider.dart index 779f4ba..d81bd78 100644 --- a/lib/infrastructure/auth/datasources/remote_data_provider.dart +++ b/lib/infrastructure/auth/datasources/remote_data_provider.dart @@ -6,6 +6,7 @@ import 'package:data_channel/data_channel.dart'; import '../../../common/api/api_client.dart'; import '../../../common/api/api_failure.dart'; +import '../../../common/function/app_function.dart'; import '../../../common/url/api_path.dart'; import '../../../domain/auth/auth.dart'; import '../auth_dtos.dart'; @@ -45,7 +46,7 @@ class AuthRemoteDataProvider { Future> logout() async { try { - await _apiClient.post(ApiPath.logout); + await _apiClient.post(ApiPath.logout, headers: getAuthorizationHeader()); return DC.data(unit); } on ApiFailure catch (e, s) { log('login', name: _logName, error: e, stackTrace: s); diff --git a/lib/infrastructure/category/datasource/remote_data_provider.dart b/lib/infrastructure/category/datasource/remote_data_provider.dart index 46e1ba9..62d916c 100644 --- a/lib/infrastructure/category/datasource/remote_data_provider.dart +++ b/lib/infrastructure/category/datasource/remote_data_provider.dart @@ -5,6 +5,7 @@ import 'package:injectable/injectable.dart'; import '../../../common/api/api_client.dart'; import '../../../common/api/api_failure.dart'; +import '../../../common/function/app_function.dart'; import '../../../common/url/api_path.dart'; import '../../../domain/category/category.dart'; import '../category_dtos.dart'; @@ -25,6 +26,7 @@ class CategoryRemoteDataProvider { final response = await _apiClient.get( ApiPath.category, params: {'page': page, 'limit': limit, 'is_active': isActive}, + headers: getAuthorizationHeader(), ); if (response.data['data'] == null) { diff --git a/lib/infrastructure/product/datasources/remote_data_provider.dart b/lib/infrastructure/product/datasources/remote_data_provider.dart index 9d3db60..b105ce7 100644 --- a/lib/infrastructure/product/datasources/remote_data_provider.dart +++ b/lib/infrastructure/product/datasources/remote_data_provider.dart @@ -5,6 +5,7 @@ import 'package:injectable/injectable.dart'; import '../../../common/api/api_client.dart'; import '../../../common/api/api_failure.dart'; +import '../../../common/function/app_function.dart'; import '../../../common/url/api_path.dart'; import '../../../domain/product/product.dart'; import '../product_dtos.dart'; @@ -33,7 +34,11 @@ class ProductRemoteDataProvider { params['search'] = search; } - final response = await _apiClient.get(ApiPath.product, params: params); + final response = await _apiClient.get( + ApiPath.product, + params: params, + headers: getAuthorizationHeader(), + ); if (response.data['data'] == null) { return DC.error(ProductFailure.empty()); diff --git a/lib/injection.config.dart b/lib/injection.config.dart index 35d7433..c80fd33 100644 --- a/lib/injection.config.dart +++ b/lib/injection.config.dart @@ -100,14 +100,10 @@ extension GetItInjectableX on _i174.GetIt { gh.factory<_i991.AuthLocalDataProvider>( () => _i991.AuthLocalDataProvider(gh<_i460.SharedPreferences>()), ); - gh.factory<_i6.Env>(() => _i6.ProdEnv(), registerFor: {_prod}); gh.lazySingleton<_i115.ApiClient>( - () => _i115.ApiClient( - gh<_i361.Dio>(), - gh<_i6.Env>(), - gh<_i460.SharedPreferences>(), - ), + () => _i115.ApiClient(gh<_i361.Dio>(), gh<_i6.Env>()), ); + gh.factory<_i6.Env>(() => _i6.ProdEnv(), registerFor: {_prod}); gh.factory<_i17.AuthRemoteDataProvider>( () => _i17.AuthRemoteDataProvider(gh<_i115.ApiClient>()), );