dev
dart 78 lines 2.77 KB
Raw
1 import "package:bloc/bloc.dart";
2 import "package:cake_wallet/entities/balance_display_mode.dart";
3 import "package:cake_wallet/entities/bitcoin_amount_display_mode.dart";
4 import "package:cake_wallet/src/screens/wallet_connect/utils/string_parsing.dart";
5 import "package:cake_wallet/store/settings_store.dart";
6 import "package:cw_core/crypto_currency.dart";
7 import "package:cw_core/currency.dart";
8 import "package:mobx/mobx.dart";
9
10 class MoneySettingsCubit extends Cubit<MoneySettingsState> {
11 MoneySettingsCubit(SettingsStore _settingsStore)
12 : super(
13 MoneySettingsState(
14 bitcoinAmountDisplayMode: _settingsStore.displayAmountsInSatoshi,
15 displayMode: _settingsStore.balanceDisplayMode,
16 ),
17 ) {
18 _bitcoinAmountDisplayModeDisposer = reaction(
19 (_) => _settingsStore.displayAmountsInSatoshi,
20 (displayMode) => emit(state.copyWith(bitcoinAmountDisplayMode: displayMode)),
21 );
22 _displayModeDisposer = reaction(
23 (_) => _settingsStore.balanceDisplayMode,
24 (displayMode) => emit(state.copyWith(displayMode: displayMode)),
25 );
26 }
27
28 late final ReactionDisposer _bitcoinAmountDisplayModeDisposer;
29
30 late final ReactionDisposer _displayModeDisposer;
31
32 @override
33 Future<void> close() {
34 if (!_bitcoinAmountDisplayModeDisposer.reaction.isDisposed) {
35 _bitcoinAmountDisplayModeDisposer.reaction.dispose();
36 }
37 if (!_displayModeDisposer.reaction.isDisposed) {
38 _displayModeDisposer.reaction.dispose();
39 }
40 return super.close();
41 }
42 }
43
44 class MoneySettingsState {
45 const MoneySettingsState({required this.bitcoinAmountDisplayMode, required this.displayMode});
46
47 final BitcoinAmountDisplayMode bitcoinAmountDisplayMode;
48 final BalanceDisplayMode displayMode;
49
50 bool useBaseUnit(Currency currency) =>
51 ([CryptoCurrency.btc, CryptoCurrency.btcln].contains(currency) &&
52 bitcoinAmountDisplayMode == BitcoinAmountDisplayMode.satoshi) ||
53 (CryptoCurrency.btcln == currency &&
54 bitcoinAmountDisplayMode == BitcoinAmountDisplayMode.satoshiForLightning);
55
56 bool get isHidden => displayMode == BalanceDisplayMode.hiddenBalance;
57
58 String getSymbol(Currency currency, {bool? overrideSettings}) {
59 if (overrideSettings == null) {
60 return useBaseUnit(currency) ? "sats" : currency.symbol.safeSubString(0, 8);
61 }
62
63 if (overrideSettings == true && [CryptoCurrency.btc, CryptoCurrency.btcln].contains(currency)) {
64 return "sats";
65 }
66 return currency.symbol.safeSubString(0, 8);
67 }
68
69
70 MoneySettingsState copyWith({
71 BitcoinAmountDisplayMode? bitcoinAmountDisplayMode,
72 BalanceDisplayMode? displayMode,
73 }) =>
74 MoneySettingsState(
75 bitcoinAmountDisplayMode: bitcoinAmountDisplayMode ?? this.bitcoinAmountDisplayMode,
76 displayMode: displayMode ?? this.displayMode,
77 );
78 }