form state provider fix

This commit is contained in:
julian 2023-02-05 15:11:58 -06:00
parent 1455808d7a
commit 5aab115b96
4 changed files with 142 additions and 126 deletions

View file

@ -26,7 +26,6 @@ import 'package:stackwallet/services/exchange/majestic_bank/majestic_bank_exchan
import 'package:stackwallet/utilities/assets.dart'; import 'package:stackwallet/utilities/assets.dart';
import 'package:stackwallet/utilities/constants.dart'; import 'package:stackwallet/utilities/constants.dart';
import 'package:stackwallet/utilities/enums/coin_enum.dart'; import 'package:stackwallet/utilities/enums/coin_enum.dart';
import 'package:stackwallet/utilities/logger.dart';
import 'package:stackwallet/utilities/text_styles.dart'; import 'package:stackwallet/utilities/text_styles.dart';
import 'package:stackwallet/utilities/theme/stack_colors.dart'; import 'package:stackwallet/utilities/theme/stack_colors.dart';
import 'package:stackwallet/utilities/util.dart'; import 'package:stackwallet/utilities/util.dart';
@ -75,7 +74,8 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
final newFromAmount = Decimal.tryParse(value); final newFromAmount = Decimal.tryParse(value);
await ref await ref
.read(exchangeFormStateProvider) .read(exchangeFormStateProvider(
ref.read(prefsChangeNotifierProvider).exchangeRateType))
.setSendAmountAndCalculateReceiveAmount( .setSendAmountAndCalculateReceiveAmount(
newFromAmount ?? Decimal.zero, true); newFromAmount ?? Decimal.zero, true);
@ -97,7 +97,10 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
if (!(isEstimated && if (!(isEstimated &&
ref.read(currentExchangeNameStateProvider.state).state == ref.read(currentExchangeNameStateProvider.state).state ==
ChangeNowExchange.exchangeName)) { ChangeNowExchange.exchangeName)) {
ref.read(exchangeFormStateProvider).receiveAmount = newToAmount; ref
.read(exchangeFormStateProvider(
ref.read(prefsChangeNotifierProvider).exchangeRateType))
.receiveAmount = newToAmount;
} }
if (newToAmount == null) { if (newToAmount == null) {
_sendController.text = ""; _sendController.text = "";
@ -105,7 +108,9 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
} }
void selectSendCurrency() async { void selectSendCurrency() async {
final fromTicker = ref.read(exchangeFormStateProvider).fromTicker ?? ""; final type = (ref.read(prefsChangeNotifierProvider).exchangeRateType);
final fromTicker =
ref.read(exchangeFormStateProvider(type)).fromTicker ?? "";
if (walletInitiated && if (walletInitiated &&
fromTicker.toLowerCase() == coin!.ticker.toLowerCase()) { fromTicker.toLowerCase() == coin!.ticker.toLowerCase()) {
@ -114,12 +119,12 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
} }
await _showCurrencySelectionSheet( await _showCurrencySelectionSheet(
willChange: ref.read(exchangeFormStateProvider).sendCurrency, willChange: ref.read(exchangeFormStateProvider(type)).sendCurrency,
paired: ref.read(exchangeFormStateProvider).receiveCurrency, paired: ref.read(exchangeFormStateProvider(type)).receiveCurrency,
isFixedRate: ref.read(prefsChangeNotifierProvider).exchangeRateType == isFixedRate: ref.read(prefsChangeNotifierProvider).exchangeRateType ==
ExchangeRateType.fixed, ExchangeRateType.fixed,
onSelected: (to) => onSelected: (to) =>
ref.read(exchangeFormStateProvider).updateTo(to, true), ref.read(exchangeFormStateProvider(type)).updateTo(to, true),
); );
unawaited( unawaited(
@ -150,7 +155,8 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
} }
void selectReceiveCurrency() async { void selectReceiveCurrency() async {
final toTicker = ref.read(exchangeFormStateProvider).toTicker ?? ""; final type = (ref.read(prefsChangeNotifierProvider).exchangeRateType);
final toTicker = ref.read(exchangeFormStateProvider(type)).toTicker ?? "";
if (walletInitiated && if (walletInitiated &&
toTicker.toLowerCase() == coin!.ticker.toLowerCase()) { toTicker.toLowerCase() == coin!.ticker.toLowerCase()) {
@ -159,12 +165,12 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
} }
await _showCurrencySelectionSheet( await _showCurrencySelectionSheet(
willChange: ref.read(exchangeFormStateProvider).receiveCurrency, willChange: ref.read(exchangeFormStateProvider(type)).receiveCurrency,
paired: ref.read(exchangeFormStateProvider).sendCurrency, paired: ref.read(exchangeFormStateProvider(type)).sendCurrency,
isFixedRate: ref.read(prefsChangeNotifierProvider).exchangeRateType == isFixedRate: ref.read(prefsChangeNotifierProvider).exchangeRateType ==
ExchangeRateType.fixed, ExchangeRateType.fixed,
onSelected: (to) => onSelected: (to) =>
ref.read(exchangeFormStateProvider).updateTo(to, true), ref.read(exchangeFormStateProvider(type)).updateTo(to, true),
); );
unawaited( unawaited(
@ -219,35 +225,11 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
), ),
); );
if (ref.read(prefsChangeNotifierProvider).exchangeRateType == await ref
ExchangeRateType.fixed && .read(exchangeFormStateProvider(
ref.read(exchangeFormStateProvider).exchange?.name == ref.read(prefsChangeNotifierProvider).exchangeRateType))
ChangeNowExchange.exchangeName) { .swap(shouldNotifyListeners: true);
final from = ref.read(exchangeFormStateProvider).fromTicker;
final to = ref.read(exchangeFormStateProvider).toTicker;
if (to != null && from != null) {
final markets = ref
.read(availableChangeNowCurrenciesProvider)
.markets
.where((e) => e.from == to && e.to == from);
if (markets.isNotEmpty) {
await ref
.read(exchangeFormStateProvider)
.swap(shouldNotifyListeners: true);
} else {
Logging.instance.log(
"swap to fixed rate market failed",
level: LogLevel.Warning,
);
}
}
} else {
await ref
.read(exchangeFormStateProvider)
.swap(shouldNotifyListeners: true);
}
if (mounted) { if (mounted) {
Navigator.of(context, rootNavigator: isDesktop).pop(); Navigator.of(context, rootNavigator: isDesktop).pop();
} }
@ -362,10 +344,13 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
), ),
); );
final fromTicker = ref.read(exchangeFormStateProvider).fromTicker ?? "-"; final type = (ref.read(prefsChangeNotifierProvider).exchangeRateType);
final toTicker = ref.read(exchangeFormStateProvider).toTicker ?? "-";
ref.read(exchangeFormStateProvider).reversed = false; final fromTicker =
ref.read(exchangeFormStateProvider(type)).fromTicker ?? "-";
final toTicker = ref.read(exchangeFormStateProvider(type)).toTicker ?? "-";
ref.read(exchangeFormStateProvider(type)).reversed = false;
// switch (rateType) { // switch (rateType) {
// case ExchangeRateType.estimated: // case ExchangeRateType.estimated:
if (!(toTicker == "-" || fromTicker == "-")) { if (!(toTicker == "-" || fromTicker == "-")) {
@ -398,18 +383,21 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
availableCurrencies.firstWhere((e) => e.ticker == toTicker); availableCurrencies.firstWhere((e) => e.ticker == toTicker);
final newFromAmount = Decimal.tryParse(_sendController.text); final newFromAmount = Decimal.tryParse(_sendController.text);
ref.read(exchangeFormStateProvider).receiveAmount = newFromAmount; ref.read(exchangeFormStateProvider(type)).receiveAmount =
newFromAmount;
if (newFromAmount == null) { if (newFromAmount == null) {
_receiveController.text = ""; _receiveController.text = "";
} }
await ref.read(exchangeFormStateProvider).updateTo(to, false); await ref.read(exchangeFormStateProvider(type)).updateTo(to, false);
await ref.read(exchangeFormStateProvider).updateFrom(from, true); await ref
.read(exchangeFormStateProvider(type))
.updateFrom(from, true);
_receiveController.text = _receiveController.text =
ref.read(exchangeFormStateProvider).toAmountString.isEmpty ref.read(exchangeFormStateProvider(type)).toAmountString.isEmpty
? "-" ? "-"
: ref.read(exchangeFormStateProvider).toAmountString; : ref.read(exchangeFormStateProvider(type)).toAmountString;
if (mounted) { if (mounted) {
Navigator.of(context, rootNavigator: isDesktop).pop(); Navigator.of(context, rootNavigator: isDesktop).pop();
} }
@ -425,7 +413,7 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
showFloatingFlushBar( showFloatingFlushBar(
type: FlushBarType.warning, type: FlushBarType.warning,
message: message:
"${ref.read(exchangeFormStateProvider).exchangeRateType.name} rate trade pair \"$fromTicker-$toTicker\" unavailable. Reverting to last estimated rate pair.", "${ref.read(exchangeFormStateProvider(type)).exchangeRateType.name} rate trade pair \"$fromTicker-$toTicker\" unavailable. Reverting to last estimated rate pair.",
context: context, context: context,
), ),
); );
@ -529,10 +517,13 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
void onExchangePressed() async { void onExchangePressed() async {
final rateType = ref.read(prefsChangeNotifierProvider).exchangeRateType; final rateType = ref.read(prefsChangeNotifierProvider).exchangeRateType;
final fromTicker = ref.read(exchangeFormStateProvider).fromTicker ?? ""; final fromTicker =
final toTicker = ref.read(exchangeFormStateProvider).toTicker ?? ""; ref.read(exchangeFormStateProvider(rateType)).fromTicker ?? "";
final sendAmount = ref.read(exchangeFormStateProvider).sendAmount!; final toTicker =
final estimate = ref.read(exchangeFormStateProvider).estimate!; ref.read(exchangeFormStateProvider(rateType)).toTicker ?? "";
final sendAmount =
ref.read(exchangeFormStateProvider(rateType)).sendAmount!;
final estimate = ref.read(exchangeFormStateProvider(rateType)).estimate!;
String rate; String rate;
@ -708,7 +699,7 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
return; return;
} }
rate = rate =
"1 ${fromTicker.toUpperCase()} ~${ref.read(exchangeFormStateProvider).rate!.toStringAsFixed(8)} ${toTicker.toUpperCase()}"; "1 ${fromTicker.toUpperCase()} ~${ref.read(exchangeFormStateProvider(rateType)).rate!.toStringAsFixed(8)} ${toTicker.toUpperCase()}";
break; break;
} }
@ -718,7 +709,7 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
rateInfo: rate, rateInfo: rate,
sendAmount: estimate.reversed ? estimate.estimatedAmount : sendAmount, sendAmount: estimate.reversed ? estimate.estimatedAmount : sendAmount,
receiveAmount: estimate.reversed receiveAmount: estimate.reversed
? ref.read(exchangeFormStateProvider).receiveAmount! ? ref.read(exchangeFormStateProvider(rateType)).receiveAmount!
: estimate.estimatedAmount, : estimate.estimatedAmount,
rateType: rateType, rateType: rateType,
rateId: estimate.rateId, rateId: estimate.rateId,
@ -790,9 +781,15 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
String? ticker; String? ticker;
if (isSend) { if (isSend) {
ticker = ref.read(exchangeFormStateProvider).fromTicker; ticker = ref
.read(exchangeFormStateProvider(
ref.read(prefsChangeNotifierProvider).exchangeRateType))
.fromTicker;
} else { } else {
ticker = ref.read(exchangeFormStateProvider).toTicker; ticker = ref
.read(exchangeFormStateProvider(
ref.read(prefsChangeNotifierProvider).exchangeRateType))
.toTicker;
} }
if (ticker == null) { if (ticker == null) {
@ -813,18 +810,20 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
if (walletInitiated) { if (walletInitiated) {
WidgetsBinding.instance.addPostFrameCallback((timeStamp) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
ref.read(exchangeFormStateProvider).reset(shouldNotifyListeners: true); ref
.read(exchangeFormStateProvider(
ref.read(prefsChangeNotifierProvider).exchangeRateType))
.reset(shouldNotifyListeners: true);
// ref.read(fixedRateExchangeFormProvider); // ref.read(fixedRateExchangeFormProvider);
}); });
} else { } else {
final isEstimated = final rateType = (ref.read(prefsChangeNotifierProvider).exchangeRateType);
ref.read(prefsChangeNotifierProvider).exchangeRateType == final isEstimated = rateType == ExchangeRateType.estimated;
ExchangeRateType.estimated;
_sendController.text = _sendController.text =
ref.read(exchangeFormStateProvider).fromAmountString; ref.read(exchangeFormStateProvider(rateType)).fromAmountString;
_receiveController.text = isEstimated _receiveController.text = isEstimated
? "-" //ref.read(estimatedRateExchangeFormProvider).toAmountString ? "-" //ref.read(estimatedRateExchangeFormProvider).toAmountString
: ref.read(exchangeFormStateProvider).toAmountString; : ref.read(exchangeFormStateProvider(rateType)).toAmountString;
} }
// _sendFocusNode.addListener(() async { // _sendFocusNode.addListener(() async {
@ -879,9 +878,13 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
debugPrint("BUILD: $runtimeType"); debugPrint("BUILD: $runtimeType");
final rateType = ref.watch(
prefsChangeNotifierProvider.select((value) => value.exchangeRateType));
// provider for simpleswap; not called rn // provider for simpleswap; not called rn
ref.listen<String>(currentExchangeNameStateProvider, (previous, next) { ref.listen<String>(currentExchangeNameStateProvider, (previous, next) {
ref.read(exchangeFormStateProvider).exchange = ref.read(exchangeProvider); ref.read(exchangeFormStateProvider(rateType)).exchange =
ref.read(exchangeProvider);
}); });
final isEstimated = ref.watch(prefsChangeNotifierProvider final isEstimated = ref.watch(prefsChangeNotifierProvider
@ -889,8 +892,8 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
ExchangeRateType.estimated; ExchangeRateType.estimated;
ref.listen( ref.listen(
exchangeFormStateProvider.select((value) => value.toAmountString), exchangeFormStateProvider(rateType)
(previous, String next) { .select((value) => value.toAmountString), (previous, String next) {
if (!_receiveFocusNode.hasFocus) { if (!_receiveFocusNode.hasFocus) {
// ref.watch(exchangeProvider).name == // ref.watch(exchangeProvider).name ==
// SimpleSwapExchange.exchangeName && // SimpleSwapExchange.exchangeName &&
@ -899,12 +902,13 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
// debugPrint("RECEIVE AMOUNT LISTENER ACTIVATED"); // debugPrint("RECEIVE AMOUNT LISTENER ACTIVATED");
if (_swapLock) { if (_swapLock) {
_sendController.text = _sendController.text =
ref.read(exchangeFormStateProvider).fromAmountString; ref.read(exchangeFormStateProvider(rateType)).fromAmountString;
} }
} }
}); });
ref.listen( ref.listen(
exchangeFormStateProvider.select((value) => value.fromAmountString), exchangeFormStateProvider(rateType)
.select((value) => value.fromAmountString),
(previous, String next) { (previous, String next) {
if (!_sendFocusNode.hasFocus) { if (!_sendFocusNode.hasFocus) {
_sendController.text = next; _sendController.text = next;
@ -912,10 +916,13 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
// debugPrint("SEND AMOUNT LISTENER ACTIVATED"); // debugPrint("SEND AMOUNT LISTENER ACTIVATED");
if (_swapLock) { if (_swapLock) {
_receiveController.text = isEstimated _receiveController.text = isEstimated
? ref.read(exchangeFormStateProvider).toAmountString.isEmpty ? ref
.read(exchangeFormStateProvider(rateType))
.toAmountString
.isEmpty
? "-" ? "-"
: ref.read(exchangeFormStateProvider).toAmountString : ref.read(exchangeFormStateProvider(rateType)).toAmountString
: ref.read(exchangeFormStateProvider).toAmountString; : ref.read(exchangeFormStateProvider(rateType)).toAmountString;
} }
} }
}); });
@ -952,10 +959,10 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
onChanged: sendFieldOnChanged, onChanged: sendFieldOnChanged,
onButtonTap: selectSendCurrency, onButtonTap: selectSendCurrency,
isWalletCoin: isWalletCoin(coin, true), isWalletCoin: isWalletCoin(coin, true),
image: ref.watch(exchangeFormStateProvider image: ref.watch(exchangeFormStateProvider(rateType)
.select((value) => value.receiveCurrency?.image)), .select((value) => value.sendCurrency?.image)),
ticker: ref.watch( ticker: ref.watch(exchangeFormStateProvider(rateType)
exchangeFormStateProvider.select((value) => value.fromTicker)), .select((value) => value.fromTicker)),
), ),
SizedBox( SizedBox(
height: isDesktop ? 10 : 4, height: isDesktop ? 10 : 4,
@ -964,14 +971,14 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
height: isDesktop ? 10 : 4, height: isDesktop ? 10 : 4,
), ),
if (ref if (ref
.watch( .watch(exchangeFormStateProvider(rateType)
exchangeFormStateProvider.select((value) => value.warning)) .select((value) => value.warning))
.isNotEmpty && .isNotEmpty &&
!ref.watch( !ref.watch(exchangeFormStateProvider(rateType)
exchangeFormStateProvider.select((value) => value.reversed))) .select((value) => value.reversed)))
Text( Text(
ref.watch( ref.watch(exchangeFormStateProvider(rateType)
exchangeFormStateProvider.select((value) => value.warning)), .select((value) => value.warning)),
style: STextStyles.errorSmall(context), style: STextStyles.errorSmall(context),
), ),
Row( Row(
@ -1042,27 +1049,25 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
onChanged: receiveFieldOnChanged, onChanged: receiveFieldOnChanged,
onButtonTap: selectReceiveCurrency, onButtonTap: selectReceiveCurrency,
isWalletCoin: isWalletCoin(coin, true), isWalletCoin: isWalletCoin(coin, true),
image: ref.watch(exchangeFormStateProvider image: ref.watch(exchangeFormStateProvider(rateType)
.select((value) => value.receiveCurrency?.image)) ?? .select((value) => value.receiveCurrency?.image)) ??
"", "",
ticker: ref.watch( ticker: ref.watch(exchangeFormStateProvider(rateType)
exchangeFormStateProvider.select((value) => value.toTicker)), .select((value) => value.toTicker)),
readOnly: ref.watch(prefsChangeNotifierProvider readOnly: (rateType) == ExchangeRateType.estimated,
.select((value) => value.exchangeRateType)) ==
ExchangeRateType.estimated,
// || // ||
// ref.watch(exchangeProvider).name == // ref.watch(exchangeProvider).name ==
// SimpleSwapExchange.exchangeName, // SimpleSwapExchange.exchangeName,
), ),
if (ref if (ref
.watch( .watch(exchangeFormStateProvider(rateType)
exchangeFormStateProvider.select((value) => value.warning)) .select((value) => value.warning))
.isNotEmpty && .isNotEmpty &&
ref.watch( ref.watch(exchangeFormStateProvider(rateType)
exchangeFormStateProvider.select((value) => value.reversed))) .select((value) => value.reversed)))
Text( Text(
ref.watch( ref.watch(exchangeFormStateProvider(rateType)
exchangeFormStateProvider.select((value) => value.warning)), .select((value) => value.warning)),
style: STextStyles.errorSmall(context), style: STextStyles.errorSmall(context),
), ),
SizedBox( SizedBox(
@ -1075,32 +1080,36 @@ class _ExchangeFormState extends ConsumerState<ExchangeForm> {
), ),
), ),
// these reads should be watch // these reads should be watch
if (ref.watch(exchangeFormStateProvider).sendAmount != null && if (ref.watch(exchangeFormStateProvider(rateType)).sendAmount != null &&
ref.watch(exchangeFormStateProvider).sendAmount != Decimal.zero) ref.watch(exchangeFormStateProvider(rateType)).sendAmount !=
Decimal.zero)
SizedBox( SizedBox(
height: isDesktop ? 20 : 12, height: isDesktop ? 20 : 12,
), ),
// these reads should be watch // these reads should be watch
if (ref.watch(exchangeFormStateProvider).sendAmount != null && if (ref.watch(exchangeFormStateProvider(rateType)).sendAmount != null &&
ref.watch(exchangeFormStateProvider).sendAmount != Decimal.zero) ref.watch(exchangeFormStateProvider(rateType)).sendAmount !=
Decimal.zero)
ExchangeProviderOptions( ExchangeProviderOptions(
from: ref.watch(exchangeFormStateProvider).fromTicker, from: ref.watch(exchangeFormStateProvider(rateType)).fromTicker,
to: ref.watch(exchangeFormStateProvider).toTicker, to: ref.watch(exchangeFormStateProvider(rateType)).toTicker,
fromAmount: ref.watch(exchangeFormStateProvider).sendAmount, fromAmount:
toAmount: ref.watch(exchangeFormStateProvider).receiveAmount, ref.watch(exchangeFormStateProvider(rateType)).sendAmount,
toAmount:
ref.watch(exchangeFormStateProvider(rateType)).receiveAmount,
fixedRate: ref.watch(prefsChangeNotifierProvider fixedRate: ref.watch(prefsChangeNotifierProvider
.select((value) => value.exchangeRateType)) == .select((value) => value.exchangeRateType)) ==
ExchangeRateType.fixed, ExchangeRateType.fixed,
reversed: ref.watch( reversed: ref.watch(exchangeFormStateProvider(rateType)
exchangeFormStateProvider.select((value) => value.reversed)), .select((value) => value.reversed)),
), ),
SizedBox( SizedBox(
height: isDesktop ? 20 : 12, height: isDesktop ? 20 : 12,
), ),
PrimaryButton( PrimaryButton(
buttonHeight: isDesktop ? ButtonHeight.l : null, buttonHeight: isDesktop ? ButtonHeight.l : null,
enabled: ref.watch( enabled: ref.watch(exchangeFormStateProvider(rateType)
exchangeFormStateProvider.select((value) => value.canExchange)), .select((value) => value.canExchange)),
onPressed: onExchangePressed, onPressed: onExchangePressed,
label: "Exchange", label: "Exchange",
) )

