fix: token

This commit is contained in:
efrilm 2025-08-17 14:34:52 +07:00
parent 7d24b3296d
commit d3543149f2
8 changed files with 34 additions and 18 deletions

View File

@ -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());

View File

@ -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<String, dynamic> getAuthorizationHeader() {
return {
'Authorization':
'Bearer ${getIt<SharedPreferences>().getString(LocalStorageKey.token)}',
};
}

View File

@ -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) {

View File

@ -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<void> 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);
}
}
}

View File

@ -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<DC<AuthFailure, Unit>> 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);

View File

@ -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) {

View File

@ -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());

View File

@ -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>()),
);