CWA-212 | applied new design to exchange_confirm_page and exchange_trade_page; added provider icons to exchange_template_page; added new alert dialogs to exchange_page and exchange_trade_page

This commit is contained in:
Oleksandr Sobol 2020-05-15 20:38:08 +03:00
parent b1f8658eec
commit 5304931ad9
18 changed files with 421 additions and 395 deletions

View file

@ -237,6 +237,7 @@ class S implements WidgetsLocalizations {
String get trade_details_state => "State"; String get trade_details_state => "State";
String get trade_details_title => "Trade Details"; String get trade_details_title => "Trade Details";
String get trade_history_title => "Trade history"; String get trade_history_title => "Trade history";
String get trade_id => "Trade ID:";
String get trade_not_created => "Trade not created."; String get trade_not_created => "Trade not created.";
String get trade_not_found => "Trade not found."; String get trade_not_found => "Trade not found.";
String get trade_state_btc_sent => "Btc sent"; String get trade_state_btc_sent => "Btc sent";
@ -313,7 +314,6 @@ class S implements WidgetsLocalizations {
String time(String minutes, String seconds) => "${minutes}m ${seconds}s"; String time(String minutes, String seconds) => "${minutes}m ${seconds}s";
String trade_details_copied(String title) => "${title} copied to Clipboard"; String trade_details_copied(String title) => "${title} copied to Clipboard";
String trade_for_not_created(String title) => "Trade for ${title} is not created."; String trade_for_not_created(String title) => "Trade for ${title} is not created.";
String trade_id(String id) => "Trade ID:\n${id}";
String trade_id_not_found(String tradeId, String title) => "Trade ${tradeId} of ${title} not found."; String trade_id_not_found(String tradeId, String title) => "Trade ${tradeId} of ${title} not found.";
String trade_is_powered_by(String provider) => "This trade is powered by ${provider}"; String trade_is_powered_by(String provider) => "This trade is powered by ${provider}";
String transaction_details_copied(String title) => "${title} copied to Clipboard"; String transaction_details_copied(String title) => "${title} copied to Clipboard";
@ -357,6 +357,8 @@ class $de extends S {
@override @override
String get you_will_get => "Sie erhalten"; String get you_will_get => "Sie erhalten";
@override @override
String get trade_id => "Handel-ID:";
@override
String get restore_description_from_seed => "Stellen Sie Ihr Wallet aus den 25 Wörtern wieder her oder 13-Wort-Kombinationscode"; String get restore_description_from_seed => "Stellen Sie Ihr Wallet aus den 25 Wörtern wieder her oder 13-Wort-Kombinationscode";
@override @override
String get trade_state_underpaid => "Unterbezahlt"; String get trade_state_underpaid => "Unterbezahlt";
@ -879,8 +881,6 @@ class $de extends S {
@override @override
String change_current_node(String node) => "Möchten Sie den aktuellen Knoten wirklich auf ändern? ${node}?"; String change_current_node(String node) => "Möchten Sie den aktuellen Knoten wirklich auf ändern? ${node}?";
@override @override
String trade_id(String id) => "Handel-ID:\n${id}";
@override
String wallet_list_loading_wallet(String wallet_name) => "Wird geladen ${wallet_name} Wallet"; String wallet_list_loading_wallet(String wallet_name) => "Wird geladen ${wallet_name} Wallet";
@override @override
String version(String currentVersion) => "Ausführung ${currentVersion}"; String version(String currentVersion) => "Ausführung ${currentVersion}";
@ -967,6 +967,8 @@ class $hi extends S {
@override @override
String get you_will_get => "आपको मिल जायेगा"; String get you_will_get => "आपको मिल जायेगा";
@override @override
String get trade_id => "व्यापार ID:";
@override
String get restore_description_from_seed => "या तो 25 शब्द से अपने वॉलेट को पुनर्स्थापित करें या 13 शब्द संयोजन कोड"; String get restore_description_from_seed => "या तो 25 शब्द से अपने वॉलेट को पुनर्स्थापित करें या 13 शब्द संयोजन कोड";
@override @override
String get trade_state_underpaid => "के तहत भुगतान किया"; String get trade_state_underpaid => "के तहत भुगतान किया";
@ -1489,8 +1491,6 @@ class $hi extends S {
@override @override
String change_current_node(String node) => "क्या आप वर्तमान नोड को बदलना सुनिश्चित करते हैं ${node}?"; String change_current_node(String node) => "क्या आप वर्तमान नोड को बदलना सुनिश्चित करते हैं ${node}?";
@override @override
String trade_id(String id) => "व्यापार ID:\n${id}";
@override
String wallet_list_loading_wallet(String wallet_name) => "लोड हो रहा है ${wallet_name} बटुआ"; String wallet_list_loading_wallet(String wallet_name) => "लोड हो रहा है ${wallet_name} बटुआ";
@override @override
String version(String currentVersion) => "संस्करण ${currentVersion}"; String version(String currentVersion) => "संस्करण ${currentVersion}";
@ -1577,6 +1577,8 @@ class $ru extends S {
@override @override
String get you_will_get => "Вы получите"; String get you_will_get => "Вы получите";
@override @override
String get trade_id => "ID сделки:";
@override
String get restore_description_from_seed => "Вы можете восстановить кошелёк используя 25-ти значную мнемоническую фразу"; String get restore_description_from_seed => "Вы можете восстановить кошелёк используя 25-ти значную мнемоническую фразу";
@override @override
String get trade_state_underpaid => "Недоплаченная"; String get trade_state_underpaid => "Недоплаченная";
@ -2099,8 +2101,6 @@ class $ru extends S {
@override @override
String change_current_node(String node) => "Вы уверены, что хотите изменить текущую ноду на ${node}?"; String change_current_node(String node) => "Вы уверены, что хотите изменить текущую ноду на ${node}?";
@override @override
String trade_id(String id) => "ID сделки:\n${id}";
@override
String wallet_list_loading_wallet(String wallet_name) => "Загрузка ${wallet_name} кошелька"; String wallet_list_loading_wallet(String wallet_name) => "Загрузка ${wallet_name} кошелька";
@override @override
String version(String currentVersion) => "Версия ${currentVersion}"; String version(String currentVersion) => "Версия ${currentVersion}";
@ -2187,6 +2187,8 @@ class $ko extends S {
@override @override
String get you_will_get => "당신은 얻을 것이다"; String get you_will_get => "당신은 얻을 것이다";
@override @override
String get trade_id => "무역 ID:";
@override
String get restore_description_from_seed => "25 단어 또는 13 단어 조합 코드에서 지갑을 복원하십시오."; String get restore_description_from_seed => "25 단어 또는 13 단어 조합 코드에서 지갑을 복원하십시오.";
@override @override
String get trade_state_underpaid => "미지급"; String get trade_state_underpaid => "미지급";
@ -2709,8 +2711,6 @@ class $ko extends S {
@override @override
String change_current_node(String node) => "현재 노드를 다음으로 변경 하시겠습니까 ${node}?"; String change_current_node(String node) => "현재 노드를 다음으로 변경 하시겠습니까 ${node}?";
@override @override
String trade_id(String id) => "무역 ID:\n${id}";
@override
String wallet_list_loading_wallet(String wallet_name) => "로딩 ${wallet_name} 지갑"; String wallet_list_loading_wallet(String wallet_name) => "로딩 ${wallet_name} 지갑";
@override @override
String version(String currentVersion) => "버전 ${currentVersion}"; String version(String currentVersion) => "버전 ${currentVersion}";
@ -2797,6 +2797,8 @@ class $pt extends S {
@override @override
String get you_will_get => "Você receberá"; String get you_will_get => "Você receberá";
@override @override
String get trade_id => "ID da troca:";
@override
String get restore_description_from_seed => "Restaure sua carteira a partir de semente com 25 palavras ou 13 palavras"; String get restore_description_from_seed => "Restaure sua carteira a partir de semente com 25 palavras ou 13 palavras";
@override @override
String get trade_state_underpaid => "Parcialmente paga"; String get trade_state_underpaid => "Parcialmente paga";
@ -3319,8 +3321,6 @@ class $pt extends S {
@override @override
String change_current_node(String node) => "Você realmente deseja alterar o nó atual para ${node}?"; String change_current_node(String node) => "Você realmente deseja alterar o nó atual para ${node}?";
@override @override
String trade_id(String id) => "ID da troca:\n${id}";
@override
String wallet_list_loading_wallet(String wallet_name) => "Abrindo a carteira ${wallet_name}"; String wallet_list_loading_wallet(String wallet_name) => "Abrindo a carteira ${wallet_name}";
@override @override
String version(String currentVersion) => "Versão ${currentVersion}"; String version(String currentVersion) => "Versão ${currentVersion}";
@ -3407,6 +3407,8 @@ class $uk extends S {
@override @override
String get you_will_get => "Ви отримаєте"; String get you_will_get => "Ви отримаєте";
@override @override
String get trade_id => "ID операції:";
@override
String get restore_description_from_seed => "Ви можете відновити гаманець використовуючи 25-ти слівну мнемонічну фразу"; String get restore_description_from_seed => "Ви можете відновити гаманець використовуючи 25-ти слівну мнемонічну фразу";
@override @override
String get trade_state_underpaid => "Недоплачена"; String get trade_state_underpaid => "Недоплачена";
@ -3929,8 +3931,6 @@ class $uk extends S {
@override @override
String change_current_node(String node) => "Ви впевнені, що хочете змінити поточний вузол на ${node}?"; String change_current_node(String node) => "Ви впевнені, що хочете змінити поточний вузол на ${node}?";
@override @override
String trade_id(String id) => "ID операції:\n${id}";
@override
String wallet_list_loading_wallet(String wallet_name) => "Завантаження ${wallet_name} гаманця"; String wallet_list_loading_wallet(String wallet_name) => "Завантаження ${wallet_name} гаманця";
@override @override
String version(String currentVersion) => "Версія ${currentVersion}"; String version(String currentVersion) => "Версія ${currentVersion}";
@ -4017,6 +4017,8 @@ class $ja extends S {
@override @override
String get you_will_get => "あなたが取得します"; String get you_will_get => "あなたが取得します";
@override @override
String get trade_id => "取引ID:";
@override
String get restore_description_from_seed => "25ワードからウォレットを復元しますまたは13ワードの組み合わせコード"; String get restore_description_from_seed => "25ワードからウォレットを復元しますまたは13ワードの組み合わせコード";
@override @override
String get trade_state_underpaid => "支払不足"; String get trade_state_underpaid => "支払不足";
@ -4539,8 +4541,6 @@ class $ja extends S {
@override @override
String change_current_node(String node) => "現在のノードを変更してよろしいですか ${node}?"; String change_current_node(String node) => "現在のノードを変更してよろしいですか ${node}?";
@override @override
String trade_id(String id) => "取引ID:\n${id}";
@override
String wallet_list_loading_wallet(String wallet_name) => "読み込み中 ${wallet_name} 財布"; String wallet_list_loading_wallet(String wallet_name) => "読み込み中 ${wallet_name} 財布";
@override @override
String version(String currentVersion) => "バージョン ${currentVersion}"; String version(String currentVersion) => "バージョン ${currentVersion}";
@ -4631,6 +4631,8 @@ class $pl extends S {
@override @override
String get you_will_get => "Dostaniesz"; String get you_will_get => "Dostaniesz";
@override @override
String get trade_id => "Identyfikator handlu:";
@override
String get restore_description_from_seed => "Przywróć swój portfel z 25 słów lub 13-słowny kod kombinacji"; String get restore_description_from_seed => "Przywróć swój portfel z 25 słów lub 13-słowny kod kombinacji";
@override @override
String get trade_state_underpaid => "Niedopłacone"; String get trade_state_underpaid => "Niedopłacone";
@ -5153,8 +5155,6 @@ class $pl extends S {
@override @override
String change_current_node(String node) => "Czy na pewno chcesz przywrócić ustawienia domyślne? ${node}?"; String change_current_node(String node) => "Czy na pewno chcesz przywrócić ustawienia domyślne? ${node}?";
@override @override
String trade_id(String id) => "Identyfikator handlu:\n${id}";
@override
String wallet_list_loading_wallet(String wallet_name) => "Ładuję ${wallet_name} portfel"; String wallet_list_loading_wallet(String wallet_name) => "Ładuję ${wallet_name} portfel";
@override @override
String version(String currentVersion) => "Wersja ${currentVersion}"; String version(String currentVersion) => "Wersja ${currentVersion}";
@ -5241,6 +5241,8 @@ class $es extends S {
@override @override
String get you_will_get => "Conseguirás"; String get you_will_get => "Conseguirás";
@override @override
String get trade_id => "Comercial ID:";
@override
String get restore_description_from_seed => "Restaure su billetera desde el código de combinación de 25 palabras i de 13 palabras"; String get restore_description_from_seed => "Restaure su billetera desde el código de combinación de 25 palabras i de 13 palabras";
@override @override
String get trade_state_underpaid => "Poco pagado"; String get trade_state_underpaid => "Poco pagado";
@ -5763,8 +5765,6 @@ class $es extends S {
@override @override
String change_current_node(String node) => "¿Está seguro de cambiar el nodo actual a ${node}?"; String change_current_node(String node) => "¿Está seguro de cambiar el nodo actual a ${node}?";
@override @override
String trade_id(String id) => "Comercial ID:\n${id}";
@override
String wallet_list_loading_wallet(String wallet_name) => "Billetera ${wallet_name} de carga"; String wallet_list_loading_wallet(String wallet_name) => "Billetera ${wallet_name} de carga";
@override @override
String version(String currentVersion) => "Versión ${currentVersion}"; String version(String currentVersion) => "Versión ${currentVersion}";
@ -5851,6 +5851,8 @@ class $nl extends S {
@override @override
String get you_will_get => "Je zult krijgen"; String get you_will_get => "Je zult krijgen";
@override @override
String get trade_id => "Trade ID:";
@override
String get restore_description_from_seed => "Herstel uw portemonnee van het 25 woord of 13 woord combinatiecode"; String get restore_description_from_seed => "Herstel uw portemonnee van het 25 woord of 13 woord combinatiecode";
@override @override
String get trade_state_underpaid => "Slecht betaald"; String get trade_state_underpaid => "Slecht betaald";
@ -6373,8 +6375,6 @@ class $nl extends S {
@override @override
String change_current_node(String node) => "Weet u zeker dat u het huidige knooppunt wilt wijzigen in ${node}?"; String change_current_node(String node) => "Weet u zeker dat u het huidige knooppunt wilt wijzigen in ${node}?";
@override @override
String trade_id(String id) => "Trade ID:\n${id}";
@override
String wallet_list_loading_wallet(String wallet_name) => "Bezig met laden ${wallet_name} portemonnee"; String wallet_list_loading_wallet(String wallet_name) => "Bezig met laden ${wallet_name} portemonnee";
@override @override
String version(String currentVersion) => "Versie ${currentVersion}"; String version(String currentVersion) => "Versie ${currentVersion}";
@ -6461,6 +6461,8 @@ class $zh extends S {
@override @override
String get you_will_get => "你会得到"; String get you_will_get => "你会得到";
@override @override
String get trade_id => "贸易编号:";
@override
String get restore_description_from_seed => "从25个字中恢复您的钱包或13个字的组合码"; String get restore_description_from_seed => "从25个字中恢复您的钱包或13个字的组合码";
@override @override
String get trade_state_underpaid => "支付不足"; String get trade_state_underpaid => "支付不足";
@ -6983,8 +6985,6 @@ class $zh extends S {
@override @override
String change_current_node(String node) => "您确定将当前节点更改为 ${node}?"; String change_current_node(String node) => "您确定将当前节点更改为 ${node}?";
@override @override
String trade_id(String id) => "贸易编号:\n${id}";
@override
String wallet_list_loading_wallet(String wallet_name) => "载入中 ${wallet_name} 钱包"; String wallet_list_loading_wallet(String wallet_name) => "载入中 ${wallet_name} 钱包";
@override @override
String version(String currentVersion) => "${currentVersion}"; String version(String currentVersion) => "${currentVersion}";

View file

@ -25,6 +25,7 @@ import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
import 'package:cake_wallet/src/widgets/top_panel.dart'; import 'package:cake_wallet/src/widgets/top_panel.dart';
import 'package:cake_wallet/src/screens/exchange/widgets/provider_picker.dart'; import 'package:cake_wallet/src/screens/exchange/widgets/provider_picker.dart';
import 'package:cake_wallet/src/stores/exchange_template/exchange_template_store.dart'; import 'package:cake_wallet/src/stores/exchange_template/exchange_template_store.dart';
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
class ExchangePage extends BasePage { class ExchangePage extends BasePage {
@override @override
@ -482,14 +483,11 @@ class ExchangeFormState extends State<ExchangeForm> {
showDialog<void>( showDialog<void>(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
return AlertDialog( return AlertWithOneAction(
title: Text(S.of(context).error), alertTitle: S.of(context).error,
content: Text(state.error), alertContent: state.error,
actions: <Widget>[ buttonText: S.of(context).ok,
FlatButton( buttonAction: () => Navigator.of(context).pop()
child: Text(S.of(context).ok),
onPressed: () => Navigator.of(context).pop())
],
); );
}); });
}); });

View file

@ -1,4 +1,5 @@
import 'dart:ui'; import 'dart:ui';
import 'package:cake_wallet/src/domain/exchange/exchange_provider_description.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:flutter_mobx/flutter_mobx.dart';
@ -75,10 +76,26 @@ class ExchangeTemplatePage extends BasePage {
final exchangeStore = Provider.of<ExchangeStore>(context); final exchangeStore = Provider.of<ExchangeStore>(context);
final items = exchangeStore.providersForCurrentPair(); final items = exchangeStore.providersForCurrentPair();
final selectedItem = items.indexOf(exchangeStore.provider); final selectedItem = items.indexOf(exchangeStore.provider);
final images = List<Image>();
for (ExchangeProvider provider in items) {
switch (provider.description) {
case ExchangeProviderDescription.xmrto:
images.add(Image.asset('assets/images/xmr_btc.png'));
break;
case ExchangeProviderDescription.changeNow:
images.add(Image.asset('assets/images/change_now.png'));
break;
case ExchangeProviderDescription.morphToken:
images.add(Image.asset('assets/images/morph_icon.png'));
break;
}
}
showDialog<void>( showDialog<void>(
builder: (_) => ProviderPicker( builder: (_) => ProviderPicker(
items: items, items: items,
images: images,
selectedAtIndex: selectedItem, selectedAtIndex: selectedItem,
title: S.of(context).change_exchange_provider, title: S.of(context).change_exchange_provider,
onItemSelected: (ExchangeProvider provider) => onItemSelected: (ExchangeProvider provider) =>

View file

@ -6,54 +6,56 @@ import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/domain/exchange/trade.dart'; import 'package:cake_wallet/src/domain/exchange/trade.dart';
import 'package:cake_wallet/palette.dart';
class ExchangeConfirmPage extends BasePage { class ExchangeConfirmPage extends BasePage {
ExchangeConfirmPage({@required this.trade}); ExchangeConfirmPage({@required this.trade});
final Trade trade; final Trade trade;
final copyImage = Image.asset('assets/images/copy_content.png', color: Colors.white);
@override @override
String get title => S.current.copy_id; String get title => S.current.copy_id;
@override
Color get backgroundColor => PaletteDark.historyPanel;
@override @override
Widget body(BuildContext context) { Widget body(BuildContext context) {
return Column( return Container(
children: <Widget>[ color: PaletteDark.historyPanel,
Expanded( padding: EdgeInsets.all(24),
child: Container( child: Column(
padding: EdgeInsets.only(left: 80.0, right: 80.0), children: <Widget>[
child: Center( Expanded(
child: Column( child: Center(
mainAxisSize: MainAxisSize.min, child: Column(
children: <Widget>[ mainAxisSize: MainAxisSize.min,
Text( children: <Widget>[
S.of(context).exchange_result_write_down_trade_id, Text(
S.of(context).exchange_result_write_down_trade_id,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 18.0,
fontWeight: FontWeight.w600,
color: Colors.white),
),
Padding(
padding: EdgeInsets.only(top: 60),
child: Text(
S.of(context).trade_id,
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: TextStyle( style: TextStyle(
fontSize: 18.0, fontSize: 16.0,
color: Theme.of(context) fontWeight: FontWeight.w600,
.primaryTextTheme color: Colors.white),
.button
.color),
), ),
SizedBox( ),
height: 70.0, Padding(
), padding: EdgeInsets.only(top: 24),
Text( child: Builder(
S.of(context).trade_id(trade.id), builder: (context) => GestureDetector(
textAlign: TextAlign.center, onTap: () {
style: TextStyle(
fontSize: 18.0,
color: Theme.of(context)
.primaryTextTheme
.button
.color),
),
SizedBox(
height: 70.0,
),
PrimaryButton(
onPressed: () {
Clipboard.setData(ClipboardData(text: trade.id)); Clipboard.setData(ClipboardData(text: trade.id));
Scaffold.of(context).showSnackBar(SnackBar( Scaffold.of(context).showSnackBar(SnackBar(
content: Text( content: Text(
@ -62,31 +64,52 @@ class ExchangeConfirmPage extends BasePage {
style: TextStyle(color: Colors.white), style: TextStyle(color: Colors.white),
), ),
backgroundColor: Colors.green, backgroundColor: Colors.green,
duration: Duration(milliseconds: 1500),
)); ));
}, },
text: S.of(context).copy_id, child: Container(
color: Theme.of(context) height: 60,
.accentTextTheme padding: EdgeInsets.only(left: 24, right: 24),
.caption decoration: BoxDecoration(
.backgroundColor, borderRadius: BorderRadius.all(Radius.circular(30)),
textColor: Theme.of(context) color: PaletteDark.menuList
.primaryTextTheme ),
.button child: Row(
.color) mainAxisSize: MainAxisSize.max,
], children: <Widget>[
), Expanded(
))), child: Text(
Container( trade.id,
padding: EdgeInsets.only(left: 20.0, right: 20.0, bottom: 40.0), maxLines: 1,
child: PrimaryButton( overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w600,
color: Colors.white
),
),
),
Padding(
padding: EdgeInsets.only(left: 12),
child: copyImage,
)
],
),
),
)
),
)
],
),
)),
PrimaryButton(
onPressed: () => Navigator.of(context) onPressed: () => Navigator.of(context)
.pushReplacementNamed(Routes.exchangeTrade, arguments: trade), .pushReplacementNamed(Routes.exchangeTrade, arguments: trade),
text: S.of(context).saved_the_trade_id, text: S.of(context).saved_the_trade_id,
color: Theme.of(context).primaryTextTheme.button.backgroundColor, color: Colors.green,
textColor: textColor: Colors.white)
Theme.of(context).primaryTextTheme.button.color), ],
) ),
],
); );
} }
} }

View file

@ -12,17 +12,21 @@ import 'package:cake_wallet/src/stores/exchange_trade/exchange_trade_store.dart'
import 'package:cake_wallet/src/stores/send/send_store.dart'; import 'package:cake_wallet/src/stores/send/send_store.dart';
import 'package:cake_wallet/src/stores/send/sending_state.dart'; import 'package:cake_wallet/src/stores/send/sending_state.dart';
import 'package:cake_wallet/src/stores/wallet/wallet_store.dart'; import 'package:cake_wallet/src/stores/wallet/wallet_store.dart';
import 'package:cake_wallet/src/screens/exchange_trade/widgets/copy_button.dart';
import 'package:cake_wallet/src/screens/receive/widgets/qr_image.dart'; import 'package:cake_wallet/src/screens/receive/widgets/qr_image.dart';
import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/screens/exchange_trade/widgets/timer_widget.dart'; import 'package:cake_wallet/src/screens/exchange_trade/widgets/timer_widget.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart';
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
class ExchangeTradePage extends BasePage { class ExchangeTradePage extends BasePage {
@override @override
String get title => S.current.exchange; String get title => S.current.exchange;
@override
Color get backgroundColor => PaletteDark.historyPanel;
@override @override
Widget body(BuildContext context) => ExchangeTradeForm(); Widget body(BuildContext context) => ExchangeTradeForm();
} }
@ -46,278 +50,273 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
_setEffects(context); _setEffects(context);
return ScrollableWithBottomSection( return Container(
contentPadding: EdgeInsets.only(left: 20, right: 20, top: 20), color: PaletteDark.historyPanel,
content: Observer(builder: (_) { child: ScrollableWithBottomSection(
final trade = tradeStore.trade; contentPadding: EdgeInsets.only(left: 24, right: 24, top: 24),
final walletName = walletStore.name; content: Observer(builder: (_) {
final trade = tradeStore.trade;
final walletName = walletStore.name;
return Column( return Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[ children: <Widget>[
Container( Container(
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ Column(
Column( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
children: <Widget>[ Row(
Row( mainAxisAlignment: MainAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start, children: <Widget>[
children: <Widget>[ Text(
Text( S.of(context).id,
S.of(context).id, style: TextStyle(
style: TextStyle( height: 2,
height: 2, fontWeight: FontWeight.bold,
fontWeight: FontWeight.bold, fontSize: 14.0,
fontSize: 14.0, color: Colors.white),
color: Theme.of(context) ),
.primaryTextTheme Text(
.button '${trade.id ?? fetchingLabel}',
.color), style: TextStyle(
), fontSize: 14.0,
Text( height: 2,
'${trade.id ?? fetchingLabel}', color: PaletteDark.walletCardText),
style: TextStyle(
fontSize: 14.0,
height: 2,
color: Theme.of(context)
.primaryTextTheme
.subtitle
.color),
)
],
),
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text(
S.of(context).amount,
style: TextStyle(
height: 2,
fontWeight: FontWeight.bold,
fontSize: 14.0,
color: Theme.of(context)
.primaryTextTheme
.button
.color),
),
Text(
'${trade.amount ?? fetchingLabel}',
style: TextStyle(
fontSize: 14.0,
height: 2,
color: Theme.of(context)
.primaryTextTheme
.subtitle
.color),
)
],
),
trade.extraId != null
? Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text(
S.of(context).payment_id,
style: TextStyle(
height: 2,
fontWeight: FontWeight.bold,
fontSize: 14.0,
color: Theme.of(context)
.primaryTextTheme
.button
.color),
),
Text(
'${trade.extraId ?? fetchingLabel}',
style: TextStyle(
fontSize: 14.0,
height: 2,
color: Theme.of(context)
.primaryTextTheme
.subtitle
.color),
)
],
) )
: Container(), ],
Row( ),
mainAxisAlignment: MainAxisAlignment.start, Row(
children: <Widget>[ mainAxisAlignment: MainAxisAlignment.start,
Text( children: <Widget>[
S.of(context).status, Text(
style: TextStyle( S.of(context).amount,
fontSize: 14.0, style: TextStyle(
fontWeight: FontWeight.bold, height: 2,
color: Theme.of(context) fontWeight: FontWeight.bold,
.primaryTextTheme fontSize: 14.0,
.button color: Colors.white),
.color, ),
height: 2), Text(
), '${trade.amount ?? fetchingLabel}',
Text( style: TextStyle(
'${trade.state ?? fetchingLabel}', fontSize: 14.0,
style: TextStyle( height: 2,
fontSize: 14.0, color: PaletteDark.walletCardText),
height: 2,
color: Theme.of(context)
.primaryTextTheme
.subtitle
.color),
)
],
),
trade.expiredAt != null
? Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text(
S.of(context).offer_expires_in,
style: TextStyle(
fontSize: 14.0,
color: Theme.of(context)
.primaryTextTheme
.button
.color),
),
TimerWidget(trade.expiredAt,
color: Theme.of(context)
.primaryTextTheme
.subtitle
.color)
],
) )
: Container(), ],
], ),
), trade.extraId != null
SizedBox(width: 10), ? Row(
Container( mainAxisAlignment: MainAxisAlignment.start,
padding: EdgeInsets.all(5), children: <Widget>[
color: Colors.white, Text(
constraints: BoxConstraints(minWidth: 65, maxWidth: 105), S.of(context).payment_id,
child: QrImage( style: TextStyle(
data: trade.inputAddress ?? fetchingLabel, height: 2,
backgroundColor: Colors.white)) fontWeight: FontWeight.bold,
], fontSize: 14.0,
), color: Colors.white),
), ),
SizedBox( Text(
height: 20.0, '${trade.extraId ?? fetchingLabel}',
), style: TextStyle(
Center( fontSize: 14.0,
child: Text( height: 2,
S.of(context).trade_is_powered_by(trade.provider != null color: PaletteDark.walletCardText),
? trade.provider.title )
: fetchingLabel), ],
textAlign: TextAlign.center, )
style: TextStyle( : Container(),
fontSize: 14.0, Row(
fontWeight: FontWeight.bold, mainAxisAlignment: MainAxisAlignment.start,
color: Theme.of(context).primaryTextTheme.headline.color), children: <Widget>[
), Text(
), S.of(context).status,
Container( style: TextStyle(
padding: EdgeInsets.only(top: 20, bottom: 20), fontSize: 14.0,
child: Center( fontWeight: FontWeight.bold,
child: Text( color: Colors.white,
trade.inputAddress ?? fetchingLabel, height: 2),
textAlign: TextAlign.center, ),
style: TextStyle(fontSize: 14.0, color: Palette.lightViolet), Text(
'${trade.state ?? fetchingLabel}',
style: TextStyle(
fontSize: 14.0,
height: 2,
color: PaletteDark.walletCardText),
)
],
),
trade.expiredAt != null
? Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Text(
S.of(context).offer_expires_in,
style: TextStyle(
fontSize: 14.0,
color: Colors.white),
),
TimerWidget(trade.expiredAt,
color: PaletteDark.walletCardText)
],
)
: Container(),
],
),
],
), ),
), ),
), Padding(
Container( padding: EdgeInsets.only(top: 20),
padding: EdgeInsets.only(left: 50.0, right: 50.0), child: Row(
child: Row( children: <Widget>[
children: <Widget>[ Spacer(
Flexible( flex: 1,
child: Container( ),
padding: EdgeInsets.only(right: 5.0), Flexible(
child: CopyButton( flex: 1,
onPressed: () => Clipboard.setData( child: Center(
ClipboardData(text: trade.inputAddress)), child: AspectRatio(
text: S.of(context).copy_address, aspectRatio: 1.0,
color: Theme.of(context) child: QrImage(
.accentTextTheme data: trade.inputAddress ?? fetchingLabel,
.button backgroundColor: Colors.transparent,
.backgroundColor, foregroundColor: PaletteDark.walletCardText,
borderColor: Theme.of(context) ),
.accentTextTheme ),
.button )),
.decorationColor), Spacer(
)), flex: 1,
Flexible( )
child: Container( ],
padding: EdgeInsets.only(left: 5.0), ),
child: CopyButton(
onPressed: () =>
Clipboard.setData(ClipboardData(text: trade.id)),
text: S.of(context).copy_id,
color: Theme.of(context)
.accentTextTheme
.button
.backgroundColor,
borderColor: Theme.of(context)
.accentTextTheme
.button
.decorationColor),
))
],
), ),
), SizedBox(
Container( height: 20.0,
padding: EdgeInsets.only(top: 20), ),
child: Text( Center(
tradeStore.isSendable child: Text(
? S.of(context).exchange_result_confirm( S.of(context).trade_is_powered_by(trade.provider != null
trade.amount ?? fetchingLabel, ? trade.provider.title
trade.from.toString(), : fetchingLabel),
walletName) textAlign: TextAlign.center,
: S.of(context).exchange_result_description( style: TextStyle(
trade.amount ?? fetchingLabel, trade.from.toString()), fontSize: 14.0,
fontWeight: FontWeight.bold,
color: Colors.white),
),
),
Container(
padding: EdgeInsets.only(top: 20, bottom: 20),
child: Center(
child: Text(
trade.inputAddress ?? fetchingLabel,
textAlign: TextAlign.center,
style: TextStyle(fontSize: 14.0, color: PaletteDark.walletCardText),
),
),
),
Container(
child: Row(
children: <Widget>[
Flexible(
child: Container(
padding: EdgeInsets.only(right: 5.0),
child: Builder(
builder: (context) => PrimaryButton(
onPressed: () {
Clipboard.setData(ClipboardData(text: trade.inputAddress));
Scaffold.of(context).showSnackBar(SnackBar(
content: Text(
S.of(context).copied_to_clipboard,
textAlign: TextAlign.center,
style: TextStyle(color: Colors.white),
),
backgroundColor: Colors.green,
duration: Duration(milliseconds: 1500),
));
},
text: S.of(context).copy_address,
color: PaletteDark.menuList,
textColor: Colors.white)
),
)),
Flexible(
child: Container(
padding: EdgeInsets.only(left: 5.0),
child: Builder(
builder: (context) => PrimaryButton(
onPressed: () {
Clipboard.setData(ClipboardData(text: trade.id));
Scaffold.of(context).showSnackBar(SnackBar(
content: Text(
S.of(context).copied_to_clipboard,
textAlign: TextAlign.center,
style: TextStyle(color: Colors.white),
),
backgroundColor: Colors.green,
duration: Duration(milliseconds: 1500),
));
},
text: S.of(context).copy_id,
color: PaletteDark.menuList,
textColor: Colors.white)
),
))
],
),
),
Container(
padding: EdgeInsets.only(top: 20),
child: Text(
tradeStore.isSendable
? S.of(context).exchange_result_confirm(
trade.amount ?? fetchingLabel,
trade.from.toString(),
walletName)
: S.of(context).exchange_result_description(
trade.amount ?? fetchingLabel, trade.from.toString()),
textAlign: TextAlign.left,
style: TextStyle(
fontSize: 13.0,
color: Colors.white),
),
),
Text(
S.of(context).exchange_result_write_down_ID,
textAlign: TextAlign.left, textAlign: TextAlign.left,
style: TextStyle( style: TextStyle(
fontSize: 13.0, fontSize: 13.0,
color: Theme.of(context).primaryTextTheme.title.color), color: Colors.white),
), )
), ],
Text( );
S.of(context).exchange_result_write_down_ID, }),
textAlign: TextAlign.left, bottomSectionPadding: EdgeInsets.all(24),
style: TextStyle( bottomSection: Observer(
fontSize: 13.0, builder: (_) => tradeStore.trade.from == CryptoCurrency.xmr &&
color: Theme.of(context).accentTextTheme.title.color), !(sendStore.state is TransactionCommitted)
) ? LoadingPrimaryButton(
], isDisabled: tradeStore.trade.inputAddress == null ||
); tradeStore.trade.inputAddress.isEmpty,
}), isLoading: sendStore.state is CreatingTransaction ||
bottomSection: Observer( sendStore.state is TransactionCommitted,
builder: (_) => tradeStore.trade.from == CryptoCurrency.xmr && onPressed: () => sendStore.createTransaction(
!(sendStore.state is TransactionCommitted) address: tradeStore.trade.inputAddress,
? Container( amount: tradeStore.trade.amount),
padding: EdgeInsets.only(top: 20.0, bottom: 20.0), text: tradeStore.trade.provider ==
child: LoadingPrimaryButton( ExchangeProviderDescription.xmrto
isDisabled: tradeStore.trade.inputAddress == null || ? S.of(context).confirm
tradeStore.trade.inputAddress.isEmpty, : S.of(context).send_xmr,
isLoading: sendStore.state is CreatingTransaction || color: Colors.blue,
sendStore.state is TransactionCommitted, textColor: Colors.white)
onPressed: () => sendStore.createTransaction( : Offstage()),
address: tradeStore.trade.inputAddress, ),
amount: tradeStore.trade.amount),
text: tradeStore.trade.provider ==
ExchangeProviderDescription.xmrto
? S.of(context).confirm
: S.of(context).send_xmr,
color: Theme.of(context)
.primaryTextTheme
.button
.backgroundColor,
textColor: Theme.of(context).primaryTextTheme.button.color),
)
: Offstage()),
); );
} }
@ -334,14 +333,11 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
showDialog<void>( showDialog<void>(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
return AlertDialog( return AlertWithOneAction(
title: Text(S.of(context).error), alertTitle: S.of(context).error,
content: Text(state.error), alertContent: state.error,
actions: <Widget>[ buttonText: S.of(context).ok,
FlatButton( buttonAction: () => Navigator.of(context).pop()
child: Text(S.of(context).ok),
onPressed: () => Navigator.of(context).pop())
],
); );
}); });
}); });
@ -352,23 +348,18 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
showDialog<void>( showDialog<void>(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
return AlertDialog( return AlertWithTwoActions(
title: Text(S.of(context).confirm_sending), alertTitle: S.of(context).confirm_sending,
content: Text(S.of(context).commit_transaction_amount_fee( alertContent: S.of(context).commit_transaction_amount_fee(
sendStore.pendingTransaction.amount, sendStore.pendingTransaction.amount,
sendStore.pendingTransaction.fee)), sendStore.pendingTransaction.fee),
actions: <Widget>[ leftButtonText: S.of(context).ok,
FlatButton( rightButtonText: S.of(context).cancel,
child: Text(S.of(context).ok), actionLeftButton: () {
onPressed: () { Navigator.of(context).pop();
Navigator.of(context).pop(); sendStore.commitTransaction();
sendStore.commitTransaction(); },
}), actionRightButton: () => Navigator.of(context).pop()
FlatButton(
child: Text(S.of(context).cancel),
onPressed: () => Navigator.of(context).pop(),
)
],
); );
}); });
}); });
@ -379,14 +370,11 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
showDialog<void>( showDialog<void>(
context: context, context: context,
builder: (BuildContext context) { builder: (BuildContext context) {
return AlertDialog( return AlertWithOneAction(
title: Text(S.of(context).sending), alertTitle: S.of(context).sending,
content: Text(S.of(context).transaction_sent), alertContent: S.of(context).transaction_sent,
actions: <Widget>[ buttonText: S.of(context).ok,
FlatButton( buttonAction: () => Navigator.of(context).pop()
child: Text(S.of(context).ok),
onPressed: () => Navigator.of(context).pop())
],
); );
}); });
}); });

View file

@ -170,7 +170,7 @@ class ReceiveBodyState extends State<ReceiveBody> {
height: 48, height: 48,
padding: EdgeInsets.only(left: 24, right: 24), padding: EdgeInsets.only(left: 24, right: 24),
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(27)), borderRadius: BorderRadius.all(Radius.circular(24)),
color: PaletteDark.walletCardSubAddressField color: PaletteDark.walletCardSubAddressField
), ),
child: Row( child: Row(

View file

@ -74,7 +74,7 @@
"copy_id" : "ID kopieren", "copy_id" : "ID kopieren",
"exchange_result_write_down_trade_id" : "Bitte kopieren oder notieren Sie die Handel-ID, um fortzufahren.", "exchange_result_write_down_trade_id" : "Bitte kopieren oder notieren Sie die Handel-ID, um fortzufahren.",
"trade_id" : "Handel-ID:\n${id}", "trade_id" : "Handel-ID:",
"copied_to_clipboard" : "In die Zwischenablage kopiert", "copied_to_clipboard" : "In die Zwischenablage kopiert",
"saved_the_trade_id" : "Ich habe die Geschäfts-ID gespeichert", "saved_the_trade_id" : "Ich habe die Geschäfts-ID gespeichert",
"fetching" : "holen", "fetching" : "holen",

View file

@ -74,7 +74,7 @@
"copy_id" : "Copy ID", "copy_id" : "Copy ID",
"exchange_result_write_down_trade_id" : "Please copy or write down the trade ID to continue.", "exchange_result_write_down_trade_id" : "Please copy or write down the trade ID to continue.",
"trade_id" : "Trade ID:\n${id}", "trade_id" : "Trade ID:",
"copied_to_clipboard" : "Copied to Clipboard", "copied_to_clipboard" : "Copied to Clipboard",
"saved_the_trade_id" : "I've saved the trade ID", "saved_the_trade_id" : "I've saved the trade ID",
"fetching" : "Fetching", "fetching" : "Fetching",

View file

@ -74,7 +74,7 @@
"copy_id" : "Copiar ID", "copy_id" : "Copiar ID",
"exchange_result_write_down_trade_id" : "Por favor, copia o escribe el ID.", "exchange_result_write_down_trade_id" : "Por favor, copia o escribe el ID.",
"trade_id" : "Comercial ID:\n${id}", "trade_id" : "Comercial ID:",
"copied_to_clipboard" : "Copiado al portapapeles", "copied_to_clipboard" : "Copiado al portapapeles",
"saved_the_trade_id" : "He salvado comercial ID", "saved_the_trade_id" : "He salvado comercial ID",
"fetching" : "Cargando", "fetching" : "Cargando",

View file

@ -74,7 +74,7 @@
"copy_id" : "प्रतिलिपि ID", "copy_id" : "प्रतिलिपि ID",
"exchange_result_write_down_trade_id" : "जारी रखने के लिए कृपया ट्रेड ID की प्रतिलिपि बनाएँ या लिखें.", "exchange_result_write_down_trade_id" : "जारी रखने के लिए कृपया ट्रेड ID की प्रतिलिपि बनाएँ या लिखें.",
"trade_id" : "व्यापार ID:\n${id}", "trade_id" : "व्यापार ID:",
"copied_to_clipboard" : "क्लिपबोर्ड पर नकल", "copied_to_clipboard" : "क्लिपबोर्ड पर नकल",
"saved_the_trade_id" : "मैंने व्यापार बचा लिया है ID", "saved_the_trade_id" : "मैंने व्यापार बचा लिया है ID",
"fetching" : "ला रहा है", "fetching" : "ला रहा है",

View file

@ -74,7 +74,7 @@
"copy_id" : "IDをコピー", "copy_id" : "IDをコピー",
"exchange_result_write_down_trade_id" : "続行するには、取引IDをコピーまたは書き留めてください.", "exchange_result_write_down_trade_id" : "続行するには、取引IDをコピーまたは書き留めてください.",
"trade_id" : "取引ID:\n${id}", "trade_id" : "取引ID:",
"copied_to_clipboard" : "クリップボードにコピーしました", "copied_to_clipboard" : "クリップボードにコピーしました",
"saved_the_trade_id" : "取引IDを保存しました", "saved_the_trade_id" : "取引IDを保存しました",
"fetching" : "フェッチング", "fetching" : "フェッチング",

View file

@ -74,7 +74,7 @@
"copy_id" : "부 ID", "copy_id" : "부 ID",
"exchange_result_write_down_trade_id" : "계속하려면 거래 ID를 복사하거나 적어 두십시오..", "exchange_result_write_down_trade_id" : "계속하려면 거래 ID를 복사하거나 적어 두십시오..",
"trade_id" : "무역 ID:\n${id}", "trade_id" : "무역 ID:",
"copied_to_clipboard" : "클립 보드에 복사", "copied_to_clipboard" : "클립 보드에 복사",
"saved_the_trade_id" : "거래 ID를 저장했습니다", "saved_the_trade_id" : "거래 ID를 저장했습니다",
"fetching" : "가져 오는 중", "fetching" : "가져 오는 중",

View file

@ -74,7 +74,7 @@
"copy_id" : "ID kopiëren", "copy_id" : "ID kopiëren",
"exchange_result_write_down_trade_id" : "Kopieer of noteer de handels-ID om door te gaan.", "exchange_result_write_down_trade_id" : "Kopieer of noteer de handels-ID om door te gaan.",
"trade_id" : "Trade ID:\n${id}", "trade_id" : "Trade ID:",
"copied_to_clipboard" : "Gekopieerd naar het klembord", "copied_to_clipboard" : "Gekopieerd naar het klembord",
"saved_the_trade_id" : "Ik heb de ruil-ID opgeslagen", "saved_the_trade_id" : "Ik heb de ruil-ID opgeslagen",
"fetching" : "Ophalen", "fetching" : "Ophalen",

View file

@ -74,7 +74,7 @@
"copy_id" : "ID kopii", "copy_id" : "ID kopii",
"exchange_result_write_down_trade_id" : "Skopiuj lub zanotuj identyfikator transakcji, aby kontynuować.", "exchange_result_write_down_trade_id" : "Skopiuj lub zanotuj identyfikator transakcji, aby kontynuować.",
"trade_id" : "Identyfikator handlu:\n${id}", "trade_id" : "Identyfikator handlu:",
"copied_to_clipboard" : "Skopiowane do schowka", "copied_to_clipboard" : "Skopiowane do schowka",
"saved_the_trade_id" : "Zapisałem ID", "saved_the_trade_id" : "Zapisałem ID",
"fetching" : "Ujmujący", "fetching" : "Ujmujący",

View file

@ -74,7 +74,7 @@
"copy_id" : "Copiar ID", "copy_id" : "Copiar ID",
"exchange_result_write_down_trade_id" : "Copie ou anote o ID da troca para continuar.", "exchange_result_write_down_trade_id" : "Copie ou anote o ID da troca para continuar.",
"trade_id" : "ID da troca:\n${id}", "trade_id" : "ID da troca:",
"copied_to_clipboard" : "Copiado para a área de transferência", "copied_to_clipboard" : "Copiado para a área de transferência",
"saved_the_trade_id" : "ID da troca salvo", "saved_the_trade_id" : "ID da troca salvo",
"fetching" : "Buscando", "fetching" : "Buscando",

View file

@ -74,7 +74,7 @@
"copy_id" : "Скопировать ID", "copy_id" : "Скопировать ID",
"exchange_result_write_down_trade_id" : "Пожалуйста, скопируйте или запишите ID сделки.", "exchange_result_write_down_trade_id" : "Пожалуйста, скопируйте или запишите ID сделки.",
"trade_id" : "ID сделки:\n${id}", "trade_id" : "ID сделки:",
"copied_to_clipboard" : "Скопировано в буфер обмена", "copied_to_clipboard" : "Скопировано в буфер обмена",
"saved_the_trade_id" : "Я сохранил ID сделки", "saved_the_trade_id" : "Я сохранил ID сделки",
"fetching" : "Загрузка", "fetching" : "Загрузка",

View file

@ -74,7 +74,7 @@
"copy_id" : "Скопіювати ID", "copy_id" : "Скопіювати ID",
"exchange_result_write_down_trade_id" : "Будь ласка, скопіюйте або запишіть ID операції.", "exchange_result_write_down_trade_id" : "Будь ласка, скопіюйте або запишіть ID операції.",
"trade_id" : "ID операції:\n${id}", "trade_id" : "ID операції:",
"copied_to_clipboard" : "Скопійовано в буфер обміну", "copied_to_clipboard" : "Скопійовано в буфер обміну",
"saved_the_trade_id" : "Я зберіг ID операції", "saved_the_trade_id" : "Я зберіг ID операції",
"fetching" : "Завантаження", "fetching" : "Завантаження",

View file

@ -74,7 +74,7 @@
"copy_id" : "复印ID", "copy_id" : "复印ID",
"exchange_result_write_down_trade_id" : "请复制或写下交易编号以继续.", "exchange_result_write_down_trade_id" : "请复制或写下交易编号以继续.",
"trade_id" : "贸易编号:\n${id}", "trade_id" : "贸易编号:",
"copied_to_clipboard" : "复制到剪贴板", "copied_to_clipboard" : "复制到剪贴板",
"saved_the_trade_id" : "我已经保存了交易ID", "saved_the_trade_id" : "我已经保存了交易ID",
"fetching" : "正在取得", "fetching" : "正在取得",