|
|
|
@ -1,7 +1,7 @@
|
|
|
|
|
import 'dart:ui';
|
|
|
|
|
import 'package:cake_wallet/entities/sync_status.dart';
|
|
|
|
|
import 'package:cake_wallet/entities/wallet_type.dart';
|
|
|
|
|
import 'package:cake_wallet/exchange/changenow/changenow_exchange_provider.dart';
|
|
|
|
|
import 'package:cake_wallet/src/screens/send/widgets/unstoppable_domain_address_alert.dart';
|
|
|
|
|
import 'package:cake_wallet/src/widgets/standard_checkbox.dart';
|
|
|
|
|
import 'package:dotted_border/dotted_border.dart';
|
|
|
|
|
import 'package:flutter/cupertino.dart';
|
|
|
|
@ -9,8 +9,6 @@ import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:flutter_mobx/flutter_mobx.dart';
|
|
|
|
|
import 'package:keyboard_actions/keyboard_actions.dart';
|
|
|
|
|
import 'package:mobx/mobx.dart';
|
|
|
|
|
import 'package:cake_wallet/exchange/exchange_provider.dart';
|
|
|
|
|
import 'package:cake_wallet/core/execution_state.dart';
|
|
|
|
|
import 'package:cake_wallet/exchange/exchange_template.dart';
|
|
|
|
|
import 'package:cake_wallet/exchange/exchange_trade_state.dart';
|
|
|
|
|
import 'package:cake_wallet/exchange/limits_state.dart';
|
|
|
|
@ -23,7 +21,6 @@ import 'package:cake_wallet/utils/show_pop_up.dart';
|
|
|
|
|
import 'package:cake_wallet/routes.dart';
|
|
|
|
|
import 'package:cake_wallet/generated/i18n.dart';
|
|
|
|
|
import 'package:cake_wallet/entities/crypto_currency.dart';
|
|
|
|
|
import 'package:cake_wallet/exchange/xmrto/xmrto_exchange_provider.dart';
|
|
|
|
|
import 'package:cake_wallet/src/screens/exchange/widgets/exchange_card.dart';
|
|
|
|
|
import 'package:cake_wallet/src/widgets/primary_button.dart';
|
|
|
|
|
import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
|
|
|
|
@ -42,7 +39,9 @@ class ExchangePage extends BasePage {
|
|
|
|
|
final checkBoxKey = GlobalKey<StandardCheckboxState>();
|
|
|
|
|
final _formKey = GlobalKey<FormState>();
|
|
|
|
|
final _depositAmountFocus = FocusNode();
|
|
|
|
|
final _depositAddressFocus = FocusNode();
|
|
|
|
|
final _receiveAmountFocus = FocusNode();
|
|
|
|
|
final _receiveAddressFocus = FocusNode();
|
|
|
|
|
var _isReactionsSet = false;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
@ -52,7 +51,7 @@ class ExchangePage extends BasePage {
|
|
|
|
|
Color get titleColor => Colors.white;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
bool get resizeToAvoidBottomPadding => false;
|
|
|
|
|
bool get resizeToAvoidBottomInset => false;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
bool get extendBodyBehindAppBar => true;
|
|
|
|
@ -171,6 +170,7 @@ class ExchangePage extends BasePage {
|
|
|
|
|
.calculateDepositAllAmount()
|
|
|
|
|
: null,
|
|
|
|
|
amountFocusNode: _depositAmountFocus,
|
|
|
|
|
addressFocusNode: _depositAddressFocus,
|
|
|
|
|
key: depositKey,
|
|
|
|
|
title: S.of(context).you_will_send,
|
|
|
|
|
initialCurrency:
|
|
|
|
@ -223,6 +223,15 @@ class ExchangePage extends BasePage {
|
|
|
|
|
type: exchangeViewModel.wallet.type),
|
|
|
|
|
addressTextFieldValidator: AddressValidator(
|
|
|
|
|
type: exchangeViewModel.depositCurrency),
|
|
|
|
|
onPushPasteButton: (context) async {
|
|
|
|
|
final domain =
|
|
|
|
|
exchangeViewModel.depositAddress;
|
|
|
|
|
final ticker =
|
|
|
|
|
exchangeViewModel.depositCurrency.title;
|
|
|
|
|
exchangeViewModel.depositAddress =
|
|
|
|
|
await applyUnstoppableDomainAddress(
|
|
|
|
|
context, domain, ticker);
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
@ -232,6 +241,7 @@ class ExchangePage extends BasePage {
|
|
|
|
|
child: Observer(
|
|
|
|
|
builder: (_) => ExchangeCard(
|
|
|
|
|
amountFocusNode: _receiveAmountFocus,
|
|
|
|
|
addressFocusNode: _receiveAddressFocus,
|
|
|
|
|
key: receiveKey,
|
|
|
|
|
title: S.of(context).you_will_get,
|
|
|
|
|
initialCurrency:
|
|
|
|
@ -268,6 +278,15 @@ class ExchangePage extends BasePage {
|
|
|
|
|
AddressValidator(
|
|
|
|
|
type: exchangeViewModel
|
|
|
|
|
.receiveCurrency),
|
|
|
|
|
onPushPasteButton: (context) async {
|
|
|
|
|
final domain =
|
|
|
|
|
exchangeViewModel.receiveAddress;
|
|
|
|
|
final ticker =
|
|
|
|
|
exchangeViewModel.receiveCurrency.title;
|
|
|
|
|
exchangeViewModel.receiveAddress =
|
|
|
|
|
await applyUnstoppableDomainAddress(
|
|
|
|
|
context, domain, ticker);
|
|
|
|
|
},
|
|
|
|
|
)),
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
@ -371,7 +390,7 @@ class ExchangePage extends BasePage {
|
|
|
|
|
from: template.depositCurrency,
|
|
|
|
|
to: template.receiveCurrency,
|
|
|
|
|
onTap: () {
|
|
|
|
|
applyTemplate(
|
|
|
|
|
applyTemplate(context,
|
|
|
|
|
exchangeViewModel, template);
|
|
|
|
|
},
|
|
|
|
|
onRemove: () {
|
|
|
|
@ -472,8 +491,8 @@ class ExchangePage extends BasePage {
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void applyTemplate(
|
|
|
|
|
ExchangeViewModel exchangeViewModel, ExchangeTemplate template) {
|
|
|
|
|
void applyTemplate(BuildContext context,
|
|
|
|
|
ExchangeViewModel exchangeViewModel, ExchangeTemplate template) async {
|
|
|
|
|
exchangeViewModel.changeDepositCurrency(
|
|
|
|
|
currency: CryptoCurrency.fromString(template.depositCurrency));
|
|
|
|
|
exchangeViewModel.changeReceiveCurrency(
|
|
|
|
@ -491,6 +510,16 @@ class ExchangePage extends BasePage {
|
|
|
|
|
exchangeViewModel.receiveAddress = template.receiveAddress;
|
|
|
|
|
exchangeViewModel.isReceiveAmountEntered = false;
|
|
|
|
|
exchangeViewModel.isFixedRateMode = false;
|
|
|
|
|
|
|
|
|
|
var domain = template.depositAddress;
|
|
|
|
|
var ticker = template.depositCurrency;
|
|
|
|
|
exchangeViewModel.depositAddress =
|
|
|
|
|
await applyUnstoppableDomainAddress(context, domain, ticker);
|
|
|
|
|
|
|
|
|
|
domain = template.receiveAddress;
|
|
|
|
|
ticker = template.receiveCurrency;
|
|
|
|
|
exchangeViewModel.receiveAddress =
|
|
|
|
|
await applyUnstoppableDomainAddress(context, domain, ticker);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void _setReactions(
|
|
|
|
@ -656,6 +685,26 @@ class ExchangePage extends BasePage {
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
_depositAddressFocus.addListener(() async {
|
|
|
|
|
if (!_depositAddressFocus.hasFocus &&
|
|
|
|
|
depositAddressController.text.isNotEmpty) {
|
|
|
|
|
final domain = depositAddressController.text;
|
|
|
|
|
final ticker = exchangeViewModel.depositCurrency.title;
|
|
|
|
|
exchangeViewModel.depositAddress =
|
|
|
|
|
await applyUnstoppableDomainAddress(context, domain, ticker);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
_receiveAddressFocus.addListener(() async {
|
|
|
|
|
if (!_receiveAddressFocus.hasFocus &&
|
|
|
|
|
receiveAddressController.text.isNotEmpty) {
|
|
|
|
|
final domain = receiveAddressController.text;
|
|
|
|
|
final ticker = exchangeViewModel.receiveCurrency.title;
|
|
|
|
|
exchangeViewModel.receiveAddress =
|
|
|
|
|
await applyUnstoppableDomainAddress(context, domain, ticker);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
_receiveAmountFocus.addListener(() {
|
|
|
|
|
if (_receiveAmountFocus.hasFocus && !exchangeViewModel.isFixedRateMode) {
|
|
|
|
|
showPopUp<void>(
|
|
|
|
@ -726,4 +775,20 @@ class ExchangePage extends BasePage {
|
|
|
|
|
key.currentState.addressController.text = null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<String> applyUnstoppableDomainAddress(BuildContext context,
|
|
|
|
|
String domain, String ticker) async {
|
|
|
|
|
try {
|
|
|
|
|
final address =
|
|
|
|
|
await exchangeViewModel.getUnstoppableDomainAddress(domain, ticker);
|
|
|
|
|
if ((address != null)&&address.isNotEmpty) {
|
|
|
|
|
unstoppableDomainAddressAlert(context, domain);
|
|
|
|
|
return address;
|
|
|
|
|
}
|
|
|
|
|
} catch (e) {
|
|
|
|
|
print(e.toString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return domain;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|