CAKE-278 | fixed calculating estimated amount when receive amount is entered; fixed applyTemplate() method in the exchange_page.dart and reset() method in the exchange_view_model.dart

OleksandrSobol committed Feb 19, 2021 at 10:37 UTC fb6e7de1663f6886545b323de3ec34f13fae548e
3 files changed +36 -20
lib/exchange/changenow/changenow_exchange_provider.dart
+32 -7
@@ -173,8 +173,32 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
173 double amount,
174 bool isFixedRateMode,
175 bool isReceiveAmount}) async {
176 - final url = isFixedRateMode
177 - ? apiUri +
176 + if (isReceiveAmount && isFixedRateMode) {
177 + final url = apiUri + _marketInfoUriSufix + _fixedRateUriSufix + apiKey;
178 + final response = await get(url);
179 + final responseJSON = json.decode(response.body) as List<dynamic>;
180 + var rate = 0.0;
181 + var fee = 0.0;
182 +
183 + for (var elem in responseJSON) {
184 + final elemFrom = elem["from"] as String;
185 + final elemTo = elem["to"] as String;
186 +
187 + if ((elemFrom == to.toString().toLowerCase()) &&
188 + (elemTo == from.toString().toLowerCase())) {
189 + rate = elem["rate"] as double;
190 + fee = elem["minerFee"] as double;
191 + break;
192 + }
193 + }
194 +
195 + final estimatedAmount = (amount == 0.0)||(rate == 0.0) ? 0.0
196 + : (amount + fee)/rate;
197 +
198 + return estimatedAmount;
199 + } else {
200 + final url = isFixedRateMode
201 + ? apiUri +
202 _exchangeAmountUriSufix +
203 _fixedRateUriSufix +
204 amount.toString() +
@@ -183,17 +207,18 @@ class ChangeNowExchangeProvider extends ExchangeProvider {
207 '_' +
208 to.toString() +
209 '?api_key=' + apiKey
186 - : apiUri +
210 + : apiUri +
211 _exchangeAmountUriSufix +
212 amount.toString() +
213 '/' +
214 from.toString() +
215 '_' +
216 to.toString();
193 - final response = await get(url);
194 - final responseJSON = json.decode(response.body) as Map<String, dynamic>;
195 - final estimatedAmount = responseJSON['estimatedAmount'] as double;
217 + final response = await get(url);
218 + final responseJSON = json.decode(response.body) as Map<String, dynamic>;
219 + final estimatedAmount = responseJSON['estimatedAmount'] as double;
220
197 - return estimatedAmount;
221 + return estimatedAmount;
222 + }
223 }
224 }
lib/src/screens/exchange/exchange_page.dart
+3 -11
@@ -480,17 +480,9 @@ class ExchangePage extends BasePage {
480 currency: CryptoCurrency.fromString(template.receiveCurrency));
481
482 switch (template.provider) {
483 - case 'XMR.TO':
484 - exchangeViewModel.changeProvider(
485 - provider: exchangeViewModel.providerList[0]);
486 - break;
483 case 'ChangeNOW':
484 exchangeViewModel.changeProvider(
489 - provider: exchangeViewModel.providerList[1]);
490 - break;
491 - case 'MorphToken':
492 - exchangeViewModel.changeProvider(
493 - provider: exchangeViewModel.providerList[2]);
485 + provider: exchangeViewModel.providerList[0]);
486 break;
487 }
488
@@ -498,6 +490,7 @@ class ExchangePage extends BasePage {
490 exchangeViewModel.depositAddress = template.depositAddress;
491 exchangeViewModel.receiveAddress = template.receiveAddress;
492 exchangeViewModel.isReceiveAmountEntered = false;
493 + exchangeViewModel.isFixedRateMode = false;
494 }
495
496 void _setReactions(
@@ -670,12 +663,11 @@ class ExchangePage extends BasePage {
663 builder: (BuildContext context) {
664 return AlertWithTwoActions(
665 alertTitle: S.of(context).exchange,
673 - alertContent: 'You will be able to enter receive amount when fixed rate is checked. Do you want to check fixed rate?', //FIXME
666 + alertContent: 'You will be able to enter receive amount when fixed rate mode is checked. Do you want to switch to fixed rate mode?', //FIXME
667 leftButtonText: S.of(context).cancel,
668 rightButtonText: S.of(context).ok,
669 actionLeftButton: () {
670 FocusScope.of(context).unfocus();
678 - receiveAmountController.text = '';
671 Navigator.of(context).pop();
672 },
673 actionRightButton: () {
lib/view_model/exchange/exchange_view_model.dart
+1 -2
@@ -301,11 +301,10 @@ abstract class ExchangeViewModelBase with Store {
301
302 @action
303 void reset() {
304 + _initialPairBasedOnWallet();
305 isReceiveAmountEntered = false;
306 depositAmount = '';
307 receiveAmount = '';
307 - depositCurrency = CryptoCurrency.xmr;
308 - receiveCurrency = CryptoCurrency.btc;
308 depositAddress = depositCurrency == wallet.currency ? wallet.address : '';
309 receiveAddress = receiveCurrency == wallet.currency ? wallet.address : '';
310 isDepositAddressEnabled = !(depositCurrency == wallet.currency);