mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2024-11-17 01:37:54 +00:00
Balance class clean up
This commit is contained in:
parent
742036138b
commit
5bf678d41a
19 changed files with 28 additions and 109 deletions
|
@ -1,17 +1,14 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:stackwallet/utilities/amount/amount.dart';
|
||||
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
||||
|
||||
class Balance {
|
||||
final Coin coin;
|
||||
final Amount total;
|
||||
final Amount spendable;
|
||||
final Amount blockedTotal;
|
||||
final Amount pendingSpendable;
|
||||
|
||||
Balance({
|
||||
required this.coin,
|
||||
required this.total,
|
||||
required this.spendable,
|
||||
required this.blockedTotal,
|
||||
|
@ -25,42 +22,40 @@ class Balance {
|
|||
"pendingSpendable": pendingSpendable.toJsonString(),
|
||||
});
|
||||
|
||||
// need to fall back to parsing from in due to cached balances being previously
|
||||
// need to fall back to parsing from int due to cached balances being previously
|
||||
// stored as int values instead of Amounts
|
||||
factory Balance.fromJson(String json, Coin coin) {
|
||||
factory Balance.fromJson(String json, int deprecatedValue) {
|
||||
final decoded = jsonDecode(json);
|
||||
return Balance(
|
||||
coin: coin,
|
||||
total: decoded["total"] is String
|
||||
? Amount.fromSerializedJsonString(decoded["total"] as String)
|
||||
: Amount(
|
||||
rawValue: BigInt.from(decoded["total"] as int),
|
||||
fractionDigits: coin.decimals,
|
||||
fractionDigits: deprecatedValue,
|
||||
),
|
||||
spendable: decoded["spendable"] is String
|
||||
? Amount.fromSerializedJsonString(decoded["spendable"] as String)
|
||||
: Amount(
|
||||
rawValue: BigInt.from(decoded["spendable"] as int),
|
||||
fractionDigits: coin.decimals,
|
||||
fractionDigits: deprecatedValue,
|
||||
),
|
||||
blockedTotal: decoded["blockedTotal"] is String
|
||||
? Amount.fromSerializedJsonString(decoded["blockedTotal"] as String)
|
||||
: Amount(
|
||||
rawValue: BigInt.from(decoded["blockedTotal"] as int),
|
||||
fractionDigits: coin.decimals,
|
||||
fractionDigits: deprecatedValue,
|
||||
),
|
||||
pendingSpendable: decoded["pendingSpendable"] is String
|
||||
? Amount.fromSerializedJsonString(
|
||||
decoded["pendingSpendable"] as String)
|
||||
: Amount(
|
||||
rawValue: BigInt.from(decoded["pendingSpendable"] as int),
|
||||
fractionDigits: coin.decimals,
|
||||
fractionDigits: deprecatedValue,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Map<String, dynamic> toMap() => {
|
||||
"coin": coin,
|
||||
"total": total,
|
||||
"spendable": spendable,
|
||||
"blockedTotal": blockedTotal,
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:stackwallet/models/balance.dart';
|
||||
import 'package:stackwallet/utilities/amount/amount.dart';
|
||||
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
||||
|
||||
class TokenBalance extends Balance {
|
||||
TokenBalance({
|
||||
required this.contractAddress,
|
||||
required super.total,
|
||||
required super.spendable,
|
||||
required super.blockedTotal,
|
||||
required super.pendingSpendable,
|
||||
super.coin = Coin.ethereum,
|
||||
});
|
||||
|
||||
final String contractAddress;
|
||||
|
||||
@override
|
||||
String toJsonIgnoreCoin() => jsonEncode({
|
||||
"contractAddress": contractAddress,
|
||||
"total": total.toJsonString(),
|
||||
"spendable": spendable.toJsonString(),
|
||||
"blockedTotal": blockedTotal.toJsonString(),
|
||||
"pendingSpendable": pendingSpendable.toJsonString(),
|
||||
});
|
||||
|
||||
factory TokenBalance.fromJson(
|
||||
String json,
|
||||
int fractionDigits,
|
||||
) {
|
||||
final decoded = jsonDecode(json);
|
||||
return TokenBalance(
|
||||
contractAddress: decoded["contractAddress"] as String,
|
||||
total: decoded["total"] is String
|
||||
? Amount.fromSerializedJsonString(decoded["total"] as String)
|
||||
: Amount(
|
||||
rawValue: BigInt.from(decoded["total"] as int),
|
||||
fractionDigits: fractionDigits,
|
||||
),
|
||||
spendable: decoded["spendable"] is String
|
||||
? Amount.fromSerializedJsonString(decoded["spendable"] as String)
|
||||
: Amount(
|
||||
rawValue: BigInt.from(decoded["spendable"] as int),
|
||||
fractionDigits: fractionDigits,
|
||||
),
|
||||
blockedTotal: decoded["blockedTotal"] is String
|
||||
? Amount.fromSerializedJsonString(decoded["blockedTotal"] as String)
|
||||
: Amount(
|
||||
rawValue: BigInt.from(decoded["blockedTotal"] as int),
|
||||
fractionDigits: fractionDigits,
|
||||
),
|
||||
pendingSpendable: decoded["pendingSpendable"] is String
|
||||
? Amount.fromSerializedJsonString(
|
||||
decoded["pendingSpendable"] as String)
|
||||
: Amount(
|
||||
rawValue: BigInt.from(decoded["pendingSpendable"] as int),
|
||||
fractionDigits: fractionDigits,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -8,7 +8,7 @@ import 'package:stackwallet/utilities/theme/stack_colors.dart';
|
|||
import 'package:stackwallet/widgets/background.dart';
|
||||
import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart';
|
||||
import 'package:stackwallet/widgets/rounded_white_container.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_balance_future.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_balance.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_coin_icon.dart';
|
||||
|
||||
class ChooseFromStackView extends ConsumerStatefulWidget {
|
||||
|
|
|
@ -11,7 +11,7 @@ import 'package:stackwallet/widgets/animated_widgets/rotate_icon.dart';
|
|||
import 'package:stackwallet/widgets/expandable.dart';
|
||||
import 'package:stackwallet/widgets/rounded_white_container.dart';
|
||||
import 'package:stackwallet/widgets/wallet_card.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_balance_future.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_balance.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_coin_icon.dart';
|
||||
import 'package:tuple/tuple.dart';
|
||||
|
||||
|
|
|
@ -1978,7 +1978,6 @@ class EpicCashWallet extends CoinServiceAPI
|
|||
(jsonBalances['amount_awaiting_finalization'] as double).toString();
|
||||
|
||||
_balance = Balance(
|
||||
coin: coin,
|
||||
total: Amount.fromDecimal(
|
||||
Decimal.parse(total) + Decimal.parse(awaiting),
|
||||
fractionDigits: coin.decimals,
|
||||
|
|
|
@ -10,7 +10,6 @@ import 'package:stackwallet/models/balance.dart';
|
|||
import 'package:stackwallet/models/isar/models/isar_models.dart';
|
||||
import 'package:stackwallet/models/node_model.dart';
|
||||
import 'package:stackwallet/models/paymint/fee_object_model.dart';
|
||||
import 'package:stackwallet/models/token_balance.dart';
|
||||
import 'package:stackwallet/services/coins/coin_service.dart';
|
||||
import 'package:stackwallet/services/ethereum/ethereum_api.dart';
|
||||
import 'package:stackwallet/services/event_bus/events/global/node_connection_status_changed_event.dart';
|
||||
|
@ -78,14 +77,13 @@ class EthereumWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
);
|
||||
}
|
||||
|
||||
TokenBalance getCachedTokenBalance(EthContract contract) {
|
||||
Balance getCachedTokenBalance(EthContract contract) {
|
||||
final jsonString = DB.instance.get<dynamic>(
|
||||
boxName: _walletId,
|
||||
key: TokenCacheKeys.tokenBalance(contract.address),
|
||||
) as String?;
|
||||
if (jsonString == null) {
|
||||
return TokenBalance(
|
||||
contractAddress: contract.address,
|
||||
return Balance(
|
||||
total: Amount(
|
||||
rawValue: BigInt.zero,
|
||||
fractionDigits: contract.decimals,
|
||||
|
@ -104,7 +102,7 @@ class EthereumWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
),
|
||||
);
|
||||
}
|
||||
return TokenBalance.fromJson(
|
||||
return Balance.fromJson(
|
||||
jsonString,
|
||||
contract.decimals,
|
||||
);
|
||||
|
@ -222,7 +220,6 @@ class EthereumWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
web3.Web3Client client = getEthClient();
|
||||
web3.EtherAmount ethBalance = await client.getBalance(_credentials.address);
|
||||
_balance = Balance(
|
||||
coin: coin,
|
||||
total: Amount(
|
||||
rawValue: ethBalance.getInWei,
|
||||
fractionDigits: coin.decimals,
|
||||
|
|
|
@ -2515,7 +2515,6 @@ class FiroWallet extends CoinServiceAPI
|
|||
}
|
||||
|
||||
_balancePrivate = Balance(
|
||||
coin: coin,
|
||||
total: Amount(
|
||||
rawValue:
|
||||
BigInt.from(intLelantusBalance + unconfirmedLelantusBalance),
|
||||
|
@ -3803,7 +3802,6 @@ class FiroWallet extends CoinServiceAPI
|
|||
|
||||
// finally update public balance
|
||||
_balance = Balance(
|
||||
coin: coin,
|
||||
total: satoshiBalanceTotal,
|
||||
spendable: satoshiBalanceSpendable,
|
||||
blockedTotal: satoshiBalanceBlocked,
|
||||
|
|
|
@ -747,7 +747,6 @@ class MoneroWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
final total = await _totalBalance;
|
||||
final available = await _availableBalance;
|
||||
_balance = Balance(
|
||||
coin: coin,
|
||||
total: total,
|
||||
spendable: available,
|
||||
blockedTotal: Amount(
|
||||
|
|
|
@ -774,7 +774,6 @@ class WowneroWallet extends CoinServiceAPI with WalletCache, WalletDB {
|
|||
final total = await _totalBalance;
|
||||
final available = await _availableBalance;
|
||||
_balance = Balance(
|
||||
coin: coin,
|
||||
total: total,
|
||||
spendable: available,
|
||||
blockedTotal: Amount(
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import 'package:stackwallet/models/balance.dart';
|
||||
import 'package:stackwallet/models/isar/models/ethereum/eth_contract.dart';
|
||||
import 'package:stackwallet/models/token_balance.dart';
|
||||
import 'package:stackwallet/services/ethereum/ethereum_api.dart';
|
||||
import 'package:stackwallet/services/mixins/eth_token_cache.dart';
|
||||
import 'package:stackwallet/utilities/amount/amount.dart';
|
||||
|
@ -21,8 +21,7 @@ class CachedEthTokenBalance with EthTokenCache {
|
|||
|
||||
if (response.value != null) {
|
||||
await updateCachedBalance(
|
||||
TokenBalance(
|
||||
contractAddress: token.address,
|
||||
Balance(
|
||||
total: response.value!,
|
||||
spendable: response.value!,
|
||||
blockedTotal: Amount(
|
||||
|
|
|
@ -8,10 +8,10 @@ import 'package:isar/isar.dart';
|
|||
import 'package:stackwallet/db/isar/main_db.dart';
|
||||
import 'package:stackwallet/dto/ethereum/eth_token_tx_dto.dart';
|
||||
import 'package:stackwallet/dto/ethereum/eth_token_tx_extra_dto.dart';
|
||||
import 'package:stackwallet/models/balance.dart';
|
||||
import 'package:stackwallet/models/isar/models/isar_models.dart';
|
||||
import 'package:stackwallet/models/node_model.dart';
|
||||
import 'package:stackwallet/models/paymint/fee_object_model.dart';
|
||||
import 'package:stackwallet/models/token_balance.dart';
|
||||
import 'package:stackwallet/services/coins/ethereum/ethereum_wallet.dart';
|
||||
import 'package:stackwallet/services/ethereum/ethereum_api.dart';
|
||||
import 'package:stackwallet/services/event_bus/events/global/updated_in_background_event.dart';
|
||||
|
@ -60,8 +60,8 @@ class EthTokenWallet extends ChangeNotifier with EthTokenCache {
|
|||
EthContract get tokenContract => _tokenContract;
|
||||
EthContract _tokenContract;
|
||||
|
||||
TokenBalance get balance => _balance ??= getCachedBalance();
|
||||
TokenBalance? _balance;
|
||||
Balance get balance => _balance ??= getCachedBalance();
|
||||
Balance? _balance;
|
||||
|
||||
Coin get coin => Coin.ethereum;
|
||||
|
||||
|
@ -413,8 +413,7 @@ class EthTokenWallet extends ChangeNotifier with EthTokenCache {
|
|||
|
||||
String _balance = balanceRequest.first.toString();
|
||||
|
||||
final newBalance = TokenBalance(
|
||||
contractAddress: tokenContract.address,
|
||||
final newBalance = Balance(
|
||||
total: Amount.fromDecimal(
|
||||
Decimal.parse(_balance),
|
||||
fractionDigits: tokenContract.decimals,
|
||||
|
|
|
@ -76,7 +76,6 @@ mixin CoinControlInterface {
|
|||
}
|
||||
|
||||
final balance = Balance(
|
||||
coin: _coin,
|
||||
total: satoshiBalanceTotal,
|
||||
spendable: satoshiBalanceSpendable,
|
||||
blockedTotal: satoshiBalanceBlocked,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import 'package:stackwallet/db/hive/db.dart';
|
||||
import 'package:stackwallet/models/balance.dart';
|
||||
import 'package:stackwallet/models/isar/models/ethereum/eth_contract.dart';
|
||||
import 'package:stackwallet/models/token_balance.dart';
|
||||
import 'package:stackwallet/utilities/amount/amount.dart';
|
||||
|
||||
abstract class TokenCacheKeys {
|
||||
|
@ -19,14 +19,13 @@ mixin EthTokenCache {
|
|||
}
|
||||
|
||||
// token balance cache
|
||||
TokenBalance getCachedBalance() {
|
||||
Balance getCachedBalance() {
|
||||
final jsonString = DB.instance.get<dynamic>(
|
||||
boxName: _walletId,
|
||||
key: TokenCacheKeys.tokenBalance(_token.address),
|
||||
) as String?;
|
||||
if (jsonString == null) {
|
||||
return TokenBalance(
|
||||
contractAddress: _token.address,
|
||||
return Balance(
|
||||
total: Amount(
|
||||
rawValue: BigInt.zero,
|
||||
fractionDigits: _token.decimals,
|
||||
|
@ -45,13 +44,13 @@ mixin EthTokenCache {
|
|||
),
|
||||
);
|
||||
}
|
||||
return TokenBalance.fromJson(
|
||||
return Balance.fromJson(
|
||||
jsonString,
|
||||
_token.decimals,
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> updateCachedBalance(TokenBalance balance) async {
|
||||
Future<void> updateCachedBalance(Balance balance) async {
|
||||
await DB.instance.put<dynamic>(
|
||||
boxName: _walletId,
|
||||
key: TokenCacheKeys.tokenBalance(_token.address),
|
||||
|
|
|
@ -70,7 +70,6 @@ mixin WalletCache {
|
|||
) as String?;
|
||||
if (jsonString == null) {
|
||||
return Balance(
|
||||
coin: _coin,
|
||||
total: Amount(rawValue: BigInt.zero, fractionDigits: _coin.decimals),
|
||||
spendable:
|
||||
Amount(rawValue: BigInt.zero, fractionDigits: _coin.decimals),
|
||||
|
@ -80,7 +79,7 @@ mixin WalletCache {
|
|||
Amount(rawValue: BigInt.zero, fractionDigits: _coin.decimals),
|
||||
);
|
||||
}
|
||||
return Balance.fromJson(jsonString, _coin);
|
||||
return Balance.fromJson(jsonString, _coin.decimals);
|
||||
}
|
||||
|
||||
Future<void> updateCachedBalance(Balance balance) async {
|
||||
|
@ -99,7 +98,6 @@ mixin WalletCache {
|
|||
) as String?;
|
||||
if (jsonString == null) {
|
||||
return Balance(
|
||||
coin: _coin,
|
||||
total: Amount(rawValue: BigInt.zero, fractionDigits: _coin.decimals),
|
||||
spendable:
|
||||
Amount(rawValue: BigInt.zero, fractionDigits: _coin.decimals),
|
||||
|
@ -109,7 +107,7 @@ mixin WalletCache {
|
|||
Amount(rawValue: BigInt.zero, fractionDigits: _coin.decimals),
|
||||
);
|
||||
}
|
||||
return Balance.fromJson(jsonString, _coin);
|
||||
return Balance.fromJson(jsonString, _coin.decimals);
|
||||
}
|
||||
|
||||
Future<void> updateCachedBalanceSecondary(Balance balance) async {
|
||||
|
|
|
@ -3,7 +3,7 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|||
import 'package:stackwallet/providers/providers.dart';
|
||||
import 'package:stackwallet/utilities/text_styles.dart';
|
||||
import 'package:stackwallet/utilities/theme/stack_colors.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_balance_future.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_balance.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_coin_icon.dart';
|
||||
|
||||
class EthWalletRadio extends ConsumerStatefulWidget {
|
||||
|
|
|
@ -8,7 +8,7 @@ import 'package:stackwallet/utilities/text_styles.dart';
|
|||
import 'package:stackwallet/utilities/theme/stack_colors.dart';
|
||||
import 'package:stackwallet/utilities/util.dart';
|
||||
import 'package:stackwallet/widgets/custom_buttons/blue_text_button.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_balance_future.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_balance.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_coin_icon.dart';
|
||||
|
||||
class WalletInfoRow extends ConsumerWidget {
|
||||
|
|
|
@ -15,7 +15,7 @@ import 'package:stackwallet/utilities/amount/amount.dart';
|
|||
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
||||
import 'package:stackwallet/utilities/theme/light_colors.dart';
|
||||
import 'package:stackwallet/utilities/theme/stack_colors.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_balance_future.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_balance.dart';
|
||||
|
||||
import 'wallet_info_row_balance_future_test.mocks.dart';
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ import 'package:stackwallet/utilities/amount/amount.dart';
|
|||
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
||||
import 'package:stackwallet/utilities/theme/light_colors.dart';
|
||||
import 'package:stackwallet/utilities/theme/stack_colors.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_balance_future.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/sub_widgets/wallet_info_row_balance.dart';
|
||||
import 'package:stackwallet/widgets/wallet_info_row/wallet_info_row.dart';
|
||||
|
||||
import 'wallet_info_row_test.mocks.dart';
|
||||
|
|
Loading…
Reference in a new issue