mirror of
https://github.com/cake-tech/cake_wallet.git
synced 2024-11-17 01:37:40 +00:00
CAKE-221 | added fiat amount to estimated fee; reworked confirm_sending_alert.dart; applied alert when transaction was committed
This commit is contained in:
parent
7f2b109381
commit
ac1709bffb
4 changed files with 215 additions and 144 deletions
|
@ -313,6 +313,7 @@ class SendPage extends BasePage {
|
||||||
child: Row(
|
child: Row(
|
||||||
mainAxisAlignment:
|
mainAxisAlignment:
|
||||||
MainAxisAlignment.spaceBetween,
|
MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Text(
|
Text(
|
||||||
S
|
S
|
||||||
|
@ -326,23 +327,50 @@ class SendPage extends BasePage {
|
||||||
color: Colors.white)),
|
color: Colors.white)),
|
||||||
Container(
|
Container(
|
||||||
child: Row(
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Text(
|
Column(
|
||||||
sendViewModel
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
sendViewModel
|
||||||
.estimatedFee
|
.estimatedFee
|
||||||
.toString() +
|
.toString() +
|
||||||
' ' +
|
' ' +
|
||||||
sendViewModel
|
sendViewModel
|
||||||
.currency.title,
|
.currency.title,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
fontWeight:
|
fontWeight:
|
||||||
FontWeight.w600,
|
FontWeight.w600,
|
||||||
//color: Theme.of(context).primaryTextTheme.display2.color,
|
//color: Theme.of(context).primaryTextTheme.display2.color,
|
||||||
color:
|
color:
|
||||||
Colors.white)),
|
Colors.white)),
|
||||||
|
Padding(
|
||||||
|
padding:
|
||||||
|
EdgeInsets.only(top: 5),
|
||||||
|
child: Text(
|
||||||
|
sendViewModel
|
||||||
|
.estimatedFeeFiatAmount
|
||||||
|
+ ' ' +
|
||||||
|
sendViewModel
|
||||||
|
.fiat.title,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 12,
|
||||||
|
fontWeight:
|
||||||
|
FontWeight.w600,
|
||||||
|
color: Theme
|
||||||
|
.of(context)
|
||||||
|
.primaryTextTheme
|
||||||
|
.headline
|
||||||
|
.decorationColor))
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
Padding(
|
Padding(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
|
top: 2,
|
||||||
left: 5),
|
left: 5),
|
||||||
child: Icon(
|
child: Icon(
|
||||||
Icons.arrow_forward_ios,
|
Icons.arrow_forward_ios,
|
||||||
|
@ -596,8 +624,14 @@ class SendPage extends BasePage {
|
||||||
amount: S.of(context).send_amount,
|
amount: S.of(context).send_amount,
|
||||||
amountValue:
|
amountValue:
|
||||||
sendViewModel.pendingTransaction.amountFormatted,
|
sendViewModel.pendingTransaction.amountFormatted,
|
||||||
|
fiatAmountValue: sendViewModel.pendingTransactionFiatAmount
|
||||||
|
+ ' ' + sendViewModel.fiat.title,
|
||||||
fee: S.of(context).send_fee,
|
fee: S.of(context).send_fee,
|
||||||
feeValue: sendViewModel.pendingTransaction.feeFormatted,
|
feeValue: sendViewModel.pendingTransaction.feeFormatted,
|
||||||
|
transactionPriority: sendViewModel
|
||||||
|
.transactionPriority.toString(),
|
||||||
|
recipientTitle: 'Recipient address',
|
||||||
|
recipientAddress: sendViewModel.address,
|
||||||
rightButtonText: S.of(context).ok,
|
rightButtonText: S.of(context).ok,
|
||||||
leftButtonText: S.of(context).cancel,
|
leftButtonText: S.of(context).cancel,
|
||||||
actionRightButton: () {
|
actionRightButton: () {
|
||||||
|
@ -614,96 +648,17 @@ class SendPage extends BasePage {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state is TransactionCommitted) {
|
if (state is TransactionCommitted) {
|
||||||
return Stack(
|
return AlertWithOneAction(
|
||||||
children: <Widget>[
|
alertTitle: '',
|
||||||
Container(
|
alertContent: S.of(context).send_success(
|
||||||
color: Theme.of(context).backgroundColor,
|
sendViewModel.currency
|
||||||
child: Center(
|
.toString()),
|
||||||
child: Image.asset(
|
buttonText: S.of(context).ok,
|
||||||
'assets/images/birthday_cake.png'),
|
buttonAction: () =>
|
||||||
),
|
Navigator.of(context).pop());
|
||||||
),
|
|
||||||
Center(
|
|
||||||
child: Padding(
|
|
||||||
padding: EdgeInsets.only(
|
|
||||||
top: 220, left: 24, right: 24),
|
|
||||||
child: Text(
|
|
||||||
S.of(context).send_success(
|
|
||||||
sendViewModel.currency
|
|
||||||
.toString()),
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 22,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
color: Theme.of(context)
|
|
||||||
.primaryTextTheme
|
|
||||||
.title
|
|
||||||
.color,
|
|
||||||
decoration: TextDecoration.none,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Positioned(
|
|
||||||
left: 24,
|
|
||||||
right: 24,
|
|
||||||
bottom: 24,
|
|
||||||
child: PrimaryButton(
|
|
||||||
onPressed: () =>
|
|
||||||
Navigator.of(context).pop(),
|
|
||||||
text: S.of(context).send_got_it,
|
|
||||||
color: Theme.of(context)
|
|
||||||
.accentTextTheme
|
|
||||||
.body2
|
|
||||||
.color,
|
|
||||||
textColor: Colors.white))
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state is TransactionCommitting) {
|
return Offstage();
|
||||||
return Stack(
|
|
||||||
children: <Widget>[
|
|
||||||
Container(
|
|
||||||
color: Theme.of(context).backgroundColor,
|
|
||||||
child: Center(
|
|
||||||
child: Image.asset(
|
|
||||||
'assets/images/birthday_cake.png'),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
BackdropFilter(
|
|
||||||
filter: ImageFilter.blur(
|
|
||||||
sigmaX: 3.0, sigmaY: 3.0),
|
|
||||||
child: Container(
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: Theme.of(context)
|
|
||||||
.backgroundColor
|
|
||||||
.withOpacity(0.25)),
|
|
||||||
child: Center(
|
|
||||||
child: Padding(
|
|
||||||
padding: EdgeInsets.only(top: 220),
|
|
||||||
child: Text(
|
|
||||||
S.of(context).send_sending,
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 22,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
color: Theme.of(context)
|
|
||||||
.primaryTextTheme
|
|
||||||
.title
|
|
||||||
.color,
|
|
||||||
decoration: TextDecoration.none,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Container();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:cake_wallet/palette.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:cake_wallet/src/widgets/base_alert_dialog.dart';
|
import 'package:cake_wallet/src/widgets/base_alert_dialog.dart';
|
||||||
|
|
||||||
|
@ -6,8 +7,12 @@ class ConfirmSendingAlert extends BaseAlertDialog {
|
||||||
@required this.alertTitle,
|
@required this.alertTitle,
|
||||||
@required this.amount,
|
@required this.amount,
|
||||||
@required this.amountValue,
|
@required this.amountValue,
|
||||||
|
@required this.fiatAmountValue,
|
||||||
@required this.fee,
|
@required this.fee,
|
||||||
@required this.feeValue,
|
@required this.feeValue,
|
||||||
|
@required this.transactionPriority,
|
||||||
|
@required this.recipientTitle,
|
||||||
|
@required this.recipientAddress,
|
||||||
@required this.leftButtonText,
|
@required this.leftButtonText,
|
||||||
@required this.rightButtonText,
|
@required this.rightButtonText,
|
||||||
@required this.actionLeftButton,
|
@required this.actionLeftButton,
|
||||||
|
@ -18,8 +23,12 @@ class ConfirmSendingAlert extends BaseAlertDialog {
|
||||||
final String alertTitle;
|
final String alertTitle;
|
||||||
final String amount;
|
final String amount;
|
||||||
final String amountValue;
|
final String amountValue;
|
||||||
|
final String fiatAmountValue;
|
||||||
final String fee;
|
final String fee;
|
||||||
final String feeValue;
|
final String feeValue;
|
||||||
|
final String transactionPriority;
|
||||||
|
final String recipientTitle;
|
||||||
|
final String recipientAddress;
|
||||||
final String leftButtonText;
|
final String leftButtonText;
|
||||||
final String rightButtonText;
|
final String rightButtonText;
|
||||||
final VoidCallback actionLeftButton;
|
final VoidCallback actionLeftButton;
|
||||||
|
@ -29,74 +38,145 @@ class ConfirmSendingAlert extends BaseAlertDialog {
|
||||||
@override
|
@override
|
||||||
String get titleText => alertTitle;
|
String get titleText => alertTitle;
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool get isDividerExists => true;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get leftActionButtonText => leftButtonText;
|
String get leftActionButtonText => leftButtonText;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String get rightActionButtonText => rightButtonText;
|
String get rightActionButtonText => rightButtonText;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
VoidCallback get actionLeft => actionLeftButton;
|
VoidCallback get actionLeft => actionLeftButton;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
VoidCallback get actionRight => actionRightButton;
|
VoidCallback get actionRight => actionRightButton;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
bool get barrierDismissible => alertBarrierDismissible;
|
bool get barrierDismissible => alertBarrierDismissible;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget content(BuildContext context) {
|
Widget content(BuildContext context) {
|
||||||
return Column(
|
return Column(
|
||||||
mainAxisSize: MainAxisSize.max,
|
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Row(
|
Row(
|
||||||
mainAxisSize: MainAxisSize.max,
|
mainAxisSize: MainAxisSize.max,
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Text(
|
Text(
|
||||||
amount,
|
amount,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
fontWeight: FontWeight.w600,
|
fontWeight: FontWeight.normal,
|
||||||
fontFamily: 'Lato',
|
fontFamily: 'Lato',
|
||||||
color: Theme.of(context).primaryTextTheme.title.color,
|
color: Theme.of(context).primaryTextTheme.title.color,
|
||||||
decoration: TextDecoration.none,
|
decoration: TextDecoration.none,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Text(
|
Column(
|
||||||
amountValue,
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
style: TextStyle(
|
children: [
|
||||||
fontSize: 16,
|
Text(
|
||||||
fontWeight: FontWeight.w600,
|
amountValue,
|
||||||
fontFamily: 'Lato',
|
style: TextStyle(
|
||||||
color: Theme.of(context).primaryTextTheme.title.color,
|
fontSize: 18,
|
||||||
decoration: TextDecoration.none,
|
fontWeight: FontWeight.w600,
|
||||||
),
|
fontFamily: 'Lato',
|
||||||
|
color: Theme.of(context).primaryTextTheme.title.color,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
fiatAmountValue,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 12,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
fontFamily: 'Lato',
|
||||||
|
color: PaletteDark.pigeonBlue,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
Row(
|
Padding(
|
||||||
mainAxisSize: MainAxisSize.max,
|
padding: EdgeInsets.only(top: 16),
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
child: Row(
|
||||||
children: <Widget>[
|
mainAxisSize: MainAxisSize.max,
|
||||||
Text(
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
fee,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
style: TextStyle(
|
children: <Widget>[
|
||||||
fontSize: 16,
|
Text(
|
||||||
fontWeight: FontWeight.w600,
|
fee,
|
||||||
fontFamily: 'Lato',
|
style: TextStyle(
|
||||||
color: Theme.of(context).primaryTextTheme.title.color,
|
fontSize: 16,
|
||||||
decoration: TextDecoration.none,
|
fontWeight: FontWeight.normal,
|
||||||
|
fontFamily: 'Lato',
|
||||||
|
color: Theme.of(context).primaryTextTheme.title.color,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
Column(
|
||||||
Text(
|
crossAxisAlignment: CrossAxisAlignment.end,
|
||||||
feeValue,
|
children: [
|
||||||
style: TextStyle(
|
Text(
|
||||||
fontSize: 16,
|
feeValue,
|
||||||
fontWeight: FontWeight.w600,
|
style: TextStyle(
|
||||||
fontFamily: 'Lato',
|
fontSize: 18,
|
||||||
color: Theme.of(context).primaryTextTheme.title.color,
|
fontWeight: FontWeight.w600,
|
||||||
decoration: TextDecoration.none,
|
fontFamily: 'Lato',
|
||||||
|
color: Theme.of(context).primaryTextTheme.title.color,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
transactionPriority,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 12,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
fontFamily: 'Lato',
|
||||||
|
color: PaletteDark.pigeonBlue,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.fromLTRB(8, 16, 8, 0),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
recipientTitle,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.normal,
|
||||||
|
fontFamily: 'Lato',
|
||||||
|
color: Theme.of(context).primaryTextTheme.title.color,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
)
|
Padding(
|
||||||
],
|
padding: EdgeInsets.only(top: 8),
|
||||||
|
child: Text(
|
||||||
|
recipientAddress,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 12,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
fontFamily: 'Lato',
|
||||||
|
color: PaletteDark.pigeonBlue,
|
||||||
|
decoration: TextDecoration.none,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
|
@ -7,6 +7,7 @@ class BaseAlertDialog extends StatelessWidget {
|
||||||
String get contentText => '';
|
String get contentText => '';
|
||||||
String get leftActionButtonText => '';
|
String get leftActionButtonText => '';
|
||||||
String get rightActionButtonText => '';
|
String get rightActionButtonText => '';
|
||||||
|
bool get isDividerExists => false;
|
||||||
VoidCallback get actionLeft => () {};
|
VoidCallback get actionLeft => () {};
|
||||||
VoidCallback get actionRight => () {};
|
VoidCallback get actionRight => () {};
|
||||||
bool get barrierDismissible => true;
|
bool get barrierDismissible => true;
|
||||||
|
@ -127,18 +128,24 @@ class BaseAlertDialog extends StatelessWidget {
|
||||||
child: Column(
|
child: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
Container(
|
Column(
|
||||||
padding: EdgeInsets.fromLTRB(24, 32, 24, 32),
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
child: Column(
|
children: <Widget>[
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
Padding(
|
||||||
children: <Widget>[
|
padding: EdgeInsets.fromLTRB(24, 32, 24, 16),
|
||||||
title(context),
|
child: title(context),
|
||||||
Padding(
|
),
|
||||||
padding: EdgeInsets.only(top: 8),
|
isDividerExists
|
||||||
child: content(context),
|
? Container(
|
||||||
)
|
height: 1,
|
||||||
],
|
color: Theme.of(context).dividerColor,
|
||||||
),
|
)
|
||||||
|
: Offstage(),
|
||||||
|
Padding(
|
||||||
|
padding: EdgeInsets.fromLTRB(24, 16, 24, 32),
|
||||||
|
child: content(context),
|
||||||
|
)
|
||||||
|
],
|
||||||
),
|
),
|
||||||
Container(
|
Container(
|
||||||
height: 1,
|
height: 1,
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import 'package:cake_wallet/entities/balance_display_mode.dart';
|
import 'package:cake_wallet/entities/balance_display_mode.dart';
|
||||||
|
import 'package:cake_wallet/entities/calculate_fiat_amount_raw.dart';
|
||||||
import 'package:cake_wallet/entities/transaction_description.dart';
|
import 'package:cake_wallet/entities/transaction_description.dart';
|
||||||
import 'package:hive/hive.dart';
|
import 'package:hive/hive.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
|
@ -60,6 +61,34 @@ abstract class SendViewModelBase with Store {
|
||||||
double get estimatedFee =>
|
double get estimatedFee =>
|
||||||
_wallet.calculateEstimatedFee(_settingsStore.transactionPriority);
|
_wallet.calculateEstimatedFee(_settingsStore.transactionPriority);
|
||||||
|
|
||||||
|
@computed
|
||||||
|
String get estimatedFeeFiatAmount {
|
||||||
|
try {
|
||||||
|
final fiat = calculateFiatAmountRaw(
|
||||||
|
price: _fiatConversationStore.prices[_wallet.currency],
|
||||||
|
cryptoAmount: estimatedFee);
|
||||||
|
return fiat;
|
||||||
|
} catch (_) {
|
||||||
|
return '0.00';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@computed
|
||||||
|
String get pendingTransactionFiatAmount {
|
||||||
|
try {
|
||||||
|
if (pendingTransaction != null) {
|
||||||
|
final fiat = calculateFiatAmount(
|
||||||
|
price: _fiatConversationStore.prices[_wallet.currency],
|
||||||
|
cryptoAmount: pendingTransaction.amountFormatted);
|
||||||
|
return fiat;
|
||||||
|
} else {
|
||||||
|
return '0.00';
|
||||||
|
}
|
||||||
|
} catch (_) {
|
||||||
|
return '0.00';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FiatCurrency get fiat => _settingsStore.fiatCurrency;
|
FiatCurrency get fiat => _settingsStore.fiatCurrency;
|
||||||
|
|
||||||
TransactionPriority get transactionPriority =>
|
TransactionPriority get transactionPriority =>
|
||||||
|
|
Loading…
Reference in a new issue