import '../../core/constants/api_endpoints.dart'; import '../../core/network/api_response.dart'; import '../../core/network/dio_client.dart'; import '../models/kline_candle.dart'; /// K线 REST API 服务 class KlineService { final DioClient _client; KlineService(this._client); /// 获取历史K线数据 Future>> fetchHistory({ required String coinCode, required String interval, int limit = 200, int? before, }) async { final params = { 'coinCode': coinCode, 'interval': interval, 'limit': limit, }; if (before != null) params['before'] = before; final response = await _client.get>( ApiEndpoints.klineHistory, queryParameters: params, ); if (response.success && response.data != null) { final list = response.data!['list'] as List? ?? []; final candles = list .map((e) => KlineCandle.fromHistoryJson(e as Map)) .toList(); return ApiResponse.success(candles, response.message); } return ApiResponse.fail(response.message ?? '获取K线数据失败'); } /// 获取当前进行中的K线 Future> fetchCurrentCandle({ required String coinCode, required String interval, }) async { final response = await _client.get>( ApiEndpoints.klineCurrent, queryParameters: {'coinCode': coinCode, 'interval': interval}, ); if (response.success && response.data != null) { return ApiResponse.success( KlineCandle.fromJson(response.data!), response.message, ); } return ApiResponse.fail(response.message ?? '获取当前K线失败'); } /// 获取支持的周期列表 Future>> fetchIntervals() async { final response = await _client.get>( ApiEndpoints.klineIntervals, ); if (response.success && response.data != null) { final list = response.data!['list'] as List? ?? []; return ApiResponse.success(list.cast(), response.message); } return ApiResponse.fail(response.message ?? '获取周期列表失败'); } }