Files
social-app/apps/lib/core/api/api_client.dart
T
qzl e20b1905cb fix(apps): consolidate FormzInput validators and fix login screen
- Move FormzInput validators to core/form_inputs/form_inputs.dart
- Fix login_screen.dart syntax error (missing 'class' keyword)
- Remove unused _isLoading field
- Fix unnecessary const keywords
- Update login_cubit and register_cubit imports
- Remove duplicate FormzInput definitions from register_cubit
- Add Toast and Banner UI feedback system
- Remove legacy login/register screens (login_code, login_email, login_password, register_step2)
- Remove unused warning_banner widget
- Update tests for new error messages and DI setup
2026-02-25 18:00:02 +08:00

67 lines
1.6 KiB
Dart

import 'package:dio/dio.dart';
import 'api_exception.dart';
import 'api_interceptor.dart';
import '../storage/token_storage.dart';
class ApiClient {
final Dio _dio;
final TokenStorage _tokenStorage;
final ApiInterceptor _interceptor;
factory ApiClient({
required String baseUrl,
required TokenStorage tokenStorage,
Dio? dio,
}) {
final effectiveDio = dio ?? Dio(BaseOptions(baseUrl: baseUrl));
final interceptor = ApiInterceptor(
tokenStorage: tokenStorage,
dio: effectiveDio,
);
effectiveDio.interceptors.add(interceptor);
return ApiClient._(
dio: effectiveDio,
tokenStorage: tokenStorage,
interceptor: interceptor,
);
}
ApiClient._({
required Dio dio,
required TokenStorage tokenStorage,
required ApiInterceptor interceptor,
}) : _dio = dio,
_tokenStorage = tokenStorage,
_interceptor = interceptor;
Dio get dio => _dio;
void setRefreshCallback(Future<bool> Function(String) refresh) {
_interceptor.onTokenRefresh = () async {
final token = await _tokenStorage.getRefreshToken();
if (token == null) return false;
return refresh(token);
};
}
Future<Response<T>> get<T>(String path, {Options? options}) async {
try {
return await _dio.get<T>(path, options: options);
} on DioException catch (e) {
throw ApiException.fromDioError(e);
}
}
Future<Response<T>> post<T>(
String path, {
dynamic data,
Options? options,
}) async {
try {
return await _dio.post<T>(path, data: data, options: options);
} on DioException catch (e) {
throw ApiException.fromDioError(e);
}
}
}