diff --git a/lib/pages/send_view/frost_ms/frost_send_view.dart b/lib/pages/send_view/frost_ms/frost_send_view.dart index c275439dc..d6cfc505c 100644 --- a/lib/pages/send_view/frost_ms/frost_send_view.dart +++ b/lib/pages/send_view/frost_ms/frost_send_view.dart @@ -37,6 +37,7 @@ import 'package:stackwallet/widgets/background.dart'; import 'package:stackwallet/widgets/conditional_parent.dart'; import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart'; import 'package:stackwallet/widgets/custom_buttons/blue_text_button.dart'; +import 'package:stackwallet/widgets/desktop/primary_button.dart'; import 'package:stackwallet/widgets/desktop/secondary_button.dart'; import 'package:stackwallet/widgets/fee_slider.dart'; import 'package:stackwallet/widgets/frost_scaffold.dart'; @@ -187,16 +188,24 @@ class _FrostSendViewState extends ConsumerState { int customFeeRate = 1; - void _validateRecipientFormStates() { + bool _buttonEnabled = false; + + bool _validateRecipientFormStatesHelper() { for (final i in recipientWidgetIndexes) { - final state = ref.read(pRecipient(i).state).state; - if (state?.amount == null || state?.address == null) { - ref.read(_previewTxButtonStateProvider.notifier).state = false; - return; + final state = ref.read(pRecipient(i)); + if (state?.amount == null || + state?.address == null || + state!.address.isEmpty) { + return false; } } - ref.read(_previewTxButtonStateProvider.notifier).state = true; - return; + return true; + } + + void _validateRecipientFormStates() { + setState(() { + _buttonEnabled = _validateRecipientFormStatesHelper(); + }); } @override @@ -389,12 +398,14 @@ class _FrostSendViewState extends ConsumerState { .state = null; recipientWidgetIndexes.removeAt(i); setState(() {}); + _validateRecipientFormStates(); }, addAnotherRecipientTapped: () { // used for tracking recipient forms _greatestWidgetIndex++; recipientWidgetIndexes.add(_greatestWidgetIndex); setState(() {}); + _validateRecipientFormStates(); }, sendAllTapped: () { return ref.read(pAmountFormatter(coin)).format( @@ -549,21 +560,10 @@ class _FrostSendViewState extends ConsumerState { const SizedBox( height: 12, ), - TextButton( - onPressed: ref.watch(_previewTxButtonStateProvider.state).state - ? _createSignConfig - : null, - style: ref.watch(_previewTxButtonStateProvider.state).state - ? Theme.of(context) - .extension()! - .getPrimaryEnabledButtonStyle(context) - : Theme.of(context) - .extension()! - .getPrimaryDisabledButtonStyle(context), - child: Text( - "Create config", - style: STextStyles.button(context), - ), + PrimaryButton( + label: "Create multisig transaction", + enabled: _buttonEnabled, + onPressed: _createSignConfig, ), const SizedBox( height: 16, @@ -574,5 +574,3 @@ class _FrostSendViewState extends ConsumerState { ); } } - -final _previewTxButtonStateProvider = StateProvider((_) => false); diff --git a/lib/pages/send_view/frost_ms/recipient.dart b/lib/pages/send_view/frost_ms/recipient.dart index 36f5a597f..0540dd787 100644 --- a/lib/pages/send_view/frost_ms/recipient.dart +++ b/lib/pages/send_view/frost_ms/recipient.dart @@ -204,6 +204,7 @@ class _RecipientState extends ConsumerState { focusNode: addressFocusNode, style: STextStyles.field(context), onChanged: (_) { + _updateRecipientData(); setState(() { _addressIsEmpty = addressController.text.isEmpty; }); @@ -394,6 +395,9 @@ class _RecipientState extends ConsumerState { key: const Key("amountInputFieldCryptoTextFieldKey"), controller: amountController, focusNode: amountFocusNode, + onChanged: (_) { + _updateRecipientData(); + }, keyboardType: Util.isDesktop ? null : const TextInputType.numberWithOptions(