// import 'package:decimal/decimal.dart'; // import 'package:flutter/foundation.dart'; // import 'package:stackwallet/models/exchange/response_objects/currency.dart'; // import 'package:stackwallet/pages/exchange_view/sub_widgets/exchange_rate_sheet.dart'; // import 'package:stackwallet/services/exchange/change_now/change_now_exchange.dart'; // import 'package:stackwallet/services/exchange/exchange.dart'; // import 'package:stackwallet/utilities/logger.dart'; // // class ExchangeFormState extends ChangeNotifier { // ExchangeFormState(this.exchangeRateType); // final ExchangeRateType exchangeRateType; // // Exchange? _exchange; // Exchange get exchange => // _exchange ??= ChangeNowExchange(); // default to change now // set exchange(Exchange value) { // _exchange = value; // _updateRangesAndEstimate( // shouldNotifyListeners: true, // ); // } // // bool _reversed = false; // bool get reversed => _reversed; // // set reversed(bool reversed) { // // _reversed = reversed; // // // // // } // // Decimal? _rate; // Decimal? get rate => _rate; // // set rate(Decimal? rate) { // // _rate = rate; // // // // // } // // Decimal? _sendAmount; // Decimal? get sendAmount => _sendAmount; // // set sendAmount(Decimal? sendAmount) { // // _sendAmount = sendAmount; // // // // // } // // Decimal? _receiveAmount; // Decimal? get receiveAmount => _receiveAmount; // // set receiveAmount(Decimal? receiveAmount) { // // _receiveAmount = receiveAmount; // // // // // } // // Currency? _sendCurrency; // Currency? get sendCurrency => _sendCurrency; // // set sendCurrency(Currency? sendCurrency) { // // _sendCurrency = sendCurrency; // // // // // } // // Currency? _receiveCurrency; // Currency? get receiveCurrency => _receiveCurrency; // // set receiveCurrency(Currency? receiveCurrency) { // // _receiveCurrency = receiveCurrency; // // // // // } // // Decimal? _minSendAmount; // Decimal? get minSendAmount => _minSendAmount; // // set minSendAmount(Decimal? minSendAmount) { // // _minSendAmount = minSendAmount; // // // // // } // // Decimal? _minReceiveAmount; // Decimal? get minReceiveAmount => _minReceiveAmount; // // set minReceiveAmount(Decimal? minReceiveAmount) { // // _minReceiveAmount = minReceiveAmount; // // // // // } // // Decimal? _maxSendAmount; // Decimal? get maxSendAmount => _maxSendAmount; // // set maxSendAmount(Decimal? maxSendAmount) { // // _maxSendAmount = maxSendAmount; // // // // // } // // Decimal? _maxReceiveAmount; // Decimal? get maxReceiveAmount => _maxReceiveAmount; // // set maxReceiveAmount(Decimal? maxReceiveAmount) { // // _maxReceiveAmount = maxReceiveAmount; // // // // // } // // //============================================================================ // // computed properties // //============================================================================ // // String? get fromTicker => _sendCurrency?.ticker; // // String? get toTicker => _receiveCurrency?.ticker; // // String get warning { // if (reversed) { // if (_receiveCurrency != null && _receiveAmount != null) { // if (_minReceiveAmount != null && // _receiveAmount! < _minReceiveAmount! && // _receiveAmount! > Decimal.zero) { // return "Minimum amount ${_minReceiveAmount!.toString()} ${_receiveCurrency!.ticker.toUpperCase()}"; // } else if (_maxReceiveAmount != null && // _receiveAmount! > _maxReceiveAmount!) { // return "Maximum amount ${_maxReceiveAmount!.toString()} ${_receiveCurrency!.ticker.toUpperCase()}"; // } // } // } else { // if (_sendCurrency != null && _sendAmount != null) { // if (_minSendAmount != null && // _sendAmount! < _minSendAmount! && // _sendAmount! > Decimal.zero) { // return "Minimum amount ${_minSendAmount!.toString()} ${_sendCurrency!.ticker.toUpperCase()}"; // } else if (_maxSendAmount != null && _sendAmount! > _maxSendAmount!) { // return "Maximum amount ${_maxSendAmount!.toString()} ${_sendCurrency!.ticker.toUpperCase()}"; // } // } // } // // return ""; // } // // //============================================================================ // // public state updaters // //============================================================================ // // void reset(bool shouldNotifyListeners) { // _exchange = null; // _reversed = false; // _rate = null; // _sendAmount = null; // _receiveAmount = null; // _sendCurrency = null; // _receiveCurrency = null; // _minSendAmount = null; // _minReceiveAmount = null; // _maxSendAmount = null; // _maxReceiveAmount = null; // // if (shouldNotifyListeners) { // notifyListeners(); // } // } // // Future setFromAmountAndCalculateToAmount( // Decimal? newSendAmount, // bool shouldNotifyListeners, // ) async { // if (newSendAmount == null) { // // todo: check if this breaks things and stuff // _receiveAmount = null; // _sendAmount = null; // } else { // if (newSendAmount <= Decimal.zero) { // _receiveAmount = Decimal.zero; // } // // _sendAmount = newSendAmount; // _reversed = false; // // await _updateRangesAndEstimate( // shouldNotifyListeners: false, // ); // } // // if (shouldNotifyListeners) { // notifyListeners(); // } // } // // Future setToAmountAndCalculateFromAmount( // Decimal? newReceiveAmount, // bool shouldNotifyListeners, // ) async { // if (newReceiveAmount == null) { // // todo: check if this breaks things and stuff // _receiveAmount = null; // _sendAmount = null; // } else { // if (newReceiveAmount <= Decimal.zero) { // _sendAmount = Decimal.zero; // } // // _receiveAmount = newReceiveAmount; // _reversed = true; // // await _updateRangesAndEstimate( // shouldNotifyListeners: false, // ); // } // // if (shouldNotifyListeners) { // notifyListeners(); // } // } // // Future updateFrom( // Currency sendCurrency, // bool shouldNotifyListeners, // ) async { // try { // _sendCurrency = sendCurrency; // if (_receiveCurrency == null) { // _rate = null; // } else { // await _updateRangesAndEstimate( // shouldNotifyListeners: false, // ); // } // } catch (e, s) { // Logging.instance.log("$e\n$s", level: LogLevel.Error); // } // if (shouldNotifyListeners) { // notifyListeners(); // } // } // // Future updateTo( // Currency receiveCurrency, // bool shouldNotifyListeners, // ) async { // try { // _receiveCurrency = receiveCurrency; // // if (_sendCurrency == null) { // _rate = null; // } else { // await _updateRangesAndEstimate( // shouldNotifyListeners: false, // ); // } // } catch (e, s) { // Logging.instance.log("$e\n$s", level: LogLevel.Error); // } // if (shouldNotifyListeners) { // notifyListeners(); // } // } // // Future swap( // {required bool shouldNotifyListeners,}) async { // final Decimal? temp = sendAmount; // _sendAmount = receiveAmount; // _receiveAmount = temp; // // _minSendAmount = null; // _maxSendAmount = null; // _minReceiveAmount = null; // _maxReceiveAmount = null; // // final Currency? tmp = sendCurrency; // _sendCurrency = receiveCurrency; // _receiveCurrency = tmp; // // await _updateRangesAndEstimate( // shouldNotifyListeners: false, // ); // } // // //============================================================================ // // private state updaters // //============================================================================ // // Future _updateRangesAndEstimate( // {required bool shouldNotifyListeners,}) async { // await _updateRanges(shouldNotifyListeners: false); // await _updateEstimate(shouldNotifyListeners: false); // if (shouldNotifyListeners) { // notifyListeners(); // } // } // // Future _updateRanges({required bool shouldNotifyListeners,}) async { // // if (exchange?.name == SimpleSwapExchange.exchangeName) { // // reversed = false; // // } // final _send = sendCurrency; // final _receive = receiveCurrency; // if (_send == null || _receive == null) { // Logging.instance.log( // "Tried to $runtimeType.updateRanges where ( $_send || $_receive) for: $exchange", // level: LogLevel.Info, // ); // return; // } // final response = await exchange.getRange( // _send.ticker, // _receive.ticker, // exchangeRateType == ExchangeRateType.fixed, // ); // // if (response.value == null) { // Logging.instance.log( // "Tried to $runtimeType.updateRanges for: $exchange where response: $response", // level: LogLevel.Info, // ); // return; // } // final responseReversed = await exchange.getRange( // _receive.ticker, // _send.ticker, // exchangeRateType == ExchangeRateType.fixed, // ); // // if (responseReversed.value == null) { // Logging.instance.log( // "Tried to $runtimeType.updateRanges for: $exchange where response: $responseReversed", // level: LogLevel.Info, // ); // return; // } // // final range = response.value!; // final rangeReversed = responseReversed.value!; // // _minSendAmount = range.min; // _maxSendAmount = range.max; // _minReceiveAmount = rangeReversed.min; // _maxReceiveAmount = rangeReversed.max; // // //todo: check if print needed // // debugPrint( // // "updated range for: $exchange for $_fromTicker-$_toTicker: $range"); // // if (shouldNotifyListeners) { // notifyListeners(); // } // } // // Future _updateEstimate({ // required bool shouldNotifyListeners, // }) async { // // if (exchange?.name == SimpleSwapExchange.exchangeName) { // // reversed = false; // // } // final amount = reversed ? receiveAmount : sendAmount; // if (sendCurrency == null || // receiveCurrency == null || // amount == null || // amount <= Decimal.zero) { // Logging.instance.log( // "Tried to $runtimeType.updateEstimate for: $exchange where (from: $sendCurrency || to: $receiveCurrency || amount: $amount)", // level: LogLevel.Info, // ); // return; // } // final response = await exchange.getEstimate( // sendCurrency!.ticker, // receiveCurrency!.ticker, // amount, // exchangeRateType == ExchangeRateType.fixed, // reversed, // ); // // if (response.value == null) { // Logging.instance.log( // "Tried to $runtimeType.updateEstimate for: $exchange where response: $response", // level: LogLevel.Info, // ); // return; // } // // final estimate = response.value!; // // if (reversed) { // _sendAmount = estimate.estimatedAmount; // } else { // _receiveAmount = estimate.estimatedAmount; // } // // _rate = // (receiveAmount! / sendAmount!).toDecimal(scaleOnInfinitePrecision: 12); // // //todo: check if print needed // // debugPrint( // // "updated estimate for: $exchange for $fromTicker-$toTicker: $estimate"); // // if (shouldNotifyListeners) { // notifyListeners(); // } // } // // // }