import 'package:dio/dio.dart'; import 'package:get_it/get_it.dart'; import 'package:maibu_satabot_v2/core/app/app_user_cubit.dart'; import 'package:maibu_satabot_v2/core/consts/http_api_consts.dart'; import 'package:maibu_satabot_v2/core/storage/user_storage.dart'; import 'package:maibu_satabot_v2/features/auth/presentation/bloc/auth_cubit.dart'; import 'package:maibu_satabot_v2/features/v2/home/data/datasources/site_datasource.dart'; import 'package:maibu_satabot_v2/features/v2/home/domain/entities/site_entity.dart'; class SiteDataSourceImpl implements SiteDataSource { final Dio dio; final UserStorage _userStorage; final AppUserCubit _appUserCubit; SiteDataSourceImpl(this.dio, this._userStorage, this._appUserCubit); @override Future> getSiteList(String userId) async { print('🔍 [SiteDataSource] 开始获取 Token...'); print( '🔍 [SiteDataSource] AppUserCubit 当前用户: ${_appUserCubit.state.user?.username}', ); var token = _appUserCubit.state.user?.token; print( '🔍 [SiteDataSource] 从 AppUserCubit 获取的 Token: ${token != null ? "${token.substring(0, 20)}..." : "null"}', ); if (token == null) { print('⚠️ [SiteDataSource] AppUserCubit 没有 Token,尝试从本地存储获取...'); final user = await _userStorage.getUser(); token = user?.token; print( '🔍 [SiteDataSource] 从本地存储获取的 Token: ${token != null ? "${token.substring(0, 20)}..." : "null"}', ); } print( '🔑 [SiteDataSource] 获取到的 Token: ${token != null ? "${token.substring(0, 20)}..." : "null"}', ); final queryParams = {'userId': userId}; final response = await dio.get( HttpApiConsts.getSiteList, queryParameters: queryParams, options: Options( headers: {'Authorization': token != null ? 'Bearer $token' : ''}, ), ); if (response.statusCode != 200) { throw Exception('网络请求失败: ${response.statusCode}'); } final responseData = response.data; if (responseData['code'] == 401 || responseData['code'] == 403) { print( '🚨 [SiteDataSource] 收到认证错误码 ${responseData['code']},触发 Token 过期处理', ); try { GetIt.I().tokenExpired(); } catch (e) {} throw Exception('登录已过期,请重新登录'); } if (responseData['code'] != 200) { throw Exception(responseData['msg'] ?? '业务异常'); } final List rows = responseData['data'] ?? []; print('📤 [SiteDataSource] 接口返回原始数据:'); for (var i = 0; i < rows.length && i < 3; i++) { print(' 场站$i: ${rows[i]}'); } return rows.map((item) => SiteEntity.fromJson(item)).toList(); } }