mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2025-02-02 03:06:29 +00:00
add copy to clipboard button to mobile xpub dialog
This commit is contained in:
parent
767bcecd03
commit
6f3691625a
1 changed files with 64 additions and 1 deletions
|
@ -1,8 +1,11 @@
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:bip32/bip32.dart' as bip32;
|
||||||
|
import 'package:bip39/bip39.dart' as bip39;
|
||||||
import 'package:decimal/decimal.dart';
|
import 'package:decimal/decimal.dart';
|
||||||
import 'package:event_bus/event_bus.dart';
|
import 'package:event_bus/event_bus.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
import 'package:flutter_svg/svg.dart';
|
import 'package:flutter_svg/svg.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
|
@ -38,6 +41,7 @@ import 'package:stackwallet/services/event_bus/global_event_bus.dart';
|
||||||
import 'package:stackwallet/services/exchange/exchange_data_loading_service.dart';
|
import 'package:stackwallet/services/exchange/exchange_data_loading_service.dart';
|
||||||
import 'package:stackwallet/services/mixins/paynym_wallet_interface.dart';
|
import 'package:stackwallet/services/mixins/paynym_wallet_interface.dart';
|
||||||
import 'package:stackwallet/utilities/assets.dart';
|
import 'package:stackwallet/utilities/assets.dart';
|
||||||
|
import 'package:stackwallet/utilities/clipboard_interface.dart';
|
||||||
import 'package:stackwallet/utilities/constants.dart';
|
import 'package:stackwallet/utilities/constants.dart';
|
||||||
import 'package:stackwallet/utilities/enums/backup_frequency_type.dart';
|
import 'package:stackwallet/utilities/enums/backup_frequency_type.dart';
|
||||||
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
import 'package:stackwallet/utilities/enums/coin_enum.dart';
|
||||||
|
@ -72,6 +76,7 @@ class WalletView extends ConsumerStatefulWidget {
|
||||||
required this.walletId,
|
required this.walletId,
|
||||||
required this.managerProvider,
|
required this.managerProvider,
|
||||||
this.eventBus,
|
this.eventBus,
|
||||||
|
this.clipboardInterface = const ClipboardWrapper(),
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
static const String routeName = "/wallet";
|
static const String routeName = "/wallet";
|
||||||
|
@ -81,6 +86,8 @@ class WalletView extends ConsumerStatefulWidget {
|
||||||
final ChangeNotifierProvider<Manager> managerProvider;
|
final ChangeNotifierProvider<Manager> managerProvider;
|
||||||
final EventBus? eventBus;
|
final EventBus? eventBus;
|
||||||
|
|
||||||
|
final ClipboardInterface clipboardInterface;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
ConsumerState<WalletView> createState() => _WalletViewState();
|
ConsumerState<WalletView> createState() => _WalletViewState();
|
||||||
}
|
}
|
||||||
|
@ -100,10 +107,13 @@ class _WalletViewState extends ConsumerState<WalletView> {
|
||||||
|
|
||||||
bool _rescanningOnOpen = false;
|
bool _rescanningOnOpen = false;
|
||||||
|
|
||||||
|
late ClipboardInterface _clipboardInterface;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
walletId = widget.walletId;
|
walletId = widget.walletId;
|
||||||
managerProvider = widget.managerProvider;
|
managerProvider = widget.managerProvider;
|
||||||
|
_clipboardInterface = widget.clipboardInterface;
|
||||||
|
|
||||||
ref.read(managerProvider).isActiveWallet = true;
|
ref.read(managerProvider).isActiveWallet = true;
|
||||||
if (!ref.read(managerProvider).shouldAutoSync) {
|
if (!ref.read(managerProvider).shouldAutoSync) {
|
||||||
|
@ -189,6 +199,16 @@ class _WalletViewState extends ConsumerState<WalletView> {
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> _copy(String xpub) async {
|
||||||
|
await _clipboardInterface.setData(ClipboardData(text: xpub));
|
||||||
|
unawaited(showFloatingFlushBar(
|
||||||
|
type: FlushBarType.info,
|
||||||
|
message: "Copied to clipboard",
|
||||||
|
iconAsset: Assets.svg.copy,
|
||||||
|
context: context,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
DateTime? _cachedTime;
|
DateTime? _cachedTime;
|
||||||
|
|
||||||
Future<bool> _onWillPop() async {
|
Future<bool> _onWillPop() async {
|
||||||
|
@ -918,7 +938,50 @@ class _WalletViewState extends ConsumerState<WalletView> {
|
||||||
label: "Show xPub",
|
label: "Show xPub",
|
||||||
icon: const XPubNavIcon(),
|
icon: const XPubNavIcon(),
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
print("TODO");
|
final List<String> mnemonic = await ref
|
||||||
|
.read(walletsChangeNotifierProvider)
|
||||||
|
.getManager(walletId)
|
||||||
|
.mnemonic;
|
||||||
|
|
||||||
|
final seed = bip39.mnemonicToSeed(mnemonic.join(' '));
|
||||||
|
final node = bip32.BIP32.fromSeed(seed);
|
||||||
|
final xpub = node.neutered().toBase58();
|
||||||
|
|
||||||
|
showDialog<dynamic>(
|
||||||
|
barrierDismissible: true,
|
||||||
|
context: context,
|
||||||
|
builder: (_) => StackDialog(
|
||||||
|
title: "Wallet xPub",
|
||||||
|
message: xpub,
|
||||||
|
leftButton: TextButton(
|
||||||
|
style: Theme.of(context)
|
||||||
|
.extension<StackColors>()!
|
||||||
|
.getSecondaryEnabledButtonStyle(context),
|
||||||
|
onPressed: () async {
|
||||||
|
await _copy(xpub);
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
"Copy to clipboard",
|
||||||
|
style: STextStyles.button(context).copyWith(
|
||||||
|
color: Theme.of(context)
|
||||||
|
.extension<StackColors>()!
|
||||||
|
.accentColorDark),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
rightButton: TextButton(
|
||||||
|
style: Theme.of(context)
|
||||||
|
.extension<StackColors>()!
|
||||||
|
.getPrimaryEnabledButtonStyle(context),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
"Continue",
|
||||||
|
style: STextStyles.button(context),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
Loading…
Reference in a new issue