import 'package:dio/dio.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; class ApiClient { late final Dio _dio; final _storage = const FlutterSecureStorage(); static const _tokenKey = 'auth_token'; ApiClient({String? baseUrl}) { _dio = Dio(BaseOptions( baseUrl: baseUrl ?? 'http://localhost:3000/api', connectTimeout: const Duration(seconds: 10), headers: {'Content-Type': 'application/json'}, )); _dio.interceptors.add(InterceptorsWrapper( onRequest: (options, handler) async { final token = await _storage.read(key: _tokenKey); if (token != null) { options.headers['Authorization'] = 'Bearer $token'; } handler.next(options); }, )); } Future> get(String path, {Map? params}) async { final res = await _dio.get(path, queryParameters: params); return res.data as Map; } Future> post(String path, {dynamic data}) async { final res = await _dio.post(path, data: data); return res.data as Map; } Future> put(String path, {dynamic data}) async { final res = await _dio.put(path, data: data); return res.data as Map; } Future saveToken(String token) => _storage.write(key: _tokenKey, value: token); Future getToken() => _storage.read(key: _tokenKey); Future clearToken() => _storage.delete(key: _tokenKey); }