mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2025-05-20 11:34:40 +00:00
form state provider fix
This commit is contained in:
parent
1455808d7a
commit
5aab115b96
4 changed files with 142 additions and 126 deletions
lib
pages
providers/exchange
|
@ -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",
|
||||||
)
|
)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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,
|
|
||||||
);
|
|
||||||
|
|
Loading…
Reference in a new issue