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);