Send data from URI to send screen

This commit is contained in:
OmarHatem28 2022-08-09 15:47:41 +02:00
parent 01adf863d0
commit 7bccf46832
5 changed files with 64 additions and 28 deletions

View file

@ -5,6 +5,7 @@ import 'package:cake_wallet/ionia/ionia_anypay.dart';
import 'package:cake_wallet/ionia/ionia_category.dart'; import 'package:cake_wallet/ionia/ionia_category.dart';
import 'package:cake_wallet/ionia/ionia_gift_card.dart'; import 'package:cake_wallet/ionia/ionia_gift_card.dart';
import 'package:cake_wallet/src/screens/ionia/cards/ionia_gift_card_detail_page.dart'; import 'package:cake_wallet/src/screens/ionia/cards/ionia_gift_card_detail_page.dart';
import 'package:cake_wallet/utils/payment_request.dart';
import 'package:cake_wallet/view_model/ionia/ionia_auth_view_model.dart'; import 'package:cake_wallet/view_model/ionia/ionia_auth_view_model.dart';
import 'package:cake_wallet/view_model/ionia/ionia_buy_card_view_model.dart'; import 'package:cake_wallet/view_model/ionia/ionia_buy_card_view_model.dart';
import 'package:cake_wallet/view_model/ionia/ionia_filter_view_model.dart'; import 'package:cake_wallet/view_model/ionia/ionia_filter_view_model.dart';
@ -372,9 +373,12 @@ Future setup(
getIt.get<BalanceViewModel>(), getIt.get<BalanceViewModel>(),
_transactionDescriptionBox)); _transactionDescriptionBox));
getIt.registerFactory( getIt.registerFactoryParam<SendPage, PaymentRequest, void>(
() => SendPage(sendViewModel: getIt.get<SendViewModel>(), (PaymentRequest initialPaymentRequest, _) => SendPage(
settingsViewModel: getIt.get<SettingsViewModel>())); sendViewModel: getIt.get<SendViewModel>(),
settingsViewModel: getIt.get<SettingsViewModel>(),
initialPaymentRequest: initialPaymentRequest,
));
getIt.registerFactory(() => SendTemplatePage( getIt.registerFactory(() => SendTemplatePage(
sendTemplateViewModel: getIt.get<SendTemplateViewModel>())); sendTemplateViewModel: getIt.get<SendTemplateViewModel>()));

View file

@ -5,6 +5,7 @@ import 'package:cake_wallet/buy/order.dart';
import 'package:cake_wallet/ionia/ionia_category.dart'; import 'package:cake_wallet/ionia/ionia_category.dart';
import 'package:cake_wallet/ionia/ionia_merchant.dart'; import 'package:cake_wallet/ionia/ionia_merchant.dart';
import 'package:cake_wallet/store/yat/yat_store.dart'; import 'package:cake_wallet/store/yat/yat_store.dart';
import 'package:cake_wallet/utils/payment_request.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
@ -216,34 +217,32 @@ class AppState extends State<App> with SingleTickerProviderStateMixin {
/// the foreground or in the background. /// the foreground or in the background.
Future<void> initUniLinks() async { Future<void> initUniLinks() async {
try { try {
stream = getLinksStream().listen((String link) { stream = getUriLinksStream().listen((Uri uri) {
handleDeepLinking(link); handleDeepLinking(uri);
}); });
final String initialLink = await getInitialLink(); final Uri initialUri = await getInitialUri();
handleDeepLinking(initialLink); handleDeepLinking(initialUri);
} catch (e) { } catch (e) {
print(e); print(e);
} }
} }
void handleDeepLinking(String link) async { void handleDeepLinking(Uri uri) {
if (link == null || !mounted) return; if (uri == null || !mounted) return;
final List<String> urlComponents = link.split(":"); switch (uri.scheme) {
switch (urlComponents.first) {
case "bitcoin": case "bitcoin":
print("@@@@@@@@@@@@@@@@@@@@@@@@@@");
print("Bitcoin QR Code: \n${link}");
break;
case "litecoin": case "litecoin":
case "haven": case "haven":
case "monero": case "monero":
default: default:
print("@@@@@@@@@@@@@@@@@@@@@@@@@@"); Navigator.pushNamed(
print(link); navigatorKey.currentContext,
Routes.send,
arguments: PaymentRequest.fromUri(uri),
);
} }
} }

View file

@ -16,6 +16,7 @@ import 'package:cake_wallet/src/screens/seed/pre_seed_page.dart';
import 'package:cake_wallet/src/screens/support/support_page.dart'; import 'package:cake_wallet/src/screens/support/support_page.dart';
import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_details_page.dart'; import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_details_page.dart';
import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_list_page.dart'; import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_list_page.dart';
import 'package:cake_wallet/utils/payment_request.dart';
import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart'; import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -207,8 +208,12 @@ Route<dynamic> createRoute(RouteSettings settings) {
builder: (_) => getIt.get<DashboardPage>()); builder: (_) => getIt.get<DashboardPage>());
case Routes.send: case Routes.send:
final initialPaymentRequest = settings.arguments as PaymentRequest;
return CupertinoPageRoute<void>( return CupertinoPageRoute<void>(
fullscreenDialog: true, builder: (_) => getIt.get<SendPage>()); fullscreenDialog: true, builder: (_) => getIt.get<SendPage>(
param1: initialPaymentRequest,
));
case Routes.sendTemplate: case Routes.sendTemplate:
return CupertinoPageRoute<void>( return CupertinoPageRoute<void>(

View file

@ -5,6 +5,7 @@ import 'package:cake_wallet/src/screens/send/widgets/send_card.dart';
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
import 'package:cake_wallet/src/widgets/picker.dart'; import 'package:cake_wallet/src/widgets/picker.dart';
import 'package:cake_wallet/src/widgets/template_tile.dart'; import 'package:cake_wallet/src/widgets/template_tile.dart';
import 'package:cake_wallet/utils/payment_request.dart';
import 'package:cake_wallet/view_model/send/output.dart'; import 'package:cake_wallet/view_model/send/output.dart';
import 'package:cake_wallet/view_model/settings/settings_view_model.dart'; import 'package:cake_wallet/view_model/settings/settings_view_model.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
@ -28,13 +29,18 @@ import 'package:smooth_page_indicator/smooth_page_indicator.dart';
import 'package:cw_core/crypto_currency.dart'; import 'package:cw_core/crypto_currency.dart';
class SendPage extends BasePage { class SendPage extends BasePage {
SendPage({@required this.sendViewModel,@required this.settingsViewModel }) : _formKey = GlobalKey<FormState>(),fiatFromSettings = settingsViewModel.fiatCurrency; SendPage({
@required this.sendViewModel,
@required this.settingsViewModel,
this.initialPaymentRequest,
}) : _formKey = GlobalKey<FormState>(),fiatFromSettings = settingsViewModel.fiatCurrency;
final SendViewModel sendViewModel; final SendViewModel sendViewModel;
final SettingsViewModel settingsViewModel; final SettingsViewModel settingsViewModel;
final GlobalKey<FormState> _formKey; final GlobalKey<FormState> _formKey;
final controller = PageController(initialPage: 0); final controller = PageController(initialPage: 0);
final FiatCurrency fiatFromSettings; final FiatCurrency fiatFromSettings;
final PaymentRequest initialPaymentRequest;
bool _effectsInstalled = false; bool _effectsInstalled = false;
@ -116,6 +122,7 @@ class SendPage extends BasePage {
key: output.key, key: output.key,
output: output, output: output,
sendViewModel: sendViewModel, sendViewModel: sendViewModel,
initialPaymentRequest: initialPaymentRequest,
); );
}); });
}, },

