import 'package:dio/dio.dart'; import '../models/asset/recharge_order.dart'; /// 链上充值订单 API(与 Web `stores/deposit.ts` 路径一致) class RechargeService { const RechargeService(this._dio); final Dio _dio; Future> getRechargeParents() async { final response = await _dio.get>( 'uc/coin-network/recharge-parents', ); final data = response.data?['data']; if (data is List) { return data .whereType>() .map(RechargeParentCoin.fromJson) .toList() ..sort((a, b) => a.sort.compareTo(b.sort)); } return []; } Future> getRechargeNetworks({ required String coinName, }) async { final response = await _dio.get>( 'uc/coin-network/recharge-networks', queryParameters: {'coinName': coinName}, ); final data = response.data?['data']; if (data is! List) { return []; } return data .whereType>() .map(RechargeNetworkItem.fromJson) .where((n) => n.id > 0) .toList() ..sort((a, b) => a.sort.compareTo(b.sort)); } Future> getRechargeConfigs({ required String coinName, required int networkId, }) async { final response = await _dio.get>( 'uc/coin-network/recharge-configs', queryParameters: { 'coinName': coinName, 'networkId': networkId, }, ); final data = response.data?['data']; if (data is! List) { return []; } return data .whereType>() .map(RechargeConfigOption.fromJson) .where((c) => c.networkConfigId > 0) .toList() ..sort((a, b) => a.sort.compareTo(b.sort)); } Future createRechargeOrder({ required String coinName, required int networkConfigId, required String amount, }) async { final response = await _dio.post>( 'uc/recharge/create', data: { 'coinName': coinName, 'networkConfigId': networkConfigId.toString(), 'amount': amount.trim(), }, options: Options(contentType: Headers.formUrlEncodedContentType), ); final data = response.data?['data']; if (data is Map) { return RechargeOrderDetail.fromJson(data); } throw StateError('create recharge: invalid response'); } Future submitTxHash({ required String orderNo, required String txHash, }) async { final response = await _dio.post>( 'uc/recharge/submit-hash', data: { 'orderNo': orderNo, 'txHash': txHash.trim(), }, options: Options(contentType: Headers.formUrlEncodedContentType), ); final data = response.data?['data']; if (data is Map) { return RechargeOrderDetail.fromJson(data); } throw StateError('submit-hash: invalid response'); } }