// lib/core/dio_client.dart // Cliente HTTP configurado con base URL, interceptor de JWT y timeouts. import 'package:dio/dio.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; // La base URL viene de las variables de entorno en flutter_dotenv o dart-define. // Para el emulador Android: http://10.0.2.2:8000 // Para producción: https://tu-backend.run.app const String _kBaseUrl = String.fromEnvironment( 'API_BASE_URL', defaultValue: 'http://10.0.2.2:8000', ); // Token JWT — se rellena desde el provider de auth tras login String? _jwtToken; void setJwtToken(String token) => _jwtToken = token; void clearJwtToken() => _jwtToken = null; Dio _buildDio() { final dio = Dio( BaseOptions( baseUrl: _kBaseUrl, connectTimeout: const Duration(seconds: 10), receiveTimeout: const Duration(seconds: 15), headers: {'Content-Type': 'application/json'}, ), ); // Interceptor: adjunta JWT en cada petición dio.interceptors.add( InterceptorsWrapper( onRequest: (options, handler) { if (_jwtToken != null) { options.headers['Authorization'] = 'Bearer $_jwtToken'; } handler.next(options); }, onError: (error, handler) { // 401 → limpiar token (el router de go_router redirige al login) if (error.response?.statusCode == 401) { clearJwtToken(); } handler.next(error); }, ), ); return dio; } final dioProvider = Provider((ref) => _buildDio());