import 'package:decimal/decimal.dart'; import 'package:stackwallet/models/exchange/response_objects/estimate.dart'; import 'package:stackwallet/models/exchange/response_objects/range.dart'; import 'package:stackwallet/models/exchange/response_objects/trade.dart'; import 'package:stackwallet/models/isar/exchange_cache/currency.dart'; import 'package:stackwallet/models/isar/exchange_cache/pair.dart'; import 'package:stackwallet/services/exchange/change_now/change_now_exchange.dart'; import 'package:stackwallet/services/exchange/exchange_response.dart'; import 'package:stackwallet/services/exchange/majestic_bank/majestic_bank_exchange.dart'; import 'package:stackwallet/services/exchange/simpleswap/simpleswap_exchange.dart'; abstract class Exchange { static Exchange get defaultExchange => ChangeNowExchange.instance; static Exchange fromName(String name) { switch (name) { case ChangeNowExchange.exchangeName: return ChangeNowExchange.instance; case SimpleSwapExchange.exchangeName: return SimpleSwapExchange.instance; case MajesticBankExchange.exchangeName: return MajesticBankExchange.instance; default: throw ArgumentError("Unknown exchange name"); } } String get name; Future>> getAllCurrencies(bool fixedRate); Future>> getPairsFor( String currency, bool fixedRate, ); Future>> getAllPairs(bool fixedRate); Future> getTrade(String tradeId); Future> updateTrade(Trade trade); Future>> getTrades(); Future> getRange( String from, String to, bool fixedRate, ); Future> getEstimate( String from, String to, Decimal amount, bool fixedRate, bool reversed, ); Future> createTrade({ required String from, required String to, required bool fixedRate, required Decimal amount, required String addressTo, String? extraId, required String addressRefund, required String refundExtraId, String? rateId, required bool reversed, }); }