From 52b8bafac9baa98c874f1b64c74963918564885c Mon Sep 17 00:00:00 2001 From: Serhii Date: Mon, 11 Jul 2022 18:20:16 +0300 Subject: [PATCH] Exchange screens access improvements (#409) * move tag prop to the crypto currency * add currency icons --- assets/images/zaddr_icon.png | Bin 0 -> 16312 bytes assets/images/zec_icon.png | Bin 0 -> 16312 bytes cw_core/lib/crypto_currency.dart | 81 +++++--- .../changenow_exchange_provider.dart | 26 +-- .../sideshift_exchange_provider.dart | 11 +- .../exchange/widgets/currency_picker.dart | 49 ++--- .../widgets/currency_picker_widget.dart | 2 +- .../exchange/widgets/currency_utils.dart | 101 --------- .../exchange/widgets/exchange_card.dart | 36 +++- lib/src/screens/send/widgets/send_card.dart | 196 +++++++++++------- 10 files changed, 237 insertions(+), 265 deletions(-) create mode 100644 assets/images/zaddr_icon.png create mode 100644 assets/images/zec_icon.png delete mode 100644 lib/src/screens/exchange/widgets/currency_utils.dart diff --git a/assets/images/zaddr_icon.png b/assets/images/zaddr_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..139acf84c54f2e3622db5346db88043071dea2c2 GIT binary patch literal 16312 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 Zso}Sq{Fyg?a{MECqG6z3{@5<;e*gqh6AJ(U literal 0 HcmV?d00001 diff --git a/assets/images/zec_icon.png b/assets/images/zec_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..139acf84c54f2e3622db5346db88043071dea2c2 GIT binary patch literal 16312 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 Zso}Sq{Fyg?a{MECqG6z3{@5<;e*gqh6AJ(U literal 0 HcmV?d00001 diff --git a/cw_core/lib/crypto_currency.dart b/cw_core/lib/crypto_currency.dart index ddcdb5856..802ef5e3e 100644 --- a/cw_core/lib/crypto_currency.dart +++ b/cw_core/lib/crypto_currency.dart @@ -5,9 +5,13 @@ part 'crypto_currency.g.dart'; @HiveType(typeId: 0) class CryptoCurrency extends EnumerableItem with Serializable { - const CryptoCurrency({final String title, final int raw}) + const CryptoCurrency({final String title, this.tag, this.name, this.iconPath, final int raw}) : super(title: title, raw: raw); + final String tag; + final String name; + final String iconPath; + static const all = [ CryptoCurrency.xmr, CryptoCurrency.ada, @@ -24,39 +28,44 @@ class CryptoCurrency extends EnumerableItem with Serializable { CryptoCurrency.usdterc20, CryptoCurrency.xlm, CryptoCurrency.xrp, - CryptoCurrency.xhv + CryptoCurrency.xhv, + CryptoCurrency.zaddr, + CryptoCurrency.zec ]; - static const xmr = CryptoCurrency(title: 'XMR', raw: 0); - static const ada = CryptoCurrency(title: 'ADA', raw: 1); - static const bch = CryptoCurrency(title: 'BCH', raw: 2); - static const bnb = CryptoCurrency(title: 'BNB BEP2', raw: 3); - static const btc = CryptoCurrency(title: 'BTC', raw: 4); - static const dai = CryptoCurrency(title: 'DAI', raw: 5); - static const dash = CryptoCurrency(title: 'DASH', raw: 6); - static const eos = CryptoCurrency(title: 'EOS', raw: 7); - static const eth = CryptoCurrency(title: 'ETH', raw: 8); - static const ltc = CryptoCurrency(title: 'LTC', raw: 9); + static const xmr = CryptoCurrency(title: 'XMR', iconPath: 'assets/images/monero_icon.png', name: 'Monero', raw: 0); + static const ada = CryptoCurrency(title: 'ADA', iconPath: 'assets/images/ada_icon.png', name: 'Cardano', raw: 1); + static const bch = CryptoCurrency(title: 'BCH', iconPath: 'assets/images/bch_icon.png',name: 'Bitcoin Cash', raw: 2); + static const bnb = CryptoCurrency(title: 'BNB', iconPath: 'assets/images/bnb_icon.png', tag: 'BSC', name: 'Binance Coin', raw: 3); + static const btc = CryptoCurrency(title: 'BTC', iconPath: 'assets/images/btc.png', name: 'Bitcoin', raw: 4); + static const dai = CryptoCurrency(title: 'DAI', iconPath: 'assets/images/dai_icon.png', tag: 'ETH', name: 'Dai', raw: 5); + static const dash = CryptoCurrency(title: 'DASH', iconPath: 'assets/images/dash_icon.png', name: 'Dash', raw: 6); + static const eos = CryptoCurrency(title: 'EOS', iconPath: 'assets/images/eos_icon.png', name: 'EOS', raw: 7); + static const eth = CryptoCurrency(title: 'ETH', iconPath: 'assets/images/eth_icon.png', name: 'Ethereum', raw: 8); + static const ltc = CryptoCurrency(title: 'LTC', iconPath: 'assets/images/litecoin-ltc_icon.png', name: 'Litecoin',raw: 9); static const nano = CryptoCurrency(title: 'NANO', raw: 10); - static const trx = CryptoCurrency(title: 'TRX', raw: 11); - static const usdt = CryptoCurrency(title: 'USDT', raw: 12); - static const usdterc20 = CryptoCurrency(title: 'USDTERC20', raw: 13); - static const xlm = CryptoCurrency(title: 'XLM', raw: 14); - static const xrp = CryptoCurrency(title: 'XRP', raw: 15); - static const xhv = CryptoCurrency(title: 'XHV', raw: 16); - - static const xag = CryptoCurrency(title: 'XAG', raw: 17); - static const xau = CryptoCurrency(title: 'XAU', raw: 18); - static const xaud = CryptoCurrency(title: 'XAUD', raw: 19); - static const xbtc = CryptoCurrency(title: 'XBTC', raw: 20); - static const xcad = CryptoCurrency(title: 'XCAD', raw: 21); - static const xchf = CryptoCurrency(title: 'XCHF', raw: 22); - static const xcny = CryptoCurrency(title: 'XCNY', raw: 23); - static const xeur = CryptoCurrency(title: 'XEUR', raw: 24); - static const xgbp = CryptoCurrency(title: 'XGBP', raw: 25); - static const xjpy = CryptoCurrency(title: 'XJPY', raw: 26); - static const xnok = CryptoCurrency(title: 'XNOK', raw: 27); - static const xnzd = CryptoCurrency(title: 'XNZD', raw: 28); - static const xusd = CryptoCurrency(title: 'XUSD', raw: 29); + static const trx = CryptoCurrency(title: 'TRX', iconPath: 'assets/images/trx_icon.png', name: 'TRON', raw: 11); + static const usdt = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdt_icon.png', tag: 'OMNI', name: 'USDT', raw: 12); + static const usdterc20 = CryptoCurrency(title: 'USDT', iconPath: 'assets/images/usdterc20_icon.png', tag: 'ETH', name: 'USDT', raw: 13); + static const xlm = CryptoCurrency(title: 'XLM', iconPath: 'assets/images/xlm_icon.png', name: 'Stellar', raw: 14); + static const xrp = CryptoCurrency(title: 'XRP', iconPath: 'assets/images/xrp_icon.png', name: 'Ripple', raw: 15); + static const xhv = CryptoCurrency(title: 'XHV', iconPath: 'assets/images/xhv_logo.png', name: 'Haven Protocol', raw: 16); + + static const xag = CryptoCurrency(title: 'XAG', tag: 'XHV', raw: 17); + static const xau = CryptoCurrency(title: 'XAU', tag: 'XHV', raw: 18); + static const xaud = CryptoCurrency(title: 'XAUD', tag: 'XHV', raw: 19); + static const xbtc = CryptoCurrency(title: 'XBTC', tag: 'XHV', raw: 20); + static const xcad = CryptoCurrency(title: 'XCAD', tag: 'XHV', raw: 21); + static const xchf = CryptoCurrency(title: 'XCHF', tag: 'XHV', raw: 22); + static const xcny = CryptoCurrency(title: 'XCNY', tag: 'XHV', raw: 23); + static const xeur = CryptoCurrency(title: 'XEUR', tag: 'XHV', raw: 24); + static const xgbp = CryptoCurrency(title: 'XGBP', tag: 'XHV', raw: 25); + static const xjpy = CryptoCurrency(title: 'XJPY', tag: 'XHV', raw: 26); + static const xnok = CryptoCurrency(title: 'XNOK', tag: 'XHV', raw: 27); + static const xnzd = CryptoCurrency(title: 'XNZD', tag: 'XHV', raw: 28); + static const xusd = CryptoCurrency(title: 'XUSD', tag: 'XHV', raw: 29); + + static const zaddr = CryptoCurrency(title: 'ZZEC', tag: 'ZEC', name: 'Shielded Zcash', iconPath: 'assets/images/zaddr_icon.png', raw: 30); + static const zec = CryptoCurrency(title: 'TZEC', tag: 'ZEC', name: 'Transparent Zcash', iconPath: 'assets/images/zec_icon.png', raw: 31); static CryptoCurrency deserialize({int raw}) { switch (raw) { @@ -120,6 +129,10 @@ class CryptoCurrency extends EnumerableItem with Serializable { return CryptoCurrency.xnzd; case 29: return CryptoCurrency.xusd; + case 30: + return CryptoCurrency.zaddr; + case 31: + return CryptoCurrency.zec; default: return null; } @@ -187,6 +200,10 @@ class CryptoCurrency extends EnumerableItem with Serializable { return CryptoCurrency.xnzd; case 'xusd': return CryptoCurrency.xusd; + case 'zaddr': + return CryptoCurrency.zaddr; + case 'zec': + return CryptoCurrency.zec; default: return null; } diff --git a/lib/exchange/changenow/changenow_exchange_provider.dart b/lib/exchange/changenow/changenow_exchange_provider.dart index ba5c18bdc..c6594516d 100644 --- a/lib/exchange/changenow/changenow_exchange_provider.dart +++ b/lib/exchange/changenow/changenow_exchange_provider.dart @@ -240,33 +240,23 @@ class ChangeNowExchangeProvider extends ExchangeProvider { } String networkFor(CryptoCurrency currency) { - const bnbTitle = 'bnb'; - switch (currency) { case CryptoCurrency.usdt: return CryptoCurrency.btc.title.toLowerCase(); - case CryptoCurrency.usdterc20: - return CryptoCurrency.eth.title.toLowerCase(); - case CryptoCurrency.bnb: - return bnbTitle; - case CryptoCurrency.dai: - return CryptoCurrency.eth.title.toLowerCase(); default: - return currency.title.toLowerCase(); + return currency.tag != null + ? currency.tag.toLowerCase() + : currency.title.toLowerCase(); + } } } - static String normalizeCryptoCurrency(CryptoCurrency currency) { - const bnbTitle = 'bnb'; - - switch(currency) { - case CryptoCurrency.bnb: - return bnbTitle; - case CryptoCurrency.usdterc20: - return CryptoCurrency.usdt.title.toLowerCase(); + String normalizeCryptoCurrency(CryptoCurrency currency) { + switch(currency) { + case CryptoCurrency.zec: + return 'zec'; default: return currency.title.toLowerCase(); } } -} diff --git a/lib/exchange/sideshift/sideshift_exchange_provider.dart b/lib/exchange/sideshift/sideshift_exchange_provider.dart index d4db3dcae..b828c2f6f 100644 --- a/lib/exchange/sideshift/sideshift_exchange_provider.dart +++ b/lib/exchange/sideshift/sideshift_exchange_provider.dart @@ -250,14 +250,15 @@ class SideShiftExchangeProvider extends ExchangeProvider { String get title => 'SideShift'; static String normalizeCryptoCurrency(CryptoCurrency currency) { - const bnbTitle = 'bsc'; - const usdterc20 = 'usdtErc20'; - switch (currency) { + case CryptoCurrency.zaddr: + return 'zaddr'; + case CryptoCurrency.zec: + return 'zec'; case CryptoCurrency.bnb: - return bnbTitle; + return currency.tag.toLowerCase(); case CryptoCurrency.usdterc20: - return usdterc20; + return 'usdtErc20'; default: return currency.title.toLowerCase(); } diff --git a/lib/src/screens/exchange/widgets/currency_picker.dart b/lib/src/screens/exchange/widgets/currency_picker.dart index 5e4a31831..abe07e56b 100644 --- a/lib/src/screens/exchange/widgets/currency_picker.dart +++ b/lib/src/screens/exchange/widgets/currency_picker.dart @@ -1,6 +1,5 @@ import 'dart:ui'; import 'package:cake_wallet/src/screens/exchange/widgets/currency_picker_item_widget.dart'; -import 'package:cake_wallet/src/screens/exchange/widgets/currency_utils.dart'; import 'package:cake_wallet/src/screens/exchange/widgets/picker_item.dart'; import 'package:cake_wallet/src/widgets/alert_close_button.dart'; import 'package:flutter/cupertino.dart'; @@ -35,45 +34,33 @@ class CurrencyPickerState extends State { CurrencyPickerState(this.items) : isSearchBarActive = false, textFieldValue = '', - subPickerItemsList = [], + subPickerItemsList = items, appBarTextStyle = - TextStyle(fontSize: 20, fontFamily: 'Lato', backgroundColor: Colors.transparent, color: Colors.white); + TextStyle(fontSize: 20, fontFamily: 'Lato', backgroundColor: Colors.transparent, color: Colors.white); + - @override - void initState() { - pickerItemsList = CryptoCurrency.all - .map((CryptoCurrency cur) => PickerItem(cur, - title: CurrencyUtils.titleForCurrency(cur), - iconPath: CurrencyUtils.iconPathForCurrency(cur), - tag: CurrencyUtils.tagForCurrency(cur), - description: CurrencyUtils.descriptionForCurrency(cur))) - .toList(); - cleanSubPickerItemsList(); - super.initState(); - } List> pickerItemsList; List items; bool isSearchBarActive; String textFieldValue; - List> subPickerItemsList; + List subPickerItemsList; TextStyle appBarTextStyle; - void cleanSubPickerItemsList() { - subPickerItemsList = pickerItemsList.where((element) => items.contains(element.original)).toList(); - } + void cleanSubPickerItemsList() => subPickerItemsList = items; - void currencySearchBySubstring(String subString, List> list) { + void currencySearchBySubstring(String subString) { setState(() { if (subString.isNotEmpty) { - subPickerItemsList = subPickerItemsList + subPickerItemsList = items .where((element) => - element.title.contains(subString.toUpperCase()) || - element.description.contains(subString.toLowerCase())) + (element.title != null ? element.title.toLowerCase().contains(subString.toLowerCase()) : false) || + (element.tag != null ? element.tag.toLowerCase().contains(subString.toLowerCase()) : false) || + (element.name != null ? element.name.toLowerCase().contains(subString.toLowerCase()) : false)) .toList(); - } else { - cleanSubPickerItemsList(); + return; } + cleanSubPickerItemsList(); }); } @@ -140,7 +127,7 @@ class CurrencyPickerState extends State { onChanged: (value) { this.textFieldValue = value; cleanSubPickerItemsList(); - currencySearchBySubstring(textFieldValue, subPickerItemsList); + currencySearchBySubstring(textFieldValue); }, ), ), @@ -152,10 +139,10 @@ class CurrencyPickerState extends State { AspectRatio( aspectRatio: 6, child: PickerItemWidget( - title: pickerItemsList[widget.selectedAtIndex].title, - iconPath: pickerItemsList[widget.selectedAtIndex].iconPath, + title: items[widget.selectedAtIndex].title, + iconPath: items[widget.selectedAtIndex].iconPath, isSelected: true, - tag: pickerItemsList[widget.selectedAtIndex].tag, + tag: items[widget.selectedAtIndex].tag, ), ), Flexible( @@ -167,10 +154,10 @@ class CurrencyPickerState extends State { setState(() { widget.selectedAtIndex = index; }); - widget.onItemSelected(subPickerItemsList[index].original); + widget.onItemSelected(subPickerItemsList[index]); if (widget.isConvertFrom && !widget.isMoneroWallet && - (subPickerItemsList[index].original == CryptoCurrency.xmr)) { + (subPickerItemsList[index] == CryptoCurrency.xmr)) { } else { Navigator.of(context).pop(); } diff --git a/lib/src/screens/exchange/widgets/currency_picker_widget.dart b/lib/src/screens/exchange/widgets/currency_picker_widget.dart index ec0a11356..254e85d4a 100644 --- a/lib/src/screens/exchange/widgets/currency_picker_widget.dart +++ b/lib/src/screens/exchange/widgets/currency_picker_widget.dart @@ -14,7 +14,7 @@ class CurrencyPickerWidget extends StatelessWidget { final int crossAxisCount; final int selectedAtIndex; final Function pickListItem; - final List> pickerItemsList; + final List pickerItemsList; final ScrollController _scrollController = ScrollController(); diff --git a/lib/src/screens/exchange/widgets/currency_utils.dart b/lib/src/screens/exchange/widgets/currency_utils.dart deleted file mode 100644 index 83c6d0af9..000000000 --- a/lib/src/screens/exchange/widgets/currency_utils.dart +++ /dev/null @@ -1,101 +0,0 @@ -import 'package:cw_core/crypto_currency.dart'; - -class CurrencyUtils { - static String tagForCurrency(CryptoCurrency cur) { - switch (cur) { - case CryptoCurrency.bnb: - return 'BEP2'; - case CryptoCurrency.dai: - return 'ETH'; - case CryptoCurrency.usdt: - return 'OMNI'; - case CryptoCurrency.usdterc20: - return 'ETH'; - default: - return null; - } - } - - static String iconPathForCurrency(CryptoCurrency cur) { - switch (cur) { - case CryptoCurrency.xmr: - return 'assets/images/monero_icon.png'; - case CryptoCurrency.ada: - return 'assets/images/ada_icon.png'; - case CryptoCurrency.bch: - return 'assets/images/bch_icon.png'; - case CryptoCurrency.bnb: - return 'assets/images/bnb_icon.png'; - case CryptoCurrency.btc: - return 'assets/images/btc.png'; - case CryptoCurrency.dai: - return 'assets/images/dai_icon.png'; - case CryptoCurrency.dash: - return 'assets/images/dash_icon.png'; - case CryptoCurrency.eos: - return 'assets/images/eos_icon.png'; - case CryptoCurrency.eth: - return 'assets/images/eth_icon.png'; - case CryptoCurrency.ltc: - return 'assets/images/litecoin-ltc_icon.png'; - case CryptoCurrency.trx: - return 'assets/images/trx_icon.png'; - case CryptoCurrency.usdt: - return 'assets/images/usdt_icon.png'; - case CryptoCurrency.usdterc20: - return 'assets/images/usdterc20_icon.png'; - case CryptoCurrency.xlm: - return 'assets/images/xlm_icon.png'; - case CryptoCurrency.xrp: - return 'assets/images/xrp_icon.png'; - case CryptoCurrency.xhv: - return 'assets/images/xhv_logo.png'; - default: - return null; - } - } - - static String titleForCurrency(CryptoCurrency cur) { - switch (cur) { - case CryptoCurrency.bnb: - return 'BNB'; - case CryptoCurrency.usdterc20: - return 'USDT'; - default: - return cur.title; - } - } - - static String descriptionForCurrency(CryptoCurrency cur) { - switch (cur) { - case CryptoCurrency.xmr: - return 'monero'; - case CryptoCurrency.ada: - return 'cardano'; - case CryptoCurrency.bch: - return 'bitcoin cash'; - case CryptoCurrency.bnb: - return 'binance bep2'; - case CryptoCurrency.btc: - return 'bitcoin'; - case CryptoCurrency.dai: - return 'dai eth'; - case CryptoCurrency.eth: - return 'ethereum'; - case CryptoCurrency.ltc: - return 'litecoin'; - case CryptoCurrency.trx: - return 'tron'; - case CryptoCurrency.usdt: - return 'usdt omni'; - case CryptoCurrency.usdterc20: - return 'tether ERC20 eth'; - case CryptoCurrency.xlm: - return 'lumens'; - case CryptoCurrency.xrp: - return 'ripple'; - default: - return cur.title; - } - } -} diff --git a/lib/src/screens/exchange/widgets/exchange_card.dart b/lib/src/screens/exchange/widgets/exchange_card.dart index a330675fd..ac21408a3 100644 --- a/lib/src/screens/exchange/widgets/exchange_card.dart +++ b/lib/src/screens/exchange/widgets/exchange_card.dart @@ -176,7 +176,7 @@ class ExchangeCardState extends State { padding: EdgeInsets.only(right: 5), child: widget.imageArrow, ), - Text(_selectedCurrency.toString() + ':', + Text(_selectedCurrency.toString(), style: TextStyle( fontWeight: FontWeight.w600, fontSize: 16, @@ -184,6 +184,40 @@ class ExchangeCardState extends State { ]), ), ), + _selectedCurrency.tag != null ? Padding( + padding: const EdgeInsets.only(right:3.0), + child: Container( + height: 32, + decoration: BoxDecoration( + color: widget.addressButtonsColor ?? Theme.of(context) + .primaryTextTheme + .display1 + .color, + borderRadius: + BorderRadius.all(Radius.circular(6))), + child: Center( + child: Padding( + padding: const EdgeInsets.all(6.0), + child: Text(_selectedCurrency.tag, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.bold, + color: Theme.of(context) + .primaryTextTheme + .display1 + .decorationColor)), + ), + ), + ), + ) : Container(), + Padding( + padding: const EdgeInsets.only(right: 4.0), + child: Text(':', + style: TextStyle( + fontWeight: FontWeight.w600, + fontSize: 16, + color: Colors.white)), + ), Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, diff --git a/lib/src/screens/send/widgets/send_card.dart b/lib/src/screens/send/widgets/send_card.dart index eb110f3b1..69858a3ac 100644 --- a/lib/src/screens/send/widgets/send_card.dart +++ b/lib/src/screens/send/widgets/send_card.dart @@ -173,85 +173,129 @@ class SendCardState extends State Observer( builder: (_) => Padding( padding: const EdgeInsets.only(top: 20), - child: Stack( - children: [ - BaseTextFormField( - focusNode: cryptoAmountFocus, - controller: cryptoAmountController, - keyboardType: - TextInputType.numberWithOptions( - signed: false, decimal: true), - inputFormatters: [ - FilteringTextInputFormatter.deny(RegExp('[\\-|\\ ]')) - ], - prefixIcon: Padding( - padding: EdgeInsets.only(top: 9), - child: Text( - sendViewModel.selectedCryptoCurrency.title + - ':', + child: Row( + children: [ + Padding( + padding: const EdgeInsets.only(bottom: 8.0), + child: Row( + children: [ + Text( + sendViewModel.selectedCryptoCurrency.title, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + color: Colors.white, + )), + sendViewModel.selectedCryptoCurrency.tag != null ? Padding( + padding: const EdgeInsets.fromLTRB(3.0,0,3.0,0), + child: Container( + height: 32, + decoration: BoxDecoration( + color: Theme.of(context) + .primaryTextTheme + .display1 + .color, + borderRadius: + BorderRadius.all(Radius.circular(6))), + child: Center( + child: Padding( + padding: const EdgeInsets.all(6.0), + child: Text( sendViewModel.selectedCryptoCurrency.tag, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.bold, + color: Theme.of(context) + .primaryTextTheme + .display1 + .decorationColor)), + ), + ), + ), + ) : Container(), + Padding( + padding: const EdgeInsets.only(right: 10.0), + child: Text(':', style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - color: Colors.white, - )), + fontWeight: FontWeight.w600, + fontSize: 16, + color: Colors.white)), ), - suffixIcon: SizedBox( - width: prefixIconWidth, - ), - hintText: '0.0000', - borderColor: Theme.of(context) - .primaryTextTheme - .headline - .color, - textStyle: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w500, - color: Colors.white), - placeholderTextStyle: TextStyle( - color: Theme.of(context) - .primaryTextTheme - .headline - .decorationColor, - fontWeight: FontWeight.w500, - fontSize: 14), - validator: output.sendAll - ? sendViewModel.allAmountValidator - : sendViewModel - .amountValidator), - if (!sendViewModel.isBatchSending) Positioned( - top: 2, - right: 0, - child: Container( - width: prefixIconWidth, - height: prefixIconHeight, - child: InkWell( - onTap: () async => - output.setSendAll(), - child: Container( - decoration: BoxDecoration( - color: Theme.of(context) - .primaryTextTheme - .display1 - .color, - borderRadius: - BorderRadius.all( - Radius.circular(6))), - child: Center( - child: Text( - S.of(context).all, - textAlign: - TextAlign.center, - style: TextStyle( - fontSize: 12, - fontWeight: - FontWeight.bold, - color: - Theme.of(context) - .primaryTextTheme - .display1 - .decorationColor))), - ))))]) + ], + ), + ), + Expanded( + child: Stack( + children: [ + BaseTextFormField( + focusNode: cryptoAmountFocus, + controller: cryptoAmountController, + keyboardType: + TextInputType.numberWithOptions( + signed: false, decimal: true), + inputFormatters: [ + FilteringTextInputFormatter.deny(RegExp('[\\-|\\ ]')) + ], + suffixIcon: SizedBox( + width: prefixIconWidth, + ), + hintText: '0.0000', + borderColor: Colors.transparent, + textStyle: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: Colors.white), + placeholderTextStyle: TextStyle( + color: Theme.of(context) + .primaryTextTheme + .headline + .decorationColor, + fontWeight: FontWeight.w500, + fontSize: 14), + validator: output.sendAll + ? sendViewModel.allAmountValidator + : sendViewModel + .amountValidator), + if (!sendViewModel.isBatchSending) Positioned( + top: 2, + right: 0, + child: Container( + width: prefixIconWidth, + height: prefixIconHeight, + child: InkWell( + onTap: () async => + output.setSendAll(), + child: Container( + decoration: BoxDecoration( + color: Theme.of(context) + .primaryTextTheme + .display1 + .color, + borderRadius: + BorderRadius.all( + Radius.circular(6))), + child: Center( + child: Text( + S.of(context).all, + textAlign: + TextAlign.center, + style: TextStyle( + fontSize: 12, + fontWeight: + FontWeight.bold, + color: + Theme.of(context) + .primaryTextTheme + .display1 + .decorationColor))), + ))))]), + ), + ], + ) )), + Divider(height: 1,color: Theme.of(context) + .primaryTextTheme + .headline + .decorationColor), Observer( builder: (_) => Padding( padding: EdgeInsets.only(top: 10),