mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-12-23 12:09:43 +00:00
Merge branch 'main' of https://github.com/cake-tech/cake_wallet into CW-20-rework-templates-on-exchange-screen
This commit is contained in:
commit
26f108ceb6
11 changed files with 98 additions and 45 deletions
|
@ -42,4 +42,11 @@
|
|||
android:name="flutterEmbedding"
|
||||
android:value="2" />
|
||||
</application>
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<data android:scheme="https" />
|
||||
</intent>
|
||||
</queries>
|
||||
</manifest>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import 'package:cw_core/transaction_direction.dart';
|
||||
//import 'package:cake_wallet/utils/mobx.dart';
|
||||
import 'package:cw_core/keyable.dart';
|
||||
|
||||
abstract class TransactionInfo extends Object with Keyable {
|
||||
|
@ -18,4 +17,6 @@ abstract class TransactionInfo extends Object with Keyable {
|
|||
|
||||
@override
|
||||
dynamic get keyIndex => id;
|
||||
|
||||
Map<String, dynamic> additionalInfo;
|
||||
}
|
|
@ -23,7 +23,13 @@ class MoneroTransactionInfo extends TransactionInfo {
|
|||
accountIndex = int.parse(map['accountIndex'] as String),
|
||||
addressIndex = map['addressIndex'] as int,
|
||||
key = getTxKey((map['hash'] ?? '') as String),
|
||||
fee = map['fee'] as int ?? 0;
|
||||
fee = map['fee'] as int ?? 0 {
|
||||
additionalInfo = {
|
||||
'key': key,
|
||||
'accountIndex': accountIndex,
|
||||
'addressIndex': addressIndex
|
||||
};
|
||||
}
|
||||
|
||||
MoneroTransactionInfo.fromRow(TransactionInfoRow row)
|
||||
: id = row.getHash(),
|
||||
|
@ -36,7 +42,13 @@ class MoneroTransactionInfo extends TransactionInfo {
|
|||
accountIndex = row.subaddrAccount,
|
||||
addressIndex = row.subaddrIndex,
|
||||
key = getTxKey(row.getHash()),
|
||||
fee = row.fee;
|
||||
fee = row.fee {
|
||||
additionalInfo = {
|
||||
'key': key,
|
||||
'accountIndex': accountIndex,
|
||||
'addressIndex': addressIndex
|
||||
};
|
||||
}
|
||||
|
||||
final String id;
|
||||
final int height;
|
||||
|
|
|
@ -288,4 +288,9 @@ class CWMonero extends Monero {
|
|||
WalletService createMoneroWalletService(Box<WalletInfo> walletInfoSource) {
|
||||
return MoneroWalletService(walletInfoSource);
|
||||
}
|
||||
|
||||
String getTransactionAddress(Object wallet, int accountIndex, int addressIndex) {
|
||||
final moneroWallet = wallet as MoneroWallet;
|
||||
return moneroWallet.getTransactionAddress(accountIndex, addressIndex);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,9 +3,13 @@ import 'package:cake_wallet/exchange/exchange_provider.dart';
|
|||
import 'package:cake_wallet/exchange/exchange_template.dart';
|
||||
import 'package:cake_wallet/src/screens/base_page.dart';
|
||||
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
|
||||
import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_mobx/flutter_mobx.dart';
|
||||
import 'package:keyboard_actions/keyboard_actions.dart';
|
||||
import 'package:keyboard_actions/keyboard_actions_config.dart';
|
||||
import 'package:keyboard_actions/keyboard_actions_item.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:cake_wallet/generated/i18n.dart';
|
||||
import 'package:cw_core/crypto_currency.dart';
|
||||
|
@ -28,6 +32,8 @@ class ExchangeTemplatePage extends BasePage {
|
|||
final depositKey = GlobalKey<ExchangeCardState>();
|
||||
final receiveKey = GlobalKey<ExchangeCardState>();
|
||||
final _formKey = GlobalKey<FormState>();
|
||||
final _depositAmountFocus = FocusNode();
|
||||
final _receiveAmountFocus = FocusNode();
|
||||
var _isReactionsSet = false;
|
||||
|
||||
@override
|
||||
|
@ -36,9 +42,6 @@ class ExchangeTemplatePage extends BasePage {
|
|||
@override
|
||||
Color get titleColor => Colors.white;
|
||||
|
||||
@override
|
||||
bool get resizeToAvoidBottomInset => false;
|
||||
|
||||
@override
|
||||
bool get extendBodyBehindAppBar => true;
|
||||
|
||||
|
@ -74,7 +77,22 @@ class ExchangeTemplatePage extends BasePage {
|
|||
WidgetsBinding.instance
|
||||
.addPostFrameCallback((_) => _setReactions(context, exchangeViewModel));
|
||||
|
||||
return Container(
|
||||
return KeyboardActions(
|
||||
disableScroll: true,
|
||||
config: KeyboardActionsConfig(
|
||||
keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
|
||||
keyboardBarColor:
|
||||
Theme.of(context).accentTextTheme.body2.backgroundColor,
|
||||
nextFocus: false,
|
||||
actions: [
|
||||
KeyboardActionsItem(
|
||||
focusNode: _depositAmountFocus,
|
||||
toolbarButtons: [(_) => KeyboardDoneButton()]),
|
||||
KeyboardActionsItem(
|
||||
focusNode: _receiveAmountFocus,
|
||||
toolbarButtons: [(_) => KeyboardDoneButton()])
|
||||
]),
|
||||
child: Container(
|
||||
color: Theme.of(context).backgroundColor,
|
||||
child: Form(
|
||||
key: _formKey,
|
||||
|
@ -121,6 +139,7 @@ class ExchangeTemplatePage extends BasePage {
|
|||
padding: EdgeInsets.fromLTRB(24, 90, 24, 32),
|
||||
child: Observer(
|
||||
builder: (_) => ExchangeCard(
|
||||
amountFocusNode: _depositAmountFocus,
|
||||
key: depositKey,
|
||||
title: S.of(context).you_will_send,
|
||||
initialCurrency:
|
||||
|
@ -160,6 +179,7 @@ class ExchangeTemplatePage extends BasePage {
|
|||
padding: EdgeInsets.only(top: 29, left: 24, right: 24),
|
||||
child: Observer(
|
||||
builder: (_) => ExchangeCard(
|
||||
amountFocusNode: _receiveAmountFocus,
|
||||
key: receiveKey,
|
||||
title: S.of(context).you_will_get,
|
||||
initialCurrency:
|
||||
|
@ -244,6 +264,7 @@ class ExchangeTemplatePage extends BasePage {
|
|||
textColor: Colors.white),
|
||||
]),
|
||||
))
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -197,7 +197,6 @@ class SendPage extends BasePage {
|
|||
itemCount: itemCount,
|
||||
itemBuilder: (context, index) {
|
||||
final template = templates[index];
|
||||
|
||||
return TemplateTile(
|
||||
key: UniqueKey(),
|
||||
to: template.name,
|
||||
|
|
|
@ -29,8 +29,11 @@ part 'send_view_model.g.dart';
|
|||
class SendViewModel = SendViewModelBase with _$SendViewModel;
|
||||
|
||||
abstract class SendViewModelBase with Store {
|
||||
SendViewModelBase(this._wallet, this._settingsStore,
|
||||
this.sendTemplateViewModel, this._fiatConversationStore,
|
||||
SendViewModelBase(
|
||||
this._wallet,
|
||||
this._settingsStore,
|
||||
this.sendTemplateViewModel,
|
||||
this._fiatConversationStore,
|
||||
this.transactionDescriptionBox)
|
||||
: state = InitialExecutionState() {
|
||||
final priority = _settingsStore.priority[_wallet.type];
|
||||
|
@ -127,15 +130,17 @@ abstract class SendViewModelBase with Store {
|
|||
bool get isReadyForSend => _wallet.syncStatus is SyncedSyncStatus;
|
||||
|
||||
@computed
|
||||
ObservableList<Template> get templates => sendTemplateViewModel.templates;
|
||||
List<Template> get templates => sendTemplateViewModel.templates
|
||||
.where((template) => _isEqualCurrency(template.cryptoCurrency))
|
||||
.toList();
|
||||
|
||||
@computed
|
||||
bool get isElectrumWallet => _wallet.type == WalletType.bitcoin || _wallet.type == WalletType.litecoin;
|
||||
|
||||
bool get hasYat
|
||||
=> outputs.any((out) => out.isParsedAddress
|
||||
&& out.parsedAddress.parseFrom == ParseFrom.yatRecord);
|
||||
bool get isElectrumWallet =>
|
||||
_wallet.type == WalletType.bitcoin || _wallet.type == WalletType.litecoin;
|
||||
|
||||
bool get hasYat => outputs.any((out) =>
|
||||
out.isParsedAddress &&
|
||||
out.parsedAddress.parseFrom == ParseFrom.yatRecord);
|
||||
|
||||
WalletType get walletType => _wallet.type;
|
||||
final WalletBase _wallet;
|
||||
|
@ -200,19 +205,16 @@ abstract class SendViewModelBase with Store {
|
|||
case WalletType.bitcoin:
|
||||
final priority = _settingsStore.priority[_wallet.type];
|
||||
|
||||
return bitcoin.createBitcoinTransactionCredentials(
|
||||
outputs, priority);
|
||||
return bitcoin.createBitcoinTransactionCredentials(outputs, priority);
|
||||
case WalletType.litecoin:
|
||||
final priority = _settingsStore.priority[_wallet.type];
|
||||
|
||||
return bitcoin.createBitcoinTransactionCredentials(
|
||||
outputs, priority);
|
||||
return bitcoin.createBitcoinTransactionCredentials(outputs, priority);
|
||||
case WalletType.monero:
|
||||
final priority = _settingsStore.priority[_wallet.type];
|
||||
|
||||
return monero.createMoneroTransactionCreationCredentials(
|
||||
outputs: outputs,
|
||||
priority: priority);
|
||||
outputs: outputs, priority: priority);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
@ -229,4 +231,7 @@ abstract class SendViewModelBase with Store {
|
|||
|
||||
return priority.toString();
|
||||
}
|
||||
|
||||
bool _isEqualCurrency(String currency) =>
|
||||
currency.toLowerCase() == _wallet.currency.title.toLowerCase();
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ import 'package:mobx/mobx.dart';
|
|||
import 'package:cake_wallet/store/settings_store.dart';
|
||||
import 'package:cake_wallet/generated/i18n.dart';
|
||||
import 'package:url_launcher/url_launcher.dart';
|
||||
import 'package:cake_wallet/monero/monero.dart';
|
||||
|
||||
part 'transaction_details_view_model.g.dart';
|
||||
|
||||
|
@ -31,6 +32,9 @@ abstract class TransactionDetailsViewModelBase with Store {
|
|||
|
||||
final dateFormat = DateFormatter.withCurrentLocal();
|
||||
final tx = transactionInfo;
|
||||
final key = tx.additionalInfo['key'] as String;
|
||||
final accountIndex = tx.additionalInfo['accountIndex'] as int;
|
||||
final addressIndex = tx.additionalInfo['addressIndex'] as int;
|
||||
|
||||
if (wallet.type == WalletType.monero) {
|
||||
final _items = [
|
||||
|
@ -46,30 +50,27 @@ abstract class TransactionDetailsViewModelBase with Store {
|
|||
value: tx.amountFormatted()),
|
||||
StandartListItem(
|
||||
title: S.current.transaction_details_fee, value: tx.feeFormatted()),
|
||||
if (key?.isNotEmpty ?? false)
|
||||
StandartListItem(title: S.current.transaction_key, value: key)
|
||||
];
|
||||
|
||||
//if (tx.key?.isNotEmpty ?? null) {
|
||||
// _items.add(
|
||||
// StandartListItem(title: S.current.transaction_key, value: tx.key));
|
||||
//}
|
||||
if (tx.direction == TransactionDirection.incoming &&
|
||||
accountIndex != null &&
|
||||
addressIndex != null) {
|
||||
try {
|
||||
final address = monero.getTransactionAddress(wallet, accountIndex, addressIndex);
|
||||
|
||||
//if (tx.direction == TransactionDirection.incoming) {
|
||||
// try {
|
||||
// final accountIndex = tx.accountIndex;
|
||||
// final addressIndex = tx.addressIndex;
|
||||
//final address = moneroUtils.getTransactionAddress(wallet, accountIndex, addressIndex);
|
||||
|
||||
//if (address?.isNotEmpty ?? false) {
|
||||
// isRecipientAddressShown = true;
|
||||
// _items.add(
|
||||
// StandartListItem(
|
||||
// title: S.current.transaction_details_recipient_address,
|
||||
// value: address));
|
||||
//}
|
||||
// } catch (e) {
|
||||
// print(e.toString());
|
||||
// }
|
||||
//}
|
||||
if (address?.isNotEmpty ?? false) {
|
||||
isRecipientAddressShown = true;
|
||||
_items.add(
|
||||
StandartListItem(
|
||||
title: S.current.transaction_details_recipient_address,
|
||||
value: address));
|
||||
}
|
||||
} catch (e) {
|
||||
print(e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
items.addAll(_items);
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ MONERO_COM_PACKAGE="com.monero.app"
|
|||
|
||||
CAKEWALLET_NAME="Cake Wallet"
|
||||
CAKEWALLET_VERSION="4.3.5"
|
||||
CAKEWALLET_BUILD_NUMBER=84
|
||||
CAKEWALLET_BUILD_NUMBER=85
|
||||
CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet"
|
||||
CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet"
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
|
|||
|
||||
CAKEWALLET_NAME="Cake Wallet"
|
||||
CAKEWALLET_VERSION="4.3.5"
|
||||
CAKEWALLET_BUILD_NUMBER=78
|
||||
CAKEWALLET_BUILD_NUMBER=80
|
||||
CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
|
||||
|
||||
if ! [[ " ${TYPES[*]} " =~ " ${APP_IOS_TYPE} " ]]; then
|
||||
|
|
|
@ -204,6 +204,8 @@ abstract class Monero {
|
|||
|
||||
MoneroWalletDetails getMoneroWalletDetails(Object wallet);
|
||||
|
||||
String getTransactionAddress(Object wallet, int accountIndex, int addressIndex);
|
||||
|
||||
int getHeigthByDate({DateTime date});
|
||||
TransactionPriority getDefaultTransactionPriority();
|
||||
TransactionPriority deserializeMoneroTransactionPriority({int raw});
|
||||
|
|
Loading…
Reference in a new issue