From b19a3dbbf809b5ec59b75e6f6eadb1c98ef3e51f Mon Sep 17 00:00:00 2001 From: julian <julian@cypherstack.com> Date: Mon, 6 Feb 2023 13:08:24 -0600 Subject: [PATCH] limit rate calls on amount entry --- lib/pages/exchange_view/exchange_form.dart | 67 ++++++++++------------ 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/lib/pages/exchange_view/exchange_form.dart b/lib/pages/exchange_view/exchange_form.dart index e200ca3b1..40c0eb7c9 100644 --- a/lib/pages/exchange_view/exchange_form.dart +++ b/lib/pages/exchange_view/exchange_form.dart @@ -66,38 +66,35 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> { bool _swapLock = false; + // todo: check and adjust this value? + static const _valueCheckInterval = Duration(milliseconds: 500); + + Timer? _sendFieldOnChangedTimer; void sendFieldOnChanged(String value) async { if (_sendFocusNode.hasFocus) { - final newFromAmount = Decimal.tryParse(value); + _sendFieldOnChangedTimer?.cancel(); - await ref - .read(exchangeFormStateProvider) - .setSendAmountAndCalculateReceiveAmount( - newFromAmount ?? Decimal.zero, true); + _sendFieldOnChangedTimer = Timer(_valueCheckInterval, () async { + final newFromAmount = Decimal.tryParse(value); - if (newFromAmount == null) { - _receiveController.text = "LOLOK"; - // ref.read(prefsChangeNotifierProvider).exchangeRateType == - // ExchangeRateType.estimated - // ? "-" - // : ""; - } + await ref + .read(exchangeFormStateProvider) + .setSendAmountAndCalculateReceiveAmount(newFromAmount, true); + }); } } + Timer? _receiveFieldOnChangedTimer; void receiveFieldOnChanged(String value) async { - final newToAmount = Decimal.tryParse(value); - final isEstimated = - ref.read(prefsChangeNotifierProvider).exchangeRateType == - ExchangeRateType.estimated; - if (!(isEstimated && - ref.read(currentExchangeNameStateProvider.state).state == - ChangeNowExchange.exchangeName)) { - ref.read(exchangeFormStateProvider).receiveAmount = newToAmount; - } - if (newToAmount == null) { - _sendController.text = ""; - } + _receiveFieldOnChangedTimer?.cancel(); + + _receiveFieldOnChangedTimer = Timer(_valueCheckInterval, () async { + final newToAmount = Decimal.tryParse(value); + + await ref + .read(exchangeFormStateProvider) + .setReceivingAmountAndCalculateSendAmount(newToAmount, true); + }); } void selectSendCurrency() async { @@ -110,6 +107,7 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> { return; } + // TODO: return currency and await update while showing loading await _showCurrencySelectionSheet( willChange: ref.read(exchangeFormStateProvider).sendCurrency, willChangeIsSend: true, @@ -140,7 +138,7 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> { ), ); - await Future<void>.delayed(const Duration(milliseconds: 300)); + // await Future<void>.delayed(const Duration(milliseconds: 300)); if (mounted) { Navigator.of(context, rootNavigator: true).pop(); @@ -157,9 +155,10 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> { return; } + // TODO: return currency and await update while showing loading await _showCurrencySelectionSheet( willChange: ref.read(exchangeFormStateProvider).receiveCurrency, - willChangeIsSend: false, + willChangeIsSend: false, paired: ref.read(exchangeFormStateProvider).sendCurrency, isFixedRate: type == ExchangeRateType.fixed, onSelected: (selectedCurrency) => ref @@ -187,7 +186,7 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> { ), ); - await Future<void>.delayed(const Duration(milliseconds: 300)); + // await Future<void>.delayed(const Duration(milliseconds: 300)); if (mounted) { Navigator.of(context, rootNavigator: true).pop(); @@ -712,7 +711,6 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> { final rateType = ref.watch( prefsChangeNotifierProvider.select((value) => value.exchangeRateType)); - // provider for simpleswap; not called rn ref.listen<String>(currentExchangeNameStateProvider, (previous, next) { ref.read(exchangeFormStateProvider).updateExchange( exchange: ref.read(exchangeProvider), @@ -729,11 +727,7 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> { exchangeFormStateProvider.select((value) => value.toAmountString), (previous, String next) { if (!_receiveFocusNode.hasFocus) { - // ref.watch(exchangeProvider).name == - // SimpleSwapExchange.exchangeName && _receiveController.text = isEstimated && next.isEmpty ? "-" : next; - //todo: check if print needed - // debugPrint("RECEIVE AMOUNT LISTENER ACTIVATED"); if (_swapLock) { _sendController.text = ref.read(exchangeFormStateProvider).fromAmountString; @@ -745,8 +739,6 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> { (previous, String next) { if (!_sendFocusNode.hasFocus) { _sendController.text = next; - //todo: check if print needed - // debugPrint("SEND AMOUNT LISTENER ACTIVATED"); if (_swapLock) { _receiveController.text = isEstimated ? ref.read(exchangeFormStateProvider).toAmountString.isEmpty @@ -884,10 +876,9 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> { "", ticker: ref.watch( exchangeFormStateProvider.select((value) => value.toTicker)), - readOnly: (rateType) == ExchangeRateType.estimated, - // || - // ref.watch(exchangeProvider).name == - // SimpleSwapExchange.exchangeName, + readOnly: (rateType) == ExchangeRateType.estimated && + ref.watch(exchangeProvider).name == + ChangeNowExchange.exchangeName, ), if (ref .watch(