diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index d61bfec90..ddbc08762 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -23,6 +23,7 @@ class S implements WidgetsLocalizations { String get account => "Account"; String get accounts => "Accounts"; + String get accounts_subaddresses => "Accounts and subaddresses"; String get add => "Add"; String get add_new_word => "Add new word"; String get address_book => "Address Book"; @@ -47,6 +48,7 @@ class S implements WidgetsLocalizations { String get change_currency => "Change Currency"; String get change_exchange_provider => "Change Exchange Provider"; String get change_language => "Change language"; + String get choose_account => "Choose account"; String get choose_wallet_currency => "Please choose wallet currency:"; String get clear => "Clear"; String get confirm => "Confirm"; @@ -59,6 +61,7 @@ class S implements WidgetsLocalizations { String get copy_address => "Copy Address"; String get copy_id => "Copy ID"; String get create_new => "Create New Wallet"; + String get create_new_account => "Create new account"; String get delete => "Delete"; String get digit_pin => "-digit PIN"; String get edit => "Edit"; @@ -125,6 +128,7 @@ class S implements WidgetsLocalizations { String get remove => "Remove"; String get remove_node => "Remove node"; String get remove_node_message => "Are you sure that you want to remove selected node?"; + String get rename => "Rename"; String get rescan => "Rescan"; String get reset => "Reset"; String get restore_active_seed => "Active seed"; @@ -447,6 +451,8 @@ class $de extends S { @override String get trade_details_fetching => "Holen"; @override + String get create_new_account => "Neues Konto erstellen"; + @override String get buy => "Kaufen"; @override String get confirm_sending => "Bestätigen Sie das Senden"; @@ -595,6 +601,8 @@ class $de extends S { @override String get change_language => "Sprache ändern"; @override + String get accounts_subaddresses => "Konten und Unteradressen"; + @override String get wallet_name => "Walletname"; @override String get error_text_payment_id => "Die Zahlungs-ID kann nur 16 bis 64 hexadezimale Zeichen enthalten"; @@ -683,6 +691,8 @@ class $de extends S { @override String get settings_fee_priority => "Gebührenpriorität"; @override + String get rename => "Umbenennen"; + @override String get restore_active_seed => "Aktives Seed"; @override String get settings_personal => "persönlich"; @@ -709,6 +719,8 @@ class $de extends S { @override String get spend_key_private => "Schlüssel ausgeben (geheim)"; @override + String get choose_account => "Konto auswählen"; + @override String get settings_only_trades => "Nur Trades"; @override String get trade_state_to_be_created => "Geschaffen werden"; @@ -1029,6 +1041,8 @@ class $hi extends S { @override String get trade_details_fetching => "ला रहा है"; @override + String get create_new_account => "नया खाता बनाएँ"; + @override String get buy => "खरीदें"; @override String get confirm_sending => "भेजने की पुष्टि करें"; @@ -1177,6 +1191,8 @@ class $hi extends S { @override String get change_language => "भाषा बदलो"; @override + String get accounts_subaddresses => "लेखा और उपदेस"; + @override String get wallet_name => "बटुए का नाम"; @override String get error_text_payment_id => "पेमेंट आईडी केवल हेक्स में 16 से 64 चार्ट तक हो सकती है"; @@ -1265,6 +1281,8 @@ class $hi extends S { @override String get settings_fee_priority => "शुल्क प्राथमिकता"; @override + String get rename => "नाम बदलें"; + @override String get restore_active_seed => "सक्रिय बीज"; @override String get settings_personal => "निजी"; @@ -1291,6 +1309,8 @@ class $hi extends S { @override String get spend_key_private => "खर्च करना (निजी)"; @override + String get choose_account => "खाता चुनें"; + @override String get settings_only_trades => "केवल ट्रेड करता है"; @override String get trade_state_to_be_created => "बनाए जाने के लिए"; @@ -1611,6 +1631,8 @@ class $ru extends S { @override String get trade_details_fetching => "Получение"; @override + String get create_new_account => "Создать новый аккаунт"; + @override String get buy => "Купить"; @override String get confirm_sending => "Подтвердить отправку"; @@ -1759,6 +1781,8 @@ class $ru extends S { @override String get change_language => "Изменить язык"; @override + String get accounts_subaddresses => "Аккаунты и субадреса"; + @override String get wallet_name => "Имя кошелька"; @override String get error_text_payment_id => "Идентификатор платежа может содержать от 16 до 64 символов в hex"; @@ -1847,6 +1871,8 @@ class $ru extends S { @override String get settings_fee_priority => "Приоритет транзакции"; @override + String get rename => "Переименовать"; + @override String get restore_active_seed => "Активная мнемоническая фраза"; @override String get settings_personal => "Персональные"; @@ -1873,6 +1899,8 @@ class $ru extends S { @override String get spend_key_private => "Приватный ключ траты"; @override + String get choose_account => "Выберите аккаунт"; + @override String get settings_only_trades => "Сделки"; @override String get trade_state_to_be_created => "Будет создана"; @@ -2193,6 +2221,8 @@ class $ko extends S { @override String get trade_details_fetching => "가져 오는 중"; @override + String get create_new_account => "새 계정을 만들"; + @override String get buy => "구입"; @override String get confirm_sending => "전송 확인"; @@ -2341,6 +2371,8 @@ class $ko extends S { @override String get change_language => "언어 변경"; @override + String get accounts_subaddresses => "계정 및 하위 주소"; + @override String get wallet_name => "지갑 이름"; @override String get error_text_payment_id => "지불 ID는 16 ~ 64 자의 16 진 문자 만 포함 할 수 있습니다"; @@ -2429,6 +2461,8 @@ class $ko extends S { @override String get settings_fee_priority => "수수료 우선"; @override + String get rename => "이름 바꾸기"; + @override String get restore_active_seed => "활성 종자"; @override String get settings_personal => "개인적인"; @@ -2455,6 +2489,8 @@ class $ko extends S { @override String get spend_key_private => "지출 키 (은밀한)"; @override + String get choose_account => "계정을 선택하십시오"; + @override String get settings_only_trades => "거래 만"; @override String get trade_state_to_be_created => "만들려면"; @@ -2775,6 +2811,8 @@ class $pt extends S { @override String get trade_details_fetching => "Buscando"; @override + String get create_new_account => "Criar nova conta"; + @override String get buy => "Comprar"; @override String get confirm_sending => "Confirmar o envio"; @@ -2923,6 +2961,8 @@ class $pt extends S { @override String get change_language => "Mudar idioma"; @override + String get accounts_subaddresses => "Contas e sub-endereços"; + @override String get wallet_name => "Nome da carteira"; @override String get error_text_payment_id => "O ID de pagamento pode conter apenas de 16 a 64 caracteres em hexadecimal"; @@ -3011,6 +3051,8 @@ class $pt extends S { @override String get settings_fee_priority => "Prioridade da taxa"; @override + String get rename => "Renomear"; + @override String get restore_active_seed => "Semente ativa"; @override String get settings_personal => "Pessoal"; @@ -3037,6 +3079,8 @@ class $pt extends S { @override String get spend_key_private => "Chave de gastos (privada)"; @override + String get choose_account => "Escolha uma conta"; + @override String get settings_only_trades => "Somente trocas"; @override String get trade_state_to_be_created => "A ser criada"; @@ -3287,7 +3331,7 @@ class $uk extends S { @override String get transaction_details_recipient_address => "Адреса отримувача"; @override - String get receive_amount => "Баланс"; + String get receive_amount => "Сума"; @override String get settings_allow_biometrical_authentication => "Включити біометричну аутентифікацію"; @override @@ -3357,6 +3401,8 @@ class $uk extends S { @override String get trade_details_fetching => "Отримання"; @override + String get create_new_account => "Створити новий акаунт"; + @override String get buy => "Купити"; @override String get confirm_sending => "Підтвердити відправлення"; @@ -3505,6 +3551,8 @@ class $uk extends S { @override String get change_language => "Змінити мову"; @override + String get accounts_subaddresses => "Акаунти та субадреси"; + @override String get wallet_name => "Ім'я гаманця"; @override String get error_text_payment_id => "Ідентифікатор платежу може містити від 16 до 64 символів в hex"; @@ -3593,6 +3641,8 @@ class $uk extends S { @override String get settings_fee_priority => "Пріоритет транзакції"; @override + String get rename => "Перейменувати"; + @override String get restore_active_seed => "Активна мнемонічна фраза"; @override String get settings_personal => "Персональні"; @@ -3619,6 +3669,8 @@ class $uk extends S { @override String get spend_key_private => "Приватний ключ витрати"; @override + String get choose_account => "Оберіть акаунт"; + @override String get settings_only_trades => "Операції"; @override String get trade_state_to_be_created => "Буде створена"; @@ -3939,6 +3991,8 @@ class $ja extends S { @override String get trade_details_fetching => "フェッチング"; @override + String get create_new_account => "新しいアカウントを作成する"; + @override String get buy => "購入"; @override String get confirm_sending => "送信を確認"; @@ -4087,6 +4141,8 @@ class $ja extends S { @override String get change_language => "言語を変えてください"; @override + String get accounts_subaddresses => "アカウントとサブアドレス"; + @override String get wallet_name => "ウォレット名"; @override String get error_text_payment_id => "支払いIDには、16進数で16〜64文字しか含めることができません"; @@ -4175,6 +4231,8 @@ class $ja extends S { @override String get settings_fee_priority => "料金優先"; @override + String get rename => "リネーム"; + @override String get restore_active_seed => "アクティブシード"; @override String get settings_personal => "パーソナル"; @@ -4201,6 +4259,8 @@ class $ja extends S { @override String get spend_key_private => "キーを使う (プライベート)"; @override + String get choose_account => "アカウントを選択"; + @override String get settings_only_trades => "取引のみ"; @override String get trade_state_to_be_created => "作成される"; @@ -4525,6 +4585,8 @@ class $pl extends S { @override String get trade_details_fetching => "Ujmujący"; @override + String get create_new_account => "Stwórz nowe konto"; + @override String get buy => "Kup"; @override String get confirm_sending => "Potwierdź wysłanie"; @@ -4673,6 +4735,8 @@ class $pl extends S { @override String get change_language => "Zmień język"; @override + String get accounts_subaddresses => "Konta i podadresy"; + @override String get wallet_name => "Nazwa portfela"; @override String get error_text_payment_id => "ID może zawierać od 16 do 64 znaków w formacie szesnastkowym"; @@ -4761,6 +4825,8 @@ class $pl extends S { @override String get settings_fee_priority => "Priorytet opłaty"; @override + String get rename => "Przemianować"; + @override String get restore_active_seed => "Aktywne nasiona"; @override String get settings_personal => "Osobisty"; @@ -4787,6 +4853,8 @@ class $pl extends S { @override String get spend_key_private => "Wydaj klucz (prywatny)"; @override + String get choose_account => "Wybierz konto"; + @override String get settings_only_trades => "Tylko transakcje"; @override String get trade_state_to_be_created => "Zostać stworzonym"; @@ -5107,6 +5175,8 @@ class $es extends S { @override String get trade_details_fetching => "Cargando"; @override + String get create_new_account => "Crear una nueva cuenta"; + @override String get buy => "Comprar"; @override String get confirm_sending => "Confirmar envío"; @@ -5255,6 +5325,8 @@ class $es extends S { @override String get change_language => "Cambiar idioma"; @override + String get accounts_subaddresses => "Cuentas y subdirecciones"; + @override String get wallet_name => "Nombre de la billetera"; @override String get error_text_payment_id => "La ID de pago solo puede contener de 16 a 64 caracteres en hexadecimal"; @@ -5343,6 +5415,8 @@ class $es extends S { @override String get settings_fee_priority => "Prioridad de tasa"; @override + String get rename => "Rebautizar"; + @override String get restore_active_seed => "Semilla activa"; @override String get settings_personal => "Personal"; @@ -5369,6 +5443,8 @@ class $es extends S { @override String get spend_key_private => "Spend clave (privado)"; @override + String get choose_account => "Elegir cuenta"; + @override String get settings_only_trades => "Solo comercia"; @override String get trade_state_to_be_created => "Ser creado"; @@ -5689,6 +5765,8 @@ class $nl extends S { @override String get trade_details_fetching => "Ophalen"; @override + String get create_new_account => "Creëer een nieuw account"; + @override String get buy => "Kopen"; @override String get confirm_sending => "Bevestig verzending"; @@ -5837,6 +5915,8 @@ class $nl extends S { @override String get change_language => "Verander de taal"; @override + String get accounts_subaddresses => "Accounts en subadressen"; + @override String get wallet_name => "Portemonnee naam"; @override String get error_text_payment_id => "Betalings-ID kan alleen 16 tot 64 tekens bevatten in hexadecimale volgorde"; @@ -5925,6 +6005,8 @@ class $nl extends S { @override String get settings_fee_priority => "Tariefprioriteit"; @override + String get rename => "Hernoemen"; + @override String get restore_active_seed => "Actief zaad"; @override String get settings_personal => "Persoonlijk"; @@ -5951,6 +6033,8 @@ class $nl extends S { @override String get spend_key_private => "Sleutel uitgeven (privaat)"; @override + String get choose_account => "Kies account"; + @override String get settings_only_trades => "Alleen handel"; @override String get trade_state_to_be_created => "Om gecreëerd te worden"; @@ -6271,6 +6355,8 @@ class $zh extends S { @override String get trade_details_fetching => "正在取得"; @override + String get create_new_account => "建立新帳戶"; + @override String get buy => "購買"; @override String get confirm_sending => "确认发送"; @@ -6419,6 +6505,8 @@ class $zh extends S { @override String get change_language => "改變語言"; @override + String get accounts_subaddresses => "帳戶和子地址"; + @override String get wallet_name => "钱包名称"; @override String get error_text_payment_id => "付款ID只能包含16到64个字符(十六进制)"; @@ -6507,6 +6595,8 @@ class $zh extends S { @override String get settings_fee_priority => "费用优先"; @override + String get rename => "改名"; + @override String get restore_active_seed => "活性種子"; @override String get settings_personal => "个人"; @@ -6533,6 +6623,8 @@ class $zh extends S { @override String get spend_key_private => "支出金钥 (私人的)"; @override + String get choose_account => "選擇帳號"; + @override String get settings_only_trades => "只交易"; @override String get trade_state_to_be_created => "待创建"; diff --git a/lib/router.dart b/lib/router.dart index f2c0a554a..0782d9a58 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -68,7 +68,6 @@ import 'package:cake_wallet/src/screens/disclaimer/disclaimer_page.dart'; import 'package:cake_wallet/src/screens/seed_language/seed_language_page.dart'; import 'package:cake_wallet/src/screens/transaction_details/transaction_details_page.dart'; import 'package:cake_wallet/src/screens/accounts/account_page.dart'; -import 'package:cake_wallet/src/screens/accounts/account_list_page.dart'; import 'package:cake_wallet/src/screens/address_book/address_book_page.dart'; import 'package:cake_wallet/src/screens/address_book/contact_page.dart'; import 'package:cake_wallet/src/screens/show_keys/show_keys_page.dart'; @@ -242,7 +241,10 @@ class Router { builder: (_) => MultiProvider(providers: [ Provider( create: (_) => - SubaddressListStore(walletService: walletService)) + SubaddressListStore(walletService: walletService)), + Provider( + create: (_) => + AccountListStore(walletService: walletService)) ], child: ReceivePage())); case Routes.transactionDetails: @@ -325,17 +327,6 @@ class Router { authenticationStore: authenticationStore); }); - case Routes.accountList: - return MaterialPageRoute( - builder: (context) { - return MultiProvider(providers: [ - Provider( - create: (_) => - AccountListStore(walletService: walletService)), - ], child: AccountListPage()); - }, - fullscreenDialog: true); - case Routes.accountCreation: return CupertinoPageRoute(builder: (context) { return Provider( diff --git a/lib/routes.dart b/lib/routes.dart index 9fc3a941f..87c587da5 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -25,7 +25,6 @@ class Routes { static const newNode = '/new_node_list'; static const login = '/login'; static const splash = '/splash'; - static const accountList = '/account_list'; static const accountCreation = '/account_new'; static const addressBook = '/address_book'; static const pickerAddressBook = '/picker_address_book'; diff --git a/lib/src/screens/accounts/account_list_page.dart b/lib/src/screens/accounts/account_list_page.dart index 00be33fe5..3abcfe126 100644 --- a/lib/src/screens/accounts/account_list_page.dart +++ b/lib/src/screens/accounts/account_list_page.dart @@ -1,120 +1,153 @@ +import 'dart:ui'; import 'package:provider/provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; -import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:cake_wallet/palette.dart'; import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/stores/account_list/account_list_store.dart'; +import 'package:cake_wallet/src/screens/accounts/widgets/account_tile.dart'; import 'package:cake_wallet/src/stores/wallet/wallet_store.dart'; -import 'package:cake_wallet/src/screens/base_page.dart'; -class AccountListPage extends BasePage { - @override - String get title => S.current.accounts; +class AccountListPage extends StatefulWidget { + AccountListPage({@required this.accountListStore}); + + final AccountListStore accountListStore; @override - Widget trailing(BuildContext context) { - final accountListStore = Provider.of(context); + AccountListPageForm createState() => AccountListPageForm(accountListStore); +} - return Container( - width: 28.0, - height: 28.0, - decoration: BoxDecoration( - shape: BoxShape.circle, color: Theme.of(context).selectedRowColor), - child: Stack( - alignment: Alignment.center, - children: [ - Icon(Icons.add, color: Palette.violet, size: 22.0), - ButtonTheme( - minWidth: 28.0, - height: 28.0, - child: FlatButton( - shape: CircleBorder(), - onPressed: () async { - await Navigator.of(context) - .pushNamed(Routes.accountCreation); - accountListStore.updateAccountList(); - }, - child: Offstage()), - ) - ], - )); - } +class AccountListPageForm extends State { + AccountListPageForm(this.accountListStore); + + final AccountListStore accountListStore; @override - Widget body(BuildContext context) { - final accountListStore = Provider.of(context); + Widget build(BuildContext context) { final walletStore = Provider.of(context); - final currentColor = Theme.of(context).selectedRowColor; - final notCurrentColor = Theme.of(context).backgroundColor; - - return Container( - padding: EdgeInsets.only(top: 10, bottom: 20), - child: Observer(builder: (_) { - final accounts = accountListStore.accounts; - return ListView.builder( - itemCount: accounts == null ? 0 : accounts.length, - itemBuilder: (BuildContext context, int index) { - final account = accounts[index]; - - return Observer(builder: (_) { - final isCurrent = walletStore.account.id == account.id; - - return Slidable( - key: Key(account.id.toString()), - actionPane: SlidableDrawerActionPane(), - child: Container( - color: isCurrent ? currentColor : notCurrentColor, - child: Column( - children: [ - ListTile( - title: Text( - account.label, - style: TextStyle( - fontSize: 16.0, - color: Theme.of(context) - .primaryTextTheme - .headline - .color), - ), - onTap: () { - if (isCurrent) { - return; - } - - walletStore.setAccount(account); - Navigator.of(context).pop(); - }, - ), - Divider( - color: Theme.of(context).dividerTheme.color, - height: 1.0, - ) - ], + return GestureDetector( + onTap: () => Navigator.of(context).pop(), + child: Container( + color: Colors.transparent, + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 3.0, sigmaY: 3.0), + child: Container( + decoration: BoxDecoration(color: PaletteDark.historyPanel.withOpacity(0.75)), + child: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + padding: EdgeInsets.only(left: 24, right: 24), + child: Text( + S.of(context).choose_account, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + decoration: TextDecoration.none, + color: Colors.white + ), ), ), - secondaryActions: [ - IconSlideAction( - caption: S.of(context).edit, - color: Colors.blue, - icon: Icons.edit, - onTap: () async { - await Navigator.of(context).pushNamed( - Routes.accountCreation, - arguments: account); - // await accountListStore.updateAccountList().then((_) { - // if (isCurrent) walletStore.setAccount(accountListStore.accounts[index]); - // }); - }, - ) - ], - ); - }); - }); - }), + Padding( + padding: EdgeInsets.only(left: 24, right: 24, top: 24), + child: GestureDetector( + onTap: () => null, + child: ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(14)), + child: Container( + height: 296, + color: PaletteDark.menuList, + child: Column( + children: [ + Expanded( + child: Observer( + builder: (_) { + final accounts = accountListStore.accounts; + + return ListView.separated( + separatorBuilder: (context, index) => Divider( + color: PaletteDark.mainBackgroundColor, + height: 1, + ), + itemCount: accounts == null ? 0 : accounts.length, + itemBuilder: (context, index) { + final account = accounts[index]; + + return Observer( + builder: (_) { + final isCurrent = walletStore.account.id == account.id; + + return AccountTile( + isCurrent: isCurrent, + accountName: account.label, + onTap: () { + if (isCurrent) { + return; + } + + walletStore.setAccount(account); + Navigator.of(context).pop(); + } + ); + } + ); + }, + ); + } + ) + ), + GestureDetector( + onTap: () async { + await Navigator.of(context) + .pushNamed(Routes.accountCreation); + accountListStore.updateAccountList(); + }, + child: Container( + height: 62, + color: Colors.white, + padding: EdgeInsets.only(left: 24, right: 24), + child: Center( + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Icon( + Icons.add, + color: PaletteDark.historyPanel, + ), + Padding( + padding: EdgeInsets.only(left: 5), + child: Text( + S.of(context).create_new_account, + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w600, + color: PaletteDark.historyPanel, + decoration: TextDecoration.none, + ), + ), + ) + ], + ), + ), + ), + ) + ], + ), + ), + ), + ), + ) + ], + ), + ), + ), + ), + ), ); } } diff --git a/lib/src/screens/accounts/account_page.dart b/lib/src/screens/accounts/account_page.dart index 4c4011aa9..4498857a4 100644 --- a/lib/src/screens/accounts/account_page.dart +++ b/lib/src/screens/accounts/account_page.dart @@ -8,6 +8,7 @@ import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/domain/monero/account.dart'; import 'package:cake_wallet/palette.dart'; +import 'package:cake_wallet/src/widgets/base_text_form_field.dart'; class AccountPage extends BasePage { AccountPage({this.account}); @@ -15,7 +16,10 @@ class AccountPage extends BasePage { final Account account; @override - String get title => 'Account'; + String get title => S.current.account; + + @override + Color get backgroundColor => PaletteDark.historyPanel; @override Widget body(BuildContext context) => AccountForm(account); @@ -50,30 +54,31 @@ class AccountFormState extends State { Widget build(BuildContext context) { final accountListStore = Provider.of(context); + _textController.addListener(() { + if (_textController.text.isNotEmpty) { + accountListStore.setDisabledStatus(false); + } else { + accountListStore.setDisabledStatus(true); + } + }); + return Form( key: _formKey, child: Container( - padding: EdgeInsets.all(20.0), + color: PaletteDark.historyPanel, + padding: EdgeInsets.all(24.0), child: Column( children: [ Expanded( child: Center( - child: TextFormField( - decoration: InputDecoration( - hintStyle: TextStyle(color: Theme.of(context).hintColor), + child: BaseTextFormField( + controller: _textController, hintText: S.of(context).account, - focusedBorder: UnderlineInputBorder( - borderSide: - BorderSide(color: Palette.cakeGreen, width: 2.0)), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).focusColor, width: 1.0))), - controller: _textController, - validator: (value) { - accountListStore.validateAccountName(value); - return accountListStore.errorMessage; - }, - ), + validator: (value) { + accountListStore.validateAccountName(value); + return accountListStore.errorMessage; + }, + ) )), Observer( builder: (_) => LoadingPrimaryButton( @@ -93,13 +98,11 @@ class AccountFormState extends State { Navigator.of(context).pop(_textController.text); }, text: - widget.account != null ? 'Rename' : S.of(context).add, - color: Theme.of(context) - .primaryTextTheme - .button - .backgroundColor, - textColor: Theme.of(context).primaryTextTheme.button.color, + widget.account != null ? S.of(context).rename : S.of(context).add, + color: Colors.green, + textColor: Colors.white, isLoading: accountListStore.isAccountCreating, + isDisabled: accountListStore.isDisabledStatus, )) ], ), diff --git a/lib/src/screens/accounts/widgets/account_tile.dart b/lib/src/screens/accounts/widgets/account_tile.dart new file mode 100644 index 000000000..ba98d73ab --- /dev/null +++ b/lib/src/screens/accounts/widgets/account_tile.dart @@ -0,0 +1,39 @@ +import 'package:flutter/material.dart'; +import 'package:cake_wallet/palette.dart'; + +class AccountTile extends StatelessWidget { + AccountTile({ + @required this.isCurrent, + @required this.accountName, + @required this.onTap + }); + + final bool isCurrent; + final String accountName; + final VoidCallback onTap; + + @override + Widget build(BuildContext context) { + final color = isCurrent ? PaletteDark.menuHeader : Colors.transparent; + final textColor = isCurrent ? Colors.blue : Colors.white; + + return GestureDetector( + onTap: onTap, + child: Container( + height: 77, + padding: EdgeInsets.only(left: 24, right: 24), + alignment: Alignment.centerLeft, + color: color, + child: Text( + accountName, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: textColor, + decoration: TextDecoration.none, + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/src/screens/dashboard/widgets/wallet_card.dart b/lib/src/screens/dashboard/widgets/wallet_card.dart index a1bd18528..73a2aa2d3 100644 --- a/lib/src/screens/dashboard/widgets/wallet_card.dart +++ b/lib/src/screens/dashboard/widgets/wallet_card.dart @@ -433,7 +433,7 @@ class WalletCardState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - S.current.subaddresses, + S.of(context).accounts_subaddresses, style: TextStyle( fontSize: 14, color: Colors.white diff --git a/lib/src/screens/receive/receive_page.dart b/lib/src/screens/receive/receive_page.dart index b7f7fb33c..0916f3c89 100644 --- a/lib/src/screens/receive/receive_page.dart +++ b/lib/src/screens/receive/receive_page.dart @@ -11,6 +11,10 @@ import 'package:cake_wallet/src/stores/subaddress_list/subaddress_list_store.dar import 'package:cake_wallet/src/stores/wallet/wallet_store.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/accounts/account_list_page.dart'; +import 'package:cake_wallet/src/stores/account_list/account_list_store.dart'; +import 'package:cake_wallet/src/screens/receive/widgets/header_tile.dart'; +import 'package:cake_wallet/src/widgets/base_text_form_field.dart'; class ReceivePage extends BasePage { @override @@ -37,7 +41,7 @@ class ReceivePage extends BasePage { splashColor: Colors.transparent, padding: EdgeInsets.all(0), onPressed: () => Share.text( - 'Share address', walletStore.subaddress.address, 'text/plain'), + S.current.share_address, walletStore.subaddress.address, 'text/plain'), child: shareImage), ), ); @@ -66,6 +70,7 @@ class ReceiveBodyState extends State { Widget build(BuildContext context) { final walletStore = Provider.of(context); final subaddressListStore = Provider.of(context); + final accountListStore = Provider.of(context); final copyImage = Image.asset('assets/images/copy_content.png'); @@ -122,231 +127,185 @@ class ReceiveBodyState extends State { Expanded( child: Form( key: _formKey, - child: TextFormField( - keyboardType: - TextInputType.numberWithOptions(decimal: true), + child: BaseTextFormField( + controller: amountController, + keyboardType: TextInputType.numberWithOptions(decimal: true), inputFormatters: [ BlacklistingTextInputFormatter( RegExp('[\\-|\\ |\\,]')) ], textAlign: TextAlign.center, - style: TextStyle( - fontSize: 20.0, - color: Colors.white - ), - decoration: InputDecoration( - hintStyle: TextStyle( - fontSize: 20, - color: PaletteDark.walletCardText), - hintText: S.of(context).amount, - focusedBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: PaletteDark.walletCardText, width: 1.0)), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: PaletteDark.walletCardText, - width: 1.0))), + hintText: S.of(context).receive_amount, + borderColor: PaletteDark.walletCardText, validator: (value) { walletStore.validateAmount(value); return walletStore.errorMessage; }, autovalidate: true, - controller: amountController, - ))) + ) + ) + ) ], ), ), Padding( padding: EdgeInsets.only(left: 24, right: 24, bottom: 24), child: Observer( - builder: (_) => GestureDetector( - onTap: () { - Clipboard.setData(ClipboardData( - text: walletStore.subaddress.address)); - Scaffold.of(context).showSnackBar(SnackBar( - content: Text( - S.of(context).copied_to_clipboard, - style: TextStyle(color: Colors.white), + builder: (_) => GestureDetector( + onTap: () { + Clipboard.setData(ClipboardData( + text: walletStore.subaddress.address)); + Scaffold.of(context).showSnackBar(SnackBar( + content: Text( + S.of(context).copied_to_clipboard, + style: TextStyle(color: Colors.white), + ), + backgroundColor: Colors.green, + duration: Duration(milliseconds: 500), + )); + }, + child: Container( + height: 54, + padding: EdgeInsets.only(left: 24, right: 24), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(27)), + color: PaletteDark.walletCardSubAddressField ), - backgroundColor: Colors.green, - duration: Duration(milliseconds: 500), - )); - }, - child: Container( - height: 54, - padding: EdgeInsets.only(left: 24, right: 24), - decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(27)), - color: PaletteDark.walletCardSubAddressField - ), - child: Row( - mainAxisSize: MainAxisSize.max, - children: [ - Expanded( - child: Text( - walletStore.subaddress.address, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.w600, - color: Colors.white + child: Row( + mainAxisSize: MainAxisSize.max, + children: [ + Expanded( + child: Text( + walletStore.subaddress.address, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w600, + color: Colors.white + ), ), ), - ), - Padding( - padding: EdgeInsets.only(left: 12), - child: copyImage, - ) - ], + Padding( + padding: EdgeInsets.only(left: 12), + child: copyImage, + ) + ], + ), ), - ), - ) + ) ), ), Flexible( - flex: 3, - child: ClipRRect( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(24), - topRight: Radius.circular(24), - ), - child: Container( - color: PaletteDark.historyPanel, - child: Observer( - builder: (_) => ListView.separated( - separatorBuilder: (context, index) => Divider( - height: 1, - color: PaletteDark.menuList, - ), - itemCount: subaddressListStore.subaddresses.length + 2, - itemBuilder: (context, index) { - - if (index == 0) { - return accountTile( - onTap: () {}, - title: walletStore.account.label, - icon: Icon( - Icons.arrow_forward_ios, - size: 14, - color: Colors.white, - ) - ); - } - - if (index == 1) { - return accountTile( - onTap: () => Navigator.of(context) - .pushNamed(Routes.newSubaddress), - title: S.of(context).subaddresses, - icon: Icon( - Icons.add, - size: 20, - color: Colors.white, - ) - ); - } - - index -= 2; - - return Observer( - builder: (_) { - final subaddress = subaddressListStore.subaddresses[index]; - final isCurrent = - walletStore.subaddress.address == subaddress.address; - - final label = subaddress.label; - final address = subaddress.address; - - return InkWell( - onTap: () => walletStore.setSubaddress(subaddress), - child: Container( - color: isCurrent ? currentColor : notCurrentColor, - padding: EdgeInsets.only( - left: 24, - right: 24, - top: 32, - bottom: 32 - ), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - label.isNotEmpty - ? Text( - label, - style: TextStyle( - fontSize: 14, - color: PaletteDark.walletCardText - ), - ) - : Offstage(), - Padding( - padding: label.isNotEmpty - ? EdgeInsets.only(top: 10) - : EdgeInsets.only(top: 0), - child: Text( - address, - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - color: Colors.white - ), - ), - ) - ]), - ), - ); - } - ); - } - ) + flex: 3, + child: ClipRRect( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(24), + topRight: Radius.circular(24), ), - ), - ) + child: Container( + color: PaletteDark.historyPanel, + child: Observer( + builder: (_) => ListView.separated( + separatorBuilder: (context, index) => Divider( + height: 1, + color: PaletteDark.menuList, + ), + itemCount: subaddressListStore.subaddresses.length + 2, + itemBuilder: (context, index) { + + if (index == 0) { + return HeaderTile( + onTap: () async { + await showDialog( + context: context, + builder: (BuildContext context) { + return AccountListPage(accountListStore: accountListStore); + } + ); + }, + title: walletStore.account.label, + icon: Icon( + Icons.arrow_forward_ios, + size: 14, + color: Colors.white, + ) + ); + } + + if (index == 1) { + return HeaderTile( + onTap: () => Navigator.of(context) + .pushNamed(Routes.newSubaddress), + title: S.of(context).subaddresses, + icon: Icon( + Icons.add, + size: 20, + color: Colors.white, + ) + ); + } + + index -= 2; + + return Observer( + builder: (_) { + final subaddress = subaddressListStore.subaddresses[index]; + final isCurrent = + walletStore.subaddress.address == subaddress.address; + + final label = subaddress.label; + final address = subaddress.address; + + return InkWell( + onTap: () => walletStore.setSubaddress(subaddress), + child: Container( + color: isCurrent ? currentColor : notCurrentColor, + padding: EdgeInsets.only( + left: 24, + right: 24, + top: 32, + bottom: 32 + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + label.isNotEmpty + ? Text( + label, + style: TextStyle( + fontSize: 14, + color: PaletteDark.walletCardText + ), + ) + : Offstage(), + Padding( + padding: label.isNotEmpty + ? EdgeInsets.only(top: 10) + : EdgeInsets.only(top: 0), + child: Text( + address, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + color: Colors.white + ), + ), + ) + ]), + ), + ); + } + ); + } + ) + ), + ), + ) ) ], ), ); } - - Widget accountTile({ - @required VoidCallback onTap, - @required String title, - @required Icon icon - }) => GestureDetector( - onTap: onTap, - child: Container( - padding: EdgeInsets.only( - left: 24, - right: 24, - top: 32, - bottom: 32 - ), - color: Colors.transparent, - child: Row( - mainAxisSize: MainAxisSize.max, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - title, - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, - color: Colors.white - ), - ), - Container( - height: 32, - width: 32, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: PaletteDark.menuList - ), - child: icon, - ) - ], - ), - ), - ); -} +} \ No newline at end of file diff --git a/lib/src/screens/receive/widgets/header_tile.dart b/lib/src/screens/receive/widgets/header_tile.dart new file mode 100644 index 000000000..c5d23b0e5 --- /dev/null +++ b/lib/src/screens/receive/widgets/header_tile.dart @@ -0,0 +1,53 @@ +import 'package:flutter/material.dart'; +import 'package:cake_wallet/palette.dart'; + +class HeaderTile extends StatelessWidget { + HeaderTile({ + @required this.onTap, + @required this.title, + @required this.icon + }); + + final VoidCallback onTap; + final String title; + final Icon icon; + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: onTap, + child: Container( + padding: EdgeInsets.only( + left: 24, + right: 24, + top: 32, + bottom: 32 + ), + color: Colors.transparent, + child: Row( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + title, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: Colors.white + ), + ), + Container( + height: 32, + width: 32, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: PaletteDark.menuList + ), + child: icon, + ) + ], + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/src/screens/subaddress/new_subaddress_page.dart b/lib/src/screens/subaddress/new_subaddress_page.dart index 58d774568..5f2d0f0b8 100644 --- a/lib/src/screens/subaddress/new_subaddress_page.dart +++ b/lib/src/screens/subaddress/new_subaddress_page.dart @@ -9,11 +9,15 @@ import 'package:cake_wallet/src/stores/subaddress_creation/subaddress_creation_s import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/palette.dart'; +import 'package:cake_wallet/src/widgets/base_text_form_field.dart'; class NewSubaddressPage extends BasePage { @override String get title => S.current.new_subaddress_title; + @override + Color get backgroundColor => PaletteDark.historyPanel; + @override Widget body(BuildContext context) => NewSubaddressForm(); @@ -42,40 +46,45 @@ class NewSubaddressFormState extends State { final _formKey = GlobalKey(); final _labelController = TextEditingController(); + @override + void dispose() { + _labelController.dispose(); + super.dispose(); + } + @override Widget build(BuildContext context) { final subaddressCreationStore = Provider.of(context); + _labelController.addListener(() { + if (_labelController.text.isNotEmpty) { + subaddressCreationStore.setDisabledStatus(false); + } else { + subaddressCreationStore.setDisabledStatus(true); + } + }); + return Form( key: _formKey, - child: Stack(children: [ - Center( - child: Padding( - padding: EdgeInsets.only(left: 35, right: 35), - child: TextFormField( - controller: _labelController, - decoration: InputDecoration( - hintStyle: TextStyle(color: Theme.of(context).hintColor), - hintText: S.of(context).new_subaddress_label_name, - focusedBorder: UnderlineInputBorder( - borderSide: - BorderSide(color: Palette.cakeGreen, width: 2.0)), - enabledBorder: UnderlineInputBorder( - borderSide: BorderSide( - color: Theme.of(context).focusColor, - width: 1.0))), - validator: (value) { - subaddressCreationStore.validateSubaddressName(value); - return subaddressCreationStore.errorMessage; - }), - ), - ), - Positioned( - bottom: 20, - left: 20, - right: 20, - child: Observer( + child: Container( + color: PaletteDark.historyPanel, + padding: EdgeInsets.all(24.0), + child: Column( + children: [ + Expanded( + child: Center( + child: BaseTextFormField( + controller: _labelController, + hintText: S.of(context).new_subaddress_label_name, + validator: (value) { + subaddressCreationStore.validateSubaddressName(value); + return subaddressCreationStore.errorMessage; + } + ) + ) + ), + Observer( builder: (_) => LoadingPrimaryButton( onPressed: () async { if (_formKey.currentState.validate()) { @@ -85,14 +94,16 @@ class NewSubaddressFormState extends State { } }, text: S.of(context).new_subaddress_create, - color: Theme.of(context) - .accentTextTheme - .button - .backgroundColor, - textColor: Theme.of(context).primaryTextTheme.button.color, + color: Colors.green, + textColor: Colors.white, isLoading: - subaddressCreationStore.state is SubaddressIsCreating), - )) - ])); + subaddressCreationStore.state is SubaddressIsCreating, + isDisabled: subaddressCreationStore.isDisabledStatus, + ), + ) + ], + ), + ) + ); } } diff --git a/lib/src/stores/account_list/account_list_store.dart b/lib/src/stores/account_list/account_list_store.dart index e6361d5a7..af72175f7 100644 --- a/lib/src/stores/account_list/account_list_store.dart +++ b/lib/src/stores/account_list/account_list_store.dart @@ -16,6 +16,7 @@ abstract class AcountListStoreBase with Store { AcountListStoreBase({@required WalletService walletService}) { accounts = []; isAccountCreating = false; + isDisabledStatus = true; if (walletService.currentWallet != null) { _onWalletChanged(walletService.currentWallet); @@ -37,10 +38,18 @@ abstract class AcountListStoreBase with Store { @observable bool isAccountCreating; + @observable + bool isDisabledStatus; + AccountList _accountList; StreamSubscription _onWalletChangeSubscription; StreamSubscription> _onAccountsChangeSubscription; + @action + void setDisabledStatus(bool isDisabled) { + isDisabledStatus = isDisabled; + } + @override void dispose() { _onWalletChangeSubscription.cancel(); diff --git a/lib/src/stores/subaddress_creation/subaddress_creation_store.dart b/lib/src/stores/subaddress_creation/subaddress_creation_store.dart index 0314e9ac9..a633185ea 100644 --- a/lib/src/stores/subaddress_creation/subaddress_creation_store.dart +++ b/lib/src/stores/subaddress_creation/subaddress_creation_store.dart @@ -17,6 +17,7 @@ class SubadrressCreationStore = SubadrressCreationStoreBase abstract class SubadrressCreationStoreBase with Store { SubadrressCreationStoreBase({@required WalletService walletService}) { state = SubaddressCreationStateInitial(); + isDisabledStatus = true; if (walletService.currentWallet != null) { _onWalletChanged(walletService.currentWallet); @@ -34,11 +35,19 @@ abstract class SubadrressCreationStoreBase with Store { @observable String errorMessage; + @observable + bool isDisabledStatus; + SubaddressList _subaddressList; StreamSubscription _onWalletChangeSubscription; StreamSubscription _onAccountChangeSubscription; Account _account; + @action + void setDisabledStatus(bool isDisabled) { + isDisabledStatus = isDisabled; + } + @override void dispose() { _onWalletChangeSubscription.cancel(); diff --git a/lib/src/widgets/base_text_form_field.dart b/lib/src/widgets/base_text_form_field.dart new file mode 100644 index 000000000..5b76475b6 --- /dev/null +++ b/lib/src/widgets/base_text_form_field.dart @@ -0,0 +1,70 @@ +import 'package:flutter/material.dart'; +import 'package:cake_wallet/palette.dart'; +import 'package:flutter/services.dart'; + +class BaseTextFormField extends StatelessWidget { + BaseTextFormField({ + this.controller, + this.keyboardType = TextInputType.text, + this.textInputAction = TextInputAction.done, + this.textAlign = TextAlign.start, + this.autovalidate = false, + this.hintText = '', + this.maxLines = 1, + this.inputFormatters, + this.textColor = Colors.white, + this.hintColor = PaletteDark.walletCardText, + this.borderColor = PaletteDark.menuList, + this.validator + }); + + final TextEditingController controller; + final TextInputType keyboardType; + final TextInputAction textInputAction; + final TextAlign textAlign; + final bool autovalidate; + final String hintText; + final int maxLines; + final List inputFormatters; + final Color textColor; + final Color hintColor; + final Color borderColor; + final FormFieldValidator validator; + + @override + Widget build(BuildContext context) { + return TextFormField( + controller: controller, + keyboardType: keyboardType, + textInputAction: textInputAction, + textAlign: textAlign, + autovalidate: autovalidate, + maxLines: maxLines, + inputFormatters: inputFormatters, + style: TextStyle( + fontSize: 16.0, + color: textColor + ), + decoration: InputDecoration( + hintStyle: TextStyle( + color: hintColor, + fontSize: 16 + ), + hintText: hintText, + focusedBorder: UnderlineInputBorder( + borderSide: BorderSide( + color: borderColor, + width: 1.0 + ) + ), + enabledBorder: UnderlineInputBorder( + borderSide: BorderSide( + color: borderColor, + width: 1.0 + ) + ) + ), + validator: validator, + ); + } +} \ No newline at end of file diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index ae54ff092..2bdcaf31e 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -133,6 +133,10 @@ "share_address" : "Adresse teilen ", "receive_amount" : "Menge", "subaddresses" : "Unteradressen", + "rename" : "Umbenennen", + "choose_account" : "Konto auswählen", + "create_new_account" : "Neues Konto erstellen", + "accounts_subaddresses" : "Konten und Unteradressen", "restore_restore_wallet" : "Wallet wiederherstellen", diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 2dcd6d01a..a9a03363f 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -133,6 +133,10 @@ "share_address" : "Share address", "receive_amount" : "Amount", "subaddresses" : "Subaddresses", + "rename" : "Rename", + "choose_account" : "Choose account", + "create_new_account" : "Create new account", + "accounts_subaddresses" : "Accounts and subaddresses", "restore_restore_wallet" : "Restore Wallet", diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 87444dbcb..a4f192344 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -133,6 +133,10 @@ "share_address" : "Compartir dirección", "receive_amount" : "Cantidad", "subaddresses" : "Subdirecciones", + "rename" : "Rebautizar", + "choose_account" : "Elegir cuenta", + "create_new_account" : "Crear una nueva cuenta", + "accounts_subaddresses" : "Cuentas y subdirecciones", "restore_restore_wallet" : "Recuperar Cartera", diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index fa614d81c..5ec6fa437 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -133,6 +133,10 @@ "share_address" : "पता साझा करें", "receive_amount" : "रकम", "subaddresses" : "उप पते", + "rename" : "नाम बदलें", + "choose_account" : "खाता चुनें", + "create_new_account" : "नया खाता बनाएँ", + "accounts_subaddresses" : "लेखा और उपदेस", "restore_restore_wallet" : "वॉलेट को पुनर्स्थापित करें", diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index d40c510d3..a262c66a3 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -133,6 +133,10 @@ "share_address" : "住所を共有する", "receive_amount" : "量", "subaddresses" : "サブアドレス", + "rename" : "リネーム", + "choose_account" : "アカウントを選択", + "create_new_account" : "新しいアカウントを作成する", + "accounts_subaddresses" : "アカウントとサブアドレス", "restore_restore_wallet" : "ウォレットを復元", diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index bdf28dfdf..65154b2b8 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -133,6 +133,10 @@ "share_address" : "주소 공유", "receive_amount" : "양", "subaddresses" : "하위 주소", + "rename" : "이름 바꾸기", + "choose_account" : "계정을 선택하십시오", + "create_new_account" : "새 계정을 만들", + "accounts_subaddresses" : "계정 및 하위 주소", "restore_restore_wallet" : "월렛 복원", diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index f60c5bd03..4be0d1ca8 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -133,6 +133,10 @@ "share_address" : "Deel adres", "receive_amount" : "Bedrag", "subaddresses" : "Subadressen", + "rename" : "Hernoemen", + "choose_account" : "Kies account", + "create_new_account" : "Creëer een nieuw account", + "accounts_subaddresses" : "Accounts en subadressen", "restore_restore_wallet" : "Portemonnee herstellen", diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index 86dbbc88e..013485039 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -133,6 +133,10 @@ "share_address" : "Udostępnij adres", "receive_amount" : "Ilość", "subaddresses" : "Podadresy", + "rename" : "Przemianować", + "choose_account" : "Wybierz konto", + "create_new_account" : "Stwórz nowe konto", + "accounts_subaddresses" : "Konta i podadresy", "restore_restore_wallet" : "Przywróć portfel", diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 40b7f8d12..19f2a51bb 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -133,6 +133,10 @@ "share_address" : "Compartilhar endereço", "receive_amount" : "Quantia", "subaddresses" : "Sub-endereços", + "rename" : "Renomear", + "choose_account" : "Escolha uma conta", + "create_new_account" : "Criar nova conta", + "accounts_subaddresses" : "Contas e sub-endereços", "restore_restore_wallet" : "Restaurar carteira", diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index a5e379202..48c4e6172 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -133,6 +133,10 @@ "share_address" : "Поделиться адресом", "receive_amount" : "Сумма", "subaddresses" : "Субадреса", + "rename" : "Переименовать", + "choose_account" : "Выберите аккаунт", + "create_new_account" : "Создать новый аккаунт", + "accounts_subaddresses" : "Аккаунты и субадреса", "restore_restore_wallet" : "Восстановить кошелёк", diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index ce77826ed..d3580ba0b 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -131,8 +131,12 @@ "share_address" : "Поділитися адресою", - "receive_amount" : "Баланс", + "receive_amount" : "Сума", "subaddresses" : "Субадреси", + "rename" : "Перейменувати", + "choose_account" : "Оберіть акаунт", + "create_new_account" : "Створити новий акаунт", + "accounts_subaddresses" : "Акаунти та субадреси", "restore_restore_wallet" : "Відновити гаманець", diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 63246d329..45820b0e9 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -133,6 +133,10 @@ "share_address" : "分享地址", "receive_amount" : "量", "subaddresses" : "子地址", + "rename" : "改名", + "choose_account" : "選擇帳號", + "create_new_account" : "建立新帳戶", + "accounts_subaddresses" : "帳戶和子地址", "restore_restore_wallet" : "恢复钱包",