import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../pages/pinpad_views/pinpad_dialog.dart'; import '../pages/wallet_view/transaction_views/tx_v2/transaction_v2_details_view.dart'; import '../pages_desktop_specific/password/request_desktop_auth_dialog.dart'; import '../providers/global/wallets_provider.dart'; import '../utilities/text_styles.dart'; import '../utilities/util.dart'; import '../wallets/wallet/intermediate/lib_monero_wallet.dart'; import 'custom_buttons/blue_text_button.dart'; import 'custom_buttons/simple_copy_button.dart'; import 'detail_item.dart'; class TxKeyWidget extends ConsumerStatefulWidget { /// The [walletId] MUST be the id of a [LibMoneroWallet]! const TxKeyWidget({ super.key, required this.walletId, required this.txid, }); final String walletId; final String txid; @override ConsumerState createState() => _TxKeyWidgetState(); } class _TxKeyWidgetState extends ConsumerState { String? _private; bool _lock = false; Future _loadTxKey() async { if (_lock) { return; } _lock = true; try { final verified = await showDialog( context: context, builder: (context) => Util.isDesktop ? const RequestDesktopAuthDialog(title: "Show private view key") : const PinpadDialog( biometricsAuthenticationTitle: "Show private view key", biometricsLocalizedReason: "Authenticate to show private view key", biometricsCancelButtonString: "CANCEL", ), barrierDismissible: !Util.isDesktop, ); if (verified == "verified success" && mounted) { final wallet = ref.read(pWallets).getWallet(widget.walletId) as LibMoneroWallet; _private = wallet.getTxKeyFor(txid: widget.txid); if (_private!.isEmpty) { _private = "Unavailable"; } if (context.mounted) { setState(() {}); } else { _private == null; } } } finally { _lock = false; } } @override Widget build(BuildContext context) { return DetailItemBase( button: _private == null ? CustomTextButton( text: "Show", onTap: _loadTxKey, enabled: _private == null, ) : Util.isDesktop ? IconCopyButton( data: _private!, ) : SimpleCopyButton( data: _private!, ), title: Text( "Private view key", style: STextStyles.itemSubtitle(context), ), detail: SelectableText( // TODO _private ?? "*" * 52, // 52 is approx length style: STextStyles.w500_14(context), ), ); } }