This commit is contained in:
M
2021-01-27 15:51:51 +02:00
parent 6639d25264
commit e3b8ea1128
21 changed files with 427 additions and 236 deletions
@@ -1,4 +1,5 @@
import 'package:cake_wallet/bitcoin/bitcoin_amount_format.dart';
import 'package:cake_wallet/bitcoin/bitcoin_transaction_priority.dart';
import 'package:cake_wallet/bitcoin/bitcoin_wallet.dart';
import 'package:cake_wallet/core/wallet_base.dart';
import 'package:cake_wallet/entities/crypto_currency.dart';
@@ -302,8 +303,8 @@ abstract class ExchangeViewModelBase with Store {
void calculateDepositAllAmount() {
if (wallet is BitcoinWallet) {
final availableBalance = wallet.balance.available;
final fee = BitcoinWalletBase.feeAmountForPriority(
_settingsStore.transactionPriority);
final priority = _settingsStore.priority[wallet.type] as BitcoinTransactionPriority;
final fee = wallet.calculateEstimatedFee(priority, null);
if (availableBalance < fee || availableBalance == 0) {
return;
+49 -12
View File
@@ -1,6 +1,11 @@
import 'package:cake_wallet/bitcoin/bitcoin_amount_format.dart';
import 'package:cake_wallet/bitcoin/bitcoin_transaction_priority.dart';
import 'package:cake_wallet/entities/balance_display_mode.dart';
import 'package:cake_wallet/entities/calculate_fiat_amount_raw.dart';
import 'package:cake_wallet/entities/transaction_description.dart';
import 'package:cake_wallet/entities/transaction_priority.dart';
import 'package:cake_wallet/monero/monero_amount_format.dart';
import 'package:cake_wallet/view_model/settings/settings_view_model.dart';
import 'package:hive/hive.dart';
import 'package:intl/intl.dart';
import 'package:mobx/mobx.dart';
@@ -21,7 +26,7 @@ import 'package:cake_wallet/monero/monero_transaction_creation_credentials.dart'
import 'package:cake_wallet/entities/sync_status.dart';
import 'package:cake_wallet/entities/crypto_currency.dart';
import 'package:cake_wallet/entities/fiat_currency.dart';
import 'package:cake_wallet/entities/transaction_priority.dart';
import 'package:cake_wallet/entities/monero_transaction_priority.dart';
import 'package:cake_wallet/entities/calculate_fiat_amount.dart';
import 'package:cake_wallet/entities/wallet_type.dart';
import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart';
@@ -40,11 +45,11 @@ abstract class SendViewModelBase with Store {
_cryptoNumberFormat = NumberFormat(),
note = '',
sendAll = false {
final _priority = _settingsStore.transactionPriority;
final priority = _settingsStore.priority[_wallet.type];
final priorities = priorityForWalletType(_wallet.type);
if (!TransactionPriority.forWalletType(walletType).contains(_priority)) {
_settingsStore.transactionPriority =
TransactionPriority.forWalletType(walletType).first;
if (!priorityForWalletType(_wallet.type).contains(priority)) {
_settingsStore.priority[_wallet.type] = priorities.first;
}
_setCryptoNumMaximumFractionDigits();
@@ -69,8 +74,39 @@ abstract class SendViewModelBase with Store {
bool sendAll;
@computed
double get estimatedFee =>
_wallet.calculateEstimatedFee(_settingsStore.transactionPriority);
double get estimatedFee {
int amount;
if (cryptoAmount?.isNotEmpty ?? false) {
int _amount = 0;
switch (walletType) {
case WalletType.monero:
_amount = moneroParseAmount(amount: cryptoAmount);
break;
case WalletType.bitcoin:
_amount = stringDoubleToBitcoinAmount(cryptoAmount);
break;
default:
break;
}
if (_amount > 0) {
amount = _amount;
}
}
final fee = _wallet.calculateEstimatedFee(_settingsStore.priority[_wallet.type], amount);
if (_wallet is BitcoinWallet) {
return bitcoinAmountToDouble(amount: fee);
}
if (_wallet is MoneroWallet) {
return moneroAmountToDouble(amount: fee);
}
return 0;
}
@computed
String get estimatedFeeFiatAmount {
@@ -119,7 +155,7 @@ abstract class SendViewModelBase with Store {
FiatCurrency get fiat => _settingsStore.fiatCurrency;
TransactionPriority get transactionPriority =>
_settingsStore.transactionPriority;
_settingsStore.priority[_wallet.type];
CryptoCurrency get currency => _wallet.currency;
@@ -213,7 +249,7 @@ abstract class SendViewModelBase with Store {
@action
void setTransactionPriority(TransactionPriority priority) =>
_settingsStore.transactionPriority = priority;
_settingsStore.priority[_wallet.type] = priority;
Future<OpenaliasRecord> decodeOpenaliasRecord(String name) async {
final record = await OpenaliasRecord.fetchAddressAndName(
@@ -257,16 +293,17 @@ abstract class SendViewModelBase with Store {
switch (_wallet.type) {
case WalletType.bitcoin:
final amount = !sendAll ? _amount : null;
final priority = _settingsStore.priority[_wallet.type];
return BitcoinTransactionCredentials(
address, amount, _settingsStore.transactionPriority);
return BitcoinTransactionCredentials(address, amount, priority as BitcoinTransactionPriority);
case WalletType.monero:
final amount = !sendAll ? _amount : null;
final priority = _settingsStore.priority[_wallet.type];
return MoneroTransactionCreationCredentials(
address: address,
paymentId: '',
priority: _settingsStore.transactionPriority,
priority: priority as MoneroTransactionPriority,
amount: amount);
default:
return null;
@@ -1,4 +1,6 @@
import 'package:cake_wallet/bitcoin/bitcoin_transaction_priority.dart';
import 'package:cake_wallet/entities/balance.dart';
import 'package:cake_wallet/entities/transaction_priority.dart';
import 'package:cake_wallet/themes/theme_base.dart';
import 'package:cake_wallet/themes/theme_list.dart';
import 'package:cake_wallet/src/screens/pin_code/pin_code_widget.dart';
@@ -14,7 +16,7 @@ import 'package:cake_wallet/entities/wallet_type.dart';
import 'package:cake_wallet/entities/balance_display_mode.dart';
import 'package:cake_wallet/entities/fiat_currency.dart';
import 'package:cake_wallet/entities/node.dart';
import 'package:cake_wallet/entities/transaction_priority.dart';
import 'package:cake_wallet/entities/monero_transaction_priority.dart';
import 'package:cake_wallet/entities/action_list_display_mode.dart';
import 'package:cake_wallet/view_model/settings/version_list_item.dart';
import 'package:cake_wallet/view_model/settings/link_list_item.dart';
@@ -28,6 +30,17 @@ part 'settings_view_model.g.dart';
class SettingsViewModel = SettingsViewModelBase with _$SettingsViewModel;
List<TransactionPriority> priorityForWalletType(WalletType type) {
switch (type) {
case WalletType.monero:
return MoneroTransactionPriority.all;
case WalletType.bitcoin:
return BitcoinTransactionPriority.all;
default:
return [];
}
}
abstract class SettingsViewModelBase with Store {
SettingsViewModelBase(this._settingsStore, WalletBase<Balance> wallet)
: itemHeaders = {},
@@ -37,11 +50,11 @@ abstract class SettingsViewModelBase with Store {
PackageInfo.fromPlatform().then(
(PackageInfo packageInfo) => currentVersion = packageInfo.version);
final _priority = _settingsStore.transactionPriority;
final priority = _settingsStore.priority[wallet.type];
final priorities = priorityForWalletType(wallet.type);
if (!TransactionPriority.forWalletType(_walletType).contains(_priority)) {
_settingsStore.transactionPriority =
TransactionPriority.forWalletType(_walletType).first;
if (!priorities.contains(priority)) {
_settingsStore.priority[wallet.type] = priorities.first;
}
sections = [
@@ -60,10 +73,10 @@ abstract class SettingsViewModelBase with Store {
setFiatCurrency(currency)),
PickerListItem(
title: S.current.settings_fee_priority,
items: TransactionPriority.forWalletType(wallet.type),
items: priorityForWalletType(wallet.type),
selectedItem: () => transactionPriority,
onItemSelected: (TransactionPriority priority) =>
_settingsStore.transactionPriority = priority),
_settingsStore.priority[wallet.type] = priority),
SwitcherListItem(
title: S.current.settings_save_recipient_address,
value: () => shouldSaveRecipientAddress,
@@ -182,7 +195,7 @@ abstract class SettingsViewModelBase with Store {
@computed
TransactionPriority get transactionPriority =>
_settingsStore.transactionPriority;
_settingsStore.priority[_walletType];
@computed
BalanceDisplayMode get balanceDisplayMode =>