View file

@ -60,7 +60,11 @@ class ExchangeProviderOptions extends ConsumerWidget {
ChangeNowExchange.exchangeName) { ChangeNowExchange.exchangeName) {
ref.read(currentExchangeNameStateProvider.state).state = ref.read(currentExchangeNameStateProvider.state).state =
ChangeNowExchange.exchangeName; ChangeNowExchange.exchangeName;
ref.read(exchangeFormStateProvider).exchange = ref
.read(exchangeFormStateProvider(ref
.read(prefsChangeNotifierProvider)
.exchangeRateType))
.exchange =
Exchange.fromName(ref Exchange.fromName(ref
.read(currentExchangeNameStateProvider.state) .read(currentExchangeNameStateProvider.state)
.state); .state);
@ -95,7 +99,11 @@ class ExchangeProviderOptions extends ConsumerWidget {
.read( .read(
currentExchangeNameStateProvider.state) currentExchangeNameStateProvider.state)
.state = value; .state = value;
ref.read(exchangeFormStateProvider).exchange = ref
.read(exchangeFormStateProvider(ref
.read(prefsChangeNotifierProvider)
.exchangeRateType))
.exchange =
Exchange.fromName(ref Exchange.fromName(ref
.read(currentExchangeNameStateProvider .read(currentExchangeNameStateProvider
.state) .state)
@ -274,7 +282,11 @@ class ExchangeProviderOptions extends ConsumerWidget {
MajesticBankExchange.exchangeName) { MajesticBankExchange.exchangeName) {
ref.read(currentExchangeNameStateProvider.state).state = ref.read(currentExchangeNameStateProvider.state).state =
MajesticBankExchange.exchangeName; MajesticBankExchange.exchangeName;
ref.read(exchangeFormStateProvider).exchange = ref
.read(exchangeFormStateProvider(ref
.read(prefsChangeNotifierProvider)
.exchangeRateType))
.exchange =
Exchange.fromName(ref Exchange.fromName(ref
.read(currentExchangeNameStateProvider.state) .read(currentExchangeNameStateProvider.state)
.state); .state);
@ -309,7 +321,11 @@ class ExchangeProviderOptions extends ConsumerWidget {
.read( .read(
currentExchangeNameStateProvider.state) currentExchangeNameStateProvider.state)
.state = value; .state = value;
ref.read(exchangeFormStateProvider).exchange = ref
.read(exchangeFormStateProvider(ref
.read(prefsChangeNotifierProvider)
.exchangeRateType))
.exchange =
Exchange.fromName(ref Exchange.fromName(ref
.read(currentExchangeNameStateProvider .read(currentExchangeNameStateProvider
.state) .state)

View file

@ -254,7 +254,8 @@ class _WalletViewState extends ConsumerState<WalletView> {
ref.read(prefsChangeNotifierProvider).exchangeRateType = ref.read(prefsChangeNotifierProvider).exchangeRateType =
ExchangeRateType.estimated; ExchangeRateType.estimated;
ref.read(exchangeFormStateProvider).exchange = ref.read(exchangeProvider); ref.read(exchangeFormStateProvider(ExchangeRateType.estimated)).exchange =
ref.read(exchangeProvider);
final currencies = ref final currencies = ref
.read(availableChangeNowCurrenciesProvider) .read(availableChangeNowCurrenciesProvider)
@ -263,7 +264,9 @@ class _WalletViewState extends ConsumerState<WalletView> {
element.ticker.toLowerCase() == coin.ticker.toLowerCase()); element.ticker.toLowerCase() == coin.ticker.toLowerCase());
if (currencies.isNotEmpty) { if (currencies.isNotEmpty) {
ref.read(exchangeFormStateProvider).setCurrencies( ref
.read(exchangeFormStateProvider(ExchangeRateType.estimated))
.setCurrencies(
currencies.first, currencies.first,
ref ref
.read(availableChangeNowCurrenciesProvider) .read(availableChangeNowCurrenciesProvider)

View file

@ -1,30 +1,18 @@
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:stackwallet/models/exchange/exchange_form_state.dart'; import 'package:stackwallet/models/exchange/exchange_form_state.dart';
import 'package:stackwallet/pages/exchange_view/sub_widgets/exchange_rate_sheet.dart'; import 'package:stackwallet/pages/exchange_view/sub_widgets/exchange_rate_sheet.dart';
import 'package:stackwallet/providers/global/prefs_provider.dart';
final exchangeFormStateProvider = final exchangeFormStateProvider =
ChangeNotifierProvider<ExchangeFormState>((ref) { ChangeNotifierProvider.family<ExchangeFormState, ExchangeRateType>(
final type = ref.watch( (ref, type) {
prefsChangeNotifierProvider.select(
(value) => value.exchangeRateType,
),
);
switch (type) { switch (type) {
case ExchangeRateType.estimated: case ExchangeRateType.estimated:
return ref.watch(_estimatedFormState); return _estimatedInstance;
case ExchangeRateType.fixed: case ExchangeRateType.fixed:
return ref.watch(_fixedFormState); return _fixedInstance;
} }
}); });
final _fixedInstance = ExchangeFormState(ExchangeRateType.fixed); final _fixedInstance = ExchangeFormState(ExchangeRateType.fixed);
final _fixedFormState = ChangeNotifierProvider(
(ref) => _fixedInstance,
);
final _estimatedInstance = ExchangeFormState(ExchangeRateType.estimated); final _estimatedInstance = ExchangeFormState(ExchangeRateType.estimated);
final _estimatedFormState = ChangeNotifierProvider(
(ref) => _estimatedInstance,
);