improve address rotation button ui + fix bug when autogenerate is disabled (#3334)

* improve address rotation button ui + fix bug when autogenerate is disabled * remove dumbass debug print * add button show condition

malik1004x committed Jun 25, 2026 at 11:29 UTC d3a1464775911dcffa6dc912d04fad8e7c1d168b
2 files changed +41 -22
lib/new-ui/pages/receive_page.dart
+30 -20
@@ -1,6 +1,7 @@
1 import 'package:cake_wallet/core/utilities.dart';
2 import 'package:cake_wallet/entities/auto_generate_subaddress_status.dart';
3 import 'package:cake_wallet/generated/i18n.dart';
4 +import 'package:cake_wallet/new-ui/widgets/modern_button.dart';
5 import 'package:cake_wallet/new-ui/widgets/receive_page/payjoin_copy_modal.dart';
6 import 'package:cake_wallet/new-ui/widgets/receive_page/receive_address_type.dart';
7 import 'package:cake_wallet/new-ui/widgets/receive_page/receive_address_widget.dart';
@@ -22,6 +23,7 @@ import 'package:cw_core/crypto_currency.dart';
23 import 'package:cw_core/payment_uris.dart';
24 import 'package:cw_core/receive_page_option.dart';
25 import 'package:cw_core/utils/print_verbose.dart';
26 +import 'package:flutter/cupertino.dart';
27 import 'package:flutter_mobx/flutter_mobx.dart';
28 import 'package:mobx/mobx.dart';
29 import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
@@ -194,29 +196,37 @@ class _NewReceivePageState extends State<NewReceivePage> {
196 ModalTopBar(
197 title: _largeQrMode ? "" : S.of(context).receive,
198 leadingIcon: Icon(Icons.close),
197 - trailingIcon: _largeQrMode
198 - ? Icon(Icons.share)
199 - : widget.addressListViewModel.hasAddressRotation
200 - /* TODO rotating is broken on mweb, disabling for now, fix after mvp*/
201 - &&
202 - !(widget.receiveOptionViewModel.selectedReceiveOption.description ?? "")
203 - .toLowerCase()
204 - .contains("mweb")
205 - ? Icon(Icons.refresh)
206 - : null,
199 onLeadingPressed: () {
200 Navigator.of(context, rootNavigator: true).pop();
201 },
210 - onTrailingPressed: () {
211 - if (_largeQrMode) {
212 - ShareUtil.share(
213 - text: widget.addressListViewModel.uri.toString(),
214 - context: context,
215 - );
216 - } else if (widget.addressListViewModel.hasAddressRotation) {
217 - widget.addressListViewModel.rotateAddress();
218 - }
219 - },
202 + trailingWidget: Observer(
203 + builder: (_) => AnimatedSwitcher(
204 + duration: Duration(milliseconds: 300),
205 + child: _largeQrMode || widget.addressListViewModel.hasAddressRotation
206 + /* TODO rotating is broken on mweb, disabling for now, fix after mvp*/
207 + &&
208 + !(widget.receiveOptionViewModel.selectedReceiveOption.description ?? "")
209 + .toLowerCase()
210 + .contains("mweb") ? ModernButton(
211 + key: ValueKey(_largeQrMode),
212 + size: 36,
213 + icon: _largeQrMode ? Icon(Icons.share) : widget.addressListViewModel.isRotatingAddress
214 + ? CupertinoActivityIndicator()
215 + : Icon(Icons.refresh),
216 + onPressed: () {
217 + if(_largeQrMode) {
218 + ShareUtil.share(
219 + text: widget.addressListViewModel.uri.toString(),
220 + context: context,
221 + );
222 + } else {
223 + if(widget.addressListViewModel.hasAddressRotation) {
224 + widget.addressListViewModel.rotateAddress();
225 + }
226 + }
227 + }):SizedBox.shrink(),
228 + ),
229 + ),
230 ),
231 Expanded(
232 child: Column(
lib/view_model/wallet_address_list/wallet_address_list_view_model.dart
+11 -2
@@ -614,11 +614,20 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo
614 void setAddress(WalletAddressListItem address) =>
615 wallet.walletAddresses.address = address.address;
616
617 + @observable
618 + bool isRotatingAddress = false;
619 +
620 @action
621 Future<void> rotateAddress() async {
619 - await createNewAddress(wallet, "");
620 - if (isElectrumWallet) {
622 + if(isRotatingAddress) {
623 + return;
624 + }
625 + try {
626 + isRotatingAddress = true;
627 + await createNewAddress(wallet, "");
628 wallet.walletAddresses.address = addressList.whereType<WalletAddressListItem>().last.address;
629 + } finally {
630 + isRotatingAddress = false;
631 }
632 }
633