show warning if exchanging with slow fee (#579)

* show warning if exchanging with slow fee

* Update setDefaultTransactionPriority for return type void; update for use MoneroTransactionPriority.automatic instead of MoneroTransactionPriority.regular.

Co-authored-by: M <m@cakewallet.com>
This commit is contained in:
Serhii
2022-11-03 15:21:35 -04:00
committed by GitHub
co-authored by M
parent 8e70b611d0
commit a52f47220e
18 changed files with 122 additions and 1 deletions
+1
View File
@@ -494,6 +494,7 @@ Future setup(
getIt.get<TradesStore>(),
getIt.get<AppStore>().settingsStore,
getIt.get<SharedPreferences>(),
getIt.get<SettingsViewModel>(),
));
getIt.registerFactory(() => ExchangeTradeViewModel(
@@ -111,6 +111,10 @@ class ExchangePage extends BasePage {
WidgetsBinding.instance
.addPostFrameCallback((_) => _setReactions(context, exchangeViewModel));
if (exchangeViewModel.isLowFee) {
_showFeeAlert(context);
}
return KeyboardActions(
disableScroll: true,
config: KeyboardActionsConfig(
@@ -794,5 +798,23 @@ class ExchangePage extends BasePage {
return address;
}
void _showFeeAlert(BuildContext context) async {
await Future<void>.delayed(Duration(seconds: 1));
final confirmed = await showPopUp<bool>(
context: context,
builder: (dialogContext) {
return AlertWithTwoActions(
alertTitle: S.of(context).low_fee,
alertContent: S.of(context).low_fee_alert,
leftButtonText: S.of(context).ignor,
rightButtonText: S.of(context).use_suggested,
actionLeftButton: () => Navigator.of(context).pop(false),
actionRightButton: () => Navigator.of(context).pop(true));
}) ?? false;
if (confirmed) {
exchangeViewModel.setDefaultTransactionPriority();
}
}
void disposeBestRateSync() => exchangeViewModel.bestRateSync?.cancel();
}
@@ -6,6 +6,10 @@ import 'package:cake_wallet/entities/preferences_key.dart';
import 'package:cake_wallet/exchange/sideshift/sideshift_exchange_provider.dart';
import 'package:cake_wallet/exchange/sideshift/sideshift_request.dart';
import 'package:cake_wallet/exchange/simpleswap/simpleswap_exchange_provider.dart';
import 'package:cake_wallet/view_model/settings/settings_view_model.dart';
import 'package:cw_bitcoin/bitcoin_transaction_priority.dart';
import 'package:cw_core/monero_transaction_priority.dart';
import 'package:cw_core/transaction_priority.dart';
import 'package:cake_wallet/exchange/simpleswap/simpleswap_request.dart';
import 'package:cw_core/wallet_base.dart';
import 'package:cw_core/crypto_currency.dart';
@@ -40,7 +44,7 @@ class ExchangeViewModel = ExchangeViewModelBase with _$ExchangeViewModel;
abstract class ExchangeViewModelBase with Store {
ExchangeViewModelBase(this.wallet, this.trades, this._exchangeTemplateStore,
this.tradesStore, this._settingsStore, this.sharedPreferences)
this.tradesStore, this._settingsStore, this.sharedPreferences, this._settingsViewModel)
: _cryptoNumberFormat = NumberFormat(),
isReverse = false,
isFixedRateMode = false,
@@ -192,6 +196,20 @@ abstract class ExchangeViewModelBase with Store {
bool get isMoneroWallet => wallet.type == WalletType.monero;
bool get isLowFee {
switch (wallet.type) {
case WalletType.monero:
case WalletType.haven:
return _settingsViewModel.transactionPriority == MoneroTransactionPriority.slow;
case WalletType.bitcoin:
return _settingsViewModel.transactionPriority == BitcoinTransactionPriority.slow;
case WalletType.litecoin:
return _settingsViewModel.transactionPriority == LitecoinTransactionPriority.slow;
default:
return false;
}
}
List<CryptoCurrency> receiveCurrencies;
List<CryptoCurrency> depositCurrencies;
@@ -204,6 +222,8 @@ abstract class ExchangeViewModelBase with Store {
final SettingsStore _settingsStore;
final SettingsViewModel _settingsViewModel;
double _bestRate = 0.0;
late Timer bestRateSync;
@@ -611,4 +631,22 @@ abstract class ExchangeViewModelBase with Store {
selectedProviders
.where((provider) => providersForCurrentPair().contains(provider)));
}
@action
void setDefaultTransactionPriority() {
switch (wallet.type) {
case WalletType.monero:
case WalletType.haven:
_settingsStore.priority[wallet.type] = MoneroTransactionPriority.automatic;
break;
case WalletType.bitcoin:
_settingsStore.priority[wallet.type] = BitcoinTransactionPriority.medium;
break;
case WalletType.litecoin:
_settingsStore.priority[wallet.type] = LitecoinTransactionPriority.medium;
break;
default:
break;
}
}
}