View file

@ -19,23 +19,35 @@ import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/widgets/base_text_form_field.dart'; import 'package:cake_wallet/src/widgets/base_text_form_field.dart';
class SendCard extends StatefulWidget { class SendCard extends StatefulWidget {
SendCard({Key key, @required this.output, @required this.sendViewModel}) : super(key: key); SendCard({
Key key,
@required this.output,
@required this.sendViewModel,
this.initialPaymentRequest,
}) : super(key: key);
final Output output; final Output output;
final SendViewModel sendViewModel; final SendViewModel sendViewModel;
final PaymentRequest initialPaymentRequest;
@override @override
SendCardState createState() => SendCardState( SendCardState createState() {
return SendCardState(
output: output, output: output,
sendViewModel: sendViewModel sendViewModel: sendViewModel,
initialPaymentRequest: initialPaymentRequest,
); );
} }
}
class SendCardState extends State<SendCard> class SendCardState extends State<SendCard>
with AutomaticKeepAliveClientMixin<SendCard> { with AutomaticKeepAliveClientMixin<SendCard> {
SendCardState({@required this.output, @required this.sendViewModel}) SendCardState({
: addressController = TextEditingController(), @required this.output,
cryptoAmountController = TextEditingController(), @required this.sendViewModel,
PaymentRequest initialPaymentRequest})
: addressController = TextEditingController(text: initialPaymentRequest?.address),
cryptoAmountController = TextEditingController(text: initialPaymentRequest?.amount),
fiatAmountController = TextEditingController(), fiatAmountController = TextEditingController(),
noteController = TextEditingController(), noteController = TextEditingController(),
extractedAddressController = TextEditingController(), extractedAddressController = TextEditingController(),
@ -111,6 +123,11 @@ class SendCardState extends State<SendCard>
? sendViewModel.textValidator ? sendViewModel.textValidator
: sendViewModel.addressValidator; : sendViewModel.addressValidator;
print("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
print("444444444444444444444444444444");
print(addressController.text);
print(cryptoAmountController.text);
return AddressTextField( return AddressTextField(
focusNode: addressFocusNode, focusNode: addressFocusNode,
controller: addressController, controller: addressController,
@ -509,8 +526,12 @@ class SendCardState extends State<SendCard>
} }
void _setEffects(BuildContext context) { void _setEffects(BuildContext context) {
if (output.address.isNotEmpty) {
addressController.text = output.address; addressController.text = output.address;
}
if (output.cryptoAmount.isNotEmpty) {
cryptoAmountController.text = output.cryptoAmount; cryptoAmountController.text = output.cryptoAmount;
}
fiatAmountController.text = output.fiatAmount; fiatAmountController.text = output.fiatAmount;
noteController.text = output.note; noteController.text = output.note;
extractedAddressController.text = output.extractedAddress; extractedAddressController.text = output.extractedAddress;