mobile paynym send view

This commit is contained in:
julian 2023-01-26 11:46:16 -06:00
parent 4f2690f880
commit a41c903a96
3 changed files with 286 additions and 234 deletions

View file

@ -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 {

View file

@ -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

View file

@ -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()}");