mirror of
https://github.com/cypherstack/stack_wallet.git
synced 2025-02-02 19:26:37 +00:00
mobile paynym send view
This commit is contained in:
parent
4f2690f880
commit
a41c903a96
3 changed files with 286 additions and 234 deletions
|
@ -12,6 +12,7 @@ import 'package:stackwallet/pages/paynym/dialogs/confirm_paynym_connect_dialog.d
|
|||
import 'package:stackwallet/pages/paynym/paynym_home_view.dart';
|
||||
import 'package:stackwallet/pages/paynym/subwidgets/paynym_bot.dart';
|
||||
import 'package:stackwallet/pages/send_view/confirm_transaction_view.dart';
|
||||
import 'package:stackwallet/pages/send_view/send_view.dart';
|
||||
import 'package:stackwallet/providers/global/wallets_provider.dart';
|
||||
import 'package:stackwallet/route_generator.dart';
|
||||
import 'package:stackwallet/services/mixins/paynym_wallet_interface.dart';
|
||||
|
@ -25,6 +26,7 @@ import 'package:stackwallet/widgets/desktop/primary_button.dart';
|
|||
import 'package:stackwallet/widgets/desktop/secondary_button.dart';
|
||||
import 'package:stackwallet/widgets/loading_indicator.dart';
|
||||
import 'package:stackwallet/widgets/rounded_container.dart';
|
||||
import 'package:tuple/tuple.dart';
|
||||
|
||||
class PaynymDetailsPopup extends ConsumerStatefulWidget {
|
||||
const PaynymDetailsPopup({
|
||||
|
@ -44,7 +46,16 @@ class _PaynymDetailsPopupState extends ConsumerState<PaynymDetailsPopup> {
|
|||
bool _showInsufficientFundsInfo = false;
|
||||
|
||||
Future<void> _onSend() async {
|
||||
// todo send
|
||||
final manager =
|
||||
ref.read(walletsChangeNotifierProvider).getManager(widget.walletId);
|
||||
await Navigator.of(context).pushNamed(
|
||||
SendView.routeName,
|
||||
arguments: Tuple3(
|
||||
manager.walletId,
|
||||
manager.coin,
|
||||
widget.accountLite,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _onConnectPressed() async {
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
|
|||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:stackwallet/models/paynym/paynym_account_lite.dart';
|
||||
import 'package:stackwallet/models/send_view_auto_fill_data.dart';
|
||||
import 'package:stackwallet/pages/address_book_views/address_book_view.dart';
|
||||
import 'package:stackwallet/pages/send_view/confirm_transaction_view.dart';
|
||||
|
@ -52,6 +53,7 @@ class SendView extends ConsumerStatefulWidget {
|
|||
this.autoFillData,
|
||||
this.clipboard = const ClipboardWrapper(),
|
||||
this.barcodeScanner = const BarcodeScannerWrapper(),
|
||||
this.accountLite,
|
||||
}) : super(key: key);
|
||||
|
||||
static const String routeName = "/sendView";
|
||||
|
@ -61,6 +63,7 @@ class SendView extends ConsumerStatefulWidget {
|
|||
final SendViewAutoFillData? autoFillData;
|
||||
final ClipboardInterface clipboard;
|
||||
final BarcodeScannerInterface barcodeScanner;
|
||||
final PaynymAccountLite? accountLite;
|
||||
|
||||
@override
|
||||
ConsumerState<SendView> createState() => _SendViewState();
|
||||
|
@ -278,6 +281,8 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
return null;
|
||||
}
|
||||
|
||||
bool get isPaynymSend => widget.accountLite != null;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
ref.refresh(feeSheetSessionCacheProvider);
|
||||
|
@ -307,6 +312,11 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
_addressToggleFlag = true;
|
||||
}
|
||||
|
||||
if (isPaynymSend) {
|
||||
sendToController.text = widget.accountLite!.nymName;
|
||||
noteController.text = "PayNym send";
|
||||
}
|
||||
|
||||
if (coin != Coin.epicCash) {
|
||||
_cryptoFocus.addListener(() {
|
||||
if (!_cryptoFocus.hasFocus && !_baseFocus.hasFocus) {
|
||||
|
@ -599,13 +609,22 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
height: 16,
|
||||
),
|
||||
Text(
|
||||
"Send to",
|
||||
isPaynymSend ? "Send to PayNym address" : "Send to",
|
||||
style: STextStyles.smallMed12(context),
|
||||
textAlign: TextAlign.left,
|
||||
),
|
||||
const SizedBox(
|
||||
height: 8,
|
||||
),
|
||||
if (isPaynymSend)
|
||||
TextField(
|
||||
key: const Key("sendViewPaynymAddressFieldKey"),
|
||||
controller: sendToController,
|
||||
enabled: false,
|
||||
readOnly: true,
|
||||
style: STextStyles.fieldLabel(context),
|
||||
),
|
||||
if (!isPaynymSend)
|
||||
ClipRRect(
|
||||
borderRadius: BorderRadius.circular(
|
||||
Constants.size.circularBorderRadius,
|
||||
|
@ -665,9 +684,11 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
sendToController.text = "";
|
||||
_address = "";
|
||||
_updatePreviewButtonState(
|
||||
_address, _amountToSend);
|
||||
_address,
|
||||
_amountToSend);
|
||||
setState(() {
|
||||
_addressToggleFlag = false;
|
||||
_addressToggleFlag =
|
||||
false;
|
||||
});
|
||||
},
|
||||
child: const XIcon(),
|
||||
|
@ -678,9 +699,11 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
onTap: () async {
|
||||
final ClipboardData? data =
|
||||
await clipboard.getData(
|
||||
Clipboard.kTextPlain);
|
||||
Clipboard
|
||||
.kTextPlain);
|
||||
if (data?.text != null &&
|
||||
data!.text!.isNotEmpty) {
|
||||
data!
|
||||
.text!.isNotEmpty) {
|
||||
String content =
|
||||
data.text!.trim();
|
||||
if (content
|
||||
|
@ -702,7 +725,8 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
setState(() {
|
||||
_addressToggleFlag =
|
||||
sendToController
|
||||
.text.isNotEmpty;
|
||||
.text
|
||||
.isNotEmpty;
|
||||
});
|
||||
}
|
||||
},
|
||||
|
@ -772,7 +796,8 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
coin.uriScheme) {
|
||||
// auto fill address
|
||||
_address =
|
||||
results["address"] ?? "";
|
||||
results["address"] ??
|
||||
"";
|
||||
sendToController.text =
|
||||
_address!;
|
||||
|
||||
|
@ -781,7 +806,8 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
null) {
|
||||
noteController.text =
|
||||
results["message"]!;
|
||||
} else if (results["label"] !=
|
||||
} else if (results[
|
||||
"label"] !=
|
||||
null) {
|
||||
noteController.text =
|
||||
results["label"]!;
|
||||
|
@ -791,8 +817,8 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
if (results["amount"] !=
|
||||
null) {
|
||||
final amount =
|
||||
Decimal.parse(
|
||||
results["amount"]!);
|
||||
Decimal.parse(results[
|
||||
"amount"]!);
|
||||
cryptoAmountController
|
||||
.text =
|
||||
Format
|
||||
|
@ -811,7 +837,8 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
}
|
||||
|
||||
_updatePreviewButtonState(
|
||||
_address, _amountToSend);
|
||||
_address,
|
||||
_amountToSend);
|
||||
setState(() {
|
||||
_addressToggleFlag =
|
||||
sendToController
|
||||
|
@ -823,15 +850,16 @@ class _SendViewState extends ConsumerState<SendView> {
|
|||
.read(
|
||||
walletsChangeNotifierProvider)
|
||||
.getManager(walletId)
|
||||
.validateAddress(
|
||||
qrResult.rawContent)) {
|
||||
.validateAddress(qrResult
|
||||
.rawContent)) {
|
||||
_address =
|
||||
qrResult.rawContent;
|
||||
sendToController.text =
|
||||
_address ?? "";
|
||||
|
||||
_updatePreviewButtonState(
|
||||
_address, _amountToSend);
|
||||
_address,
|
||||
_amountToSend);
|
||||
setState(() {
|
||||
_addressToggleFlag =
|
||||
sendToController
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:stackwallet/models/buy/response_objects/quote.dart';
|
|||
import 'package:stackwallet/models/contact_address_entry.dart';
|
||||
import 'package:stackwallet/models/exchange/incomplete_exchange.dart';
|
||||
import 'package:stackwallet/models/exchange/response_objects/trade.dart';
|
||||
import 'package:stackwallet/models/paynym/paynym_account_lite.dart';
|
||||
import 'package:stackwallet/models/send_view_auto_fill_data.dart';
|
||||
import 'package:stackwallet/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart';
|
||||
import 'package:stackwallet/pages/add_wallet_views/create_or_restore_wallet_view/create_or_restore_wallet_view.dart';
|
||||
|
@ -841,6 +842,18 @@ class RouteGenerator {
|
|||
name: settings.name,
|
||||
),
|
||||
);
|
||||
} else if (args is Tuple3<String, Coin, PaynymAccountLite>) {
|
||||
return getRoute(
|
||||
shouldUseMaterialRoute: useMaterialPageRoute,
|
||||
builder: (_) => SendView(
|
||||
walletId: args.item1,
|
||||
coin: args.item2,
|
||||
accountLite: args.item3,
|
||||
),
|
||||
settings: RouteSettings(
|
||||
name: settings.name,
|
||||
),
|
||||
);
|
||||
}
|
||||
return _routeError("${settings.name} invalid args: ${args.toString()}");
|
||||
|
||||
|
|
Loading…
Reference in a new issue