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