diff --git a/assets/images/bch_chain_qr.svg b/assets/images/bch_chain_qr.svg new file mode 100644 index 000000000..d8b52f65d --- /dev/null +++ b/assets/images/bch_chain_qr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/images/btc_chain_qr.svg b/assets/images/btc_chain_qr.svg new file mode 100644 index 000000000..d6156bd59 --- /dev/null +++ b/assets/images/btc_chain_qr.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/dcr_chain_qr.svg b/assets/images/dcr_chain_qr.svg new file mode 100644 index 000000000..14d518f03 --- /dev/null +++ b/assets/images/dcr_chain_qr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/images/deuro_icon.svg b/assets/images/deuro_icon.svg new file mode 100644 index 000000000..010ffd65f --- /dev/null +++ b/assets/images/deuro_icon.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/doge_chain_qr.svg b/assets/images/doge_chain_qr.svg new file mode 100644 index 000000000..5565af70f --- /dev/null +++ b/assets/images/doge_chain_qr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/images/eth_chain_mono.png b/assets/images/eth_chain_mono.png deleted file mode 100644 index 2975a4ad7..000000000 Binary files a/assets/images/eth_chain_mono.png and /dev/null differ diff --git a/assets/images/eth_chain_mono.svg b/assets/images/eth_chain_mono.svg new file mode 100644 index 000000000..64e86da17 --- /dev/null +++ b/assets/images/eth_chain_mono.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/assets/images/eth_chain_qr.png b/assets/images/eth_chain_qr.png deleted file mode 100644 index de5d46725..000000000 Binary files a/assets/images/eth_chain_qr.png and /dev/null differ diff --git a/assets/images/eth_chain_qr.svg b/assets/images/eth_chain_qr.svg new file mode 100644 index 000000000..755b915c7 --- /dev/null +++ b/assets/images/eth_chain_qr.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/eth_icon.svg b/assets/images/eth_icon.svg new file mode 100644 index 000000000..4dbf07a18 --- /dev/null +++ b/assets/images/eth_icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/eth_pol_icon.png b/assets/images/eth_pol_icon.png deleted file mode 100644 index 346c35318..000000000 Binary files a/assets/images/eth_pol_icon.png and /dev/null differ diff --git a/assets/images/eth_pol_icon.svg b/assets/images/eth_pol_icon.svg new file mode 100644 index 000000000..7c698afd1 --- /dev/null +++ b/assets/images/eth_pol_icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/images/ltc_chain_qr.svg b/assets/images/ltc_chain_qr.svg new file mode 100644 index 000000000..d0ea8a9fa --- /dev/null +++ b/assets/images/ltc_chain_qr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/images/more_tokens.png b/assets/images/more_tokens.png deleted file mode 100644 index 7bedf426a..000000000 Binary files a/assets/images/more_tokens.png and /dev/null differ diff --git a/assets/images/more_tokens.svg b/assets/images/more_tokens.svg new file mode 100644 index 000000000..22896a1dc --- /dev/null +++ b/assets/images/more_tokens.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/pol_chain_mono.png b/assets/images/pol_chain_mono.png deleted file mode 100644 index f06d53723..000000000 Binary files a/assets/images/pol_chain_mono.png and /dev/null differ diff --git a/assets/images/pol_chain_mono.svg b/assets/images/pol_chain_mono.svg new file mode 100644 index 000000000..78698a380 --- /dev/null +++ b/assets/images/pol_chain_mono.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/pol_chain_qr.png b/assets/images/pol_chain_qr.png deleted file mode 100644 index 72699ecca..000000000 Binary files a/assets/images/pol_chain_qr.png and /dev/null differ diff --git a/assets/images/pol_chain_qr.svg b/assets/images/pol_chain_qr.svg new file mode 100644 index 000000000..7c5c8ee13 --- /dev/null +++ b/assets/images/pol_chain_qr.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/pol_icon.png b/assets/images/pol_icon.png deleted file mode 100644 index c7370f959..000000000 Binary files a/assets/images/pol_icon.png and /dev/null differ diff --git a/assets/images/pol_icon.svg b/assets/images/pol_icon.svg new file mode 100644 index 000000000..bed187b6d --- /dev/null +++ b/assets/images/pol_icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/images/sol_chain_mono.png b/assets/images/sol_chain_mono.png deleted file mode 100644 index 614943308..000000000 Binary files a/assets/images/sol_chain_mono.png and /dev/null differ diff --git a/assets/images/sol_chain_mono.svg b/assets/images/sol_chain_mono.svg new file mode 100644 index 000000000..39b172003 --- /dev/null +++ b/assets/images/sol_chain_mono.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/sol_chain_qr.png b/assets/images/sol_chain_qr.png deleted file mode 100644 index ca8b568a6..000000000 Binary files a/assets/images/sol_chain_qr.png and /dev/null differ diff --git a/assets/images/sol_chain_qr.svg b/assets/images/sol_chain_qr.svg new file mode 100644 index 000000000..f6af61276 --- /dev/null +++ b/assets/images/sol_chain_qr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/images/sol_icon.svg b/assets/images/sol_icon.svg new file mode 100644 index 000000000..2383c5fef --- /dev/null +++ b/assets/images/sol_icon.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/trx_chain_mono.png b/assets/images/trx_chain_mono.png deleted file mode 100644 index 0fff86151..000000000 Binary files a/assets/images/trx_chain_mono.png and /dev/null differ diff --git a/assets/images/trx_chain_mono.svg b/assets/images/trx_chain_mono.svg new file mode 100644 index 000000000..e8891cd41 --- /dev/null +++ b/assets/images/trx_chain_mono.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/trx_chain_qr.png b/assets/images/trx_chain_qr.png deleted file mode 100644 index 161159645..000000000 Binary files a/assets/images/trx_chain_qr.png and /dev/null differ diff --git a/assets/images/trx_chain_qr.svg b/assets/images/trx_chain_qr.svg new file mode 100644 index 000000000..d16ffad53 --- /dev/null +++ b/assets/images/trx_chain_qr.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/trx_icon.svg b/assets/images/trx_icon.svg new file mode 100644 index 000000000..1ffb5f5ab --- /dev/null +++ b/assets/images/trx_icon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/assets/images/usdc_icon.svg b/assets/images/usdc_icon.svg new file mode 100644 index 000000000..fba88de0e --- /dev/null +++ b/assets/images/usdc_icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/assets/images/usdt_wallet_icon.png b/assets/images/usdt_wallet_icon.png deleted file mode 100644 index 4fe26c16e..000000000 Binary files a/assets/images/usdt_wallet_icon.png and /dev/null differ diff --git a/assets/images/usdt_wallet_icon.svg b/assets/images/usdt_wallet_icon.svg new file mode 100644 index 000000000..fab9840d9 --- /dev/null +++ b/assets/images/usdt_wallet_icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/wow_chain_qr.svg b/assets/images/wow_chain_qr.svg new file mode 100644 index 000000000..fd55a6233 --- /dev/null +++ b/assets/images/wow_chain_qr.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/assets/images/xmr_chain_qr.svg b/assets/images/xmr_chain_qr.svg new file mode 100644 index 000000000..c7b6f0fc9 --- /dev/null +++ b/assets/images/xmr_chain_qr.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/xno_chain_qr.svg b/assets/images/xno_chain_qr.svg new file mode 100644 index 000000000..f6dc53c02 --- /dev/null +++ b/assets/images/xno_chain_qr.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/images/zano_chain_mono.png b/assets/images/zano_chain_mono.png deleted file mode 100644 index 0e8844c69..000000000 Binary files a/assets/images/zano_chain_mono.png and /dev/null differ diff --git a/assets/images/zano_chain_mono.svg b/assets/images/zano_chain_mono.svg new file mode 100644 index 000000000..902bda58c --- /dev/null +++ b/assets/images/zano_chain_mono.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/zano_chain_qr.png b/assets/images/zano_chain_qr.png deleted file mode 100644 index 73928fe4e..000000000 Binary files a/assets/images/zano_chain_qr.png and /dev/null differ diff --git a/assets/images/zano_chain_qr.svg b/assets/images/zano_chain_qr.svg new file mode 100644 index 000000000..4512e48ce --- /dev/null +++ b/assets/images/zano_chain_qr.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/zano_icon.svg b/assets/images/zano_icon.svg new file mode 100644 index 000000000..aca0499a9 --- /dev/null +++ b/assets/images/zano_icon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/lib/di.dart b/lib/di.dart index 8488a3866..8aadf9675 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -1503,9 +1503,9 @@ Future setup({ themeStore: getIt.get(), )); - getIt.registerFactoryParam( - (AnonpayInfoBase anonpayInvoiceInfo, _) => - AnonPayReceivePage(invoiceInfo: anonpayInvoiceInfo)); + getIt.registerFactoryParam( + (AnonPayReceivePageArgs anonpayReceivePageArgs, _) => + AnonPayReceivePage(args: anonpayReceivePageArgs)); getIt.registerFactoryParam( (AnonpayInvoiceInfo anonpayInvoiceInfo, _) => AnonpayDetailsPage( diff --git a/lib/router.dart b/lib/router.dart index 1577abedc..ad43badf2 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -1,6 +1,5 @@ import 'dart:io'; -import 'package:cake_wallet/anonpay/anonpay_info_base.dart'; import 'package:cake_wallet/anonpay/anonpay_invoice_info.dart'; import 'package:cake_wallet/core/new_wallet_arguments.dart'; import 'package:cake_wallet/order/order.dart'; @@ -766,9 +765,9 @@ Route createRoute(RouteSettings settings) { return CupertinoPageRoute(builder: (_) => getIt.get(param1: args)); case Routes.anonPayReceivePage: - final anonInvoiceViewData = settings.arguments as AnonpayInfoBase; + final anonReceivePageArgs = settings.arguments as AnonPayReceivePageArgs; return CupertinoPageRoute( - builder: (_) => getIt.get(param1: anonInvoiceViewData)); + builder: (_) => getIt.get(param1: anonReceivePageArgs)); case Routes.anonPayDetailsPage: final anonInvoiceViewData = settings.arguments as AnonpayInvoiceInfo; diff --git a/lib/src/screens/dashboard/pages/address_page.dart b/lib/src/screens/dashboard/pages/address_page.dart index 4ba73b630..77ec84346 100644 --- a/lib/src/screens/dashboard/pages/address_page.dart +++ b/lib/src/screens/dashboard/pages/address_page.dart @@ -4,6 +4,7 @@ import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/anonpay/anonpay_donation_link_info.dart'; import 'package:cake_wallet/entities/preferences_key.dart'; +import 'package:cake_wallet/src/screens/receive/anonpay_receive_page.dart'; import 'package:cake_wallet/src/widgets/cake_image_widget.dart'; import 'package:cw_core/receive_page_option.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/present_receive_option_picker.dart'; @@ -188,6 +189,7 @@ class AddressPage extends BasePage { imageUrl: addressListViewModel.monoImage, height: 16, width: 16, + color: Theme.of(context).colorScheme.onSurface, ), SizedBox(width: 10), Text( @@ -211,17 +213,31 @@ class AddressPage extends BasePage { Center( child: SizedBox( height: 40, - width: addressListViewModel.walletImages.length * 30.0, + width: addressListViewModel.walletImages.length * 32.0, child: Stack( children: [ for (int i = addressListViewModel.walletImages.length - 1; i >= 0; i--) Positioned( left: i * 25.0, - child: ClipOval( - child: CakeImageWidget( - height: 35, - width: 35, - imageUrl: addressListViewModel.walletImages[i], + child: Container( + decoration: BoxDecoration( + border: Border.all( + color: Theme.of(context).colorScheme.surfaceContainer, + width: 3, + ), + color: Theme.of(context).colorScheme.surfaceContainer, + borderRadius: BorderRadius.circular(24), + ), + child: ClipOval( + child: CakeImageWidget( + height: 35, + width: 35, + imageUrl: addressListViewModel.walletImages[i], + color: addressListViewModel.walletImages.last == + addressListViewModel.walletImages[i] + ? Theme.of(context).colorScheme.onSurfaceVariant + : null, + ), ), ), ), @@ -273,10 +289,13 @@ class AddressPage extends BasePage { Navigator.pushNamed( context, Routes.anonPayReceivePage, - arguments: AnonpayDonationLinkInfo( - clearnetUrl: clearnetUrl, - onionUrl: onionUrl, - address: addressListViewModel.address.address, + arguments: AnonPayReceivePageArgs( + invoiceInfo: AnonpayDonationLinkInfo( + clearnetUrl: clearnetUrl, + onionUrl: onionUrl, + address: addressListViewModel.address.address, + ), + qrImage: addressListViewModel.qrImage, ), ); } else { diff --git a/lib/src/screens/exchange_trade/exchange_trade_external_send_page.dart b/lib/src/screens/exchange_trade/exchange_trade_external_send_page.dart index c1900ca38..92180bb9e 100644 --- a/lib/src/screens/exchange_trade/exchange_trade_external_send_page.dart +++ b/lib/src/screens/exchange_trade/exchange_trade_external_send_page.dart @@ -1,5 +1,8 @@ +import 'package:cake_wallet/entities/qr_view_data.dart'; +import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/src/screens/exchange_trade/widgets/exchange_trade_card_item_widget.dart'; import 'package:cake_wallet/src/screens/receive/widgets/qr_image.dart'; +import 'package:cake_wallet/utils/brightness_util.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:flutter/material.dart'; import 'package:cake_wallet/generated/i18n.dart'; @@ -61,20 +64,39 @@ class ExchangeTradeExternalSendPage extends BasePage { Spacer(flex: 3), Flexible( flex: 6, - child: Center( - child: AspectRatio( - aspectRatio: 1.0, - child: Container( - padding: EdgeInsets.all(5), - decoration: BoxDecoration( - border: Border.all( - width: 3, - color: Theme.of(context).colorScheme.primary, + child: GestureDetector( + onTap: () { + BrightnessUtil.changeBrightnessForFunction( + () async { + await Navigator.pushNamed( + context, + Routes.fullscreenQR, + arguments: QrViewData( + embeddedImagePath: exchangeTradeViewModel.qrImage, + data: exchangeTradeViewModel.trade.inputAddress ?? + fetchingLabel, + ), + ); + }, + ); + }, + child: Center( + child: AspectRatio( + aspectRatio: 1.0, + child: Container( + padding: EdgeInsets.all(5), + decoration: BoxDecoration( + border: Border.all( + width: 3, + color: Theme.of(context).colorScheme.primary, + ), + ), + child: QrImage( + data: exchangeTradeViewModel.trade.inputAddress ?? + fetchingLabel, + embeddedImagePath: exchangeTradeViewModel.qrImage, + size: 230, ), - ), - child: QrImage( - data: - exchangeTradeViewModel.trade.inputAddress ?? fetchingLabel, ), ), ), @@ -88,7 +110,8 @@ class ExchangeTradeExternalSendPage extends BasePage { .where((item) => item.isExternalSendDetail) .map( (item) => TradeItemRowWidget( - key: ValueKey('exchange_trade_external_send_page_send_item_${item.title}_key'), + key: ValueKey( + 'exchange_trade_external_send_page_send_item_${item.title}_key'), currentTheme: currentTheme, title: item.title, value: item.data, diff --git a/lib/src/screens/receive/anonpay_invoice_page.dart b/lib/src/screens/receive/anonpay_invoice_page.dart index 2aba0f207..b883d5fe0 100644 --- a/lib/src/screens/receive/anonpay_invoice_page.dart +++ b/lib/src/screens/receive/anonpay_invoice_page.dart @@ -1,7 +1,9 @@ import 'package:cake_wallet/anonpay/anonpay_donation_link_info.dart'; +import 'package:cake_wallet/anonpay/anonpay_invoice_info.dart'; import 'package:cake_wallet/core/execution_state.dart'; import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/entities/preferences_key.dart'; +import 'package:cake_wallet/src/screens/receive/anonpay_receive_page.dart'; import 'package:cw_core/receive_page_option.dart'; import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/present_receive_option_picker.dart'; @@ -200,12 +202,18 @@ class AnonPayInvoicePage extends BasePage { if (clearnetUrl != null && onionUrl != null && anonInvoicePageViewModel.currentWalletName == donationWalletName) { - Navigator.pushReplacementNamed(context, Routes.anonPayReceivePage, - arguments: AnonpayDonationLinkInfo( + Navigator.pushReplacementNamed( + context, + Routes.anonPayReceivePage, + arguments: AnonPayReceivePageArgs( + invoiceInfo: AnonpayDonationLinkInfo( clearnetUrl: clearnetUrl, onionUrl: onionUrl, address: anonInvoicePageViewModel.address, - )); + ), + qrImage: anonInvoicePageViewModel.qrImage, + ), + ); } break; default: @@ -214,7 +222,14 @@ class AnonPayInvoicePage extends BasePage { reaction((_) => anonInvoicePageViewModel.state, (ExecutionState state) { if (state is ExecutedSuccessfullyState) { - Navigator.pushNamed(context, Routes.anonPayReceivePage, arguments: state.payload); + Navigator.pushNamed( + context, + Routes.anonPayReceivePage, + arguments: AnonPayReceivePageArgs( + invoiceInfo: state.payload as AnonpayInvoiceInfo, + qrImage: anonInvoicePageViewModel.qrImage, + ), + ); } if (state is FailureState) { showPopUp( diff --git a/lib/src/screens/receive/anonpay_receive_page.dart b/lib/src/screens/receive/anonpay_receive_page.dart index c37f78e81..5b6ecc843 100644 --- a/lib/src/screens/receive/anonpay_receive_page.dart +++ b/lib/src/screens/receive/anonpay_receive_page.dart @@ -13,10 +13,18 @@ import 'package:cake_wallet/utils/brightness_util.dart'; import 'package:flutter/material.dart'; import 'package:qr_flutter/qr_flutter.dart' as qr; -class AnonPayReceivePage extends BasePage { +class AnonPayReceivePageArgs { final AnonpayInfoBase invoiceInfo; + final String? qrImage; - AnonPayReceivePage({required this.invoiceInfo}); + AnonPayReceivePageArgs({required this.invoiceInfo, this.qrImage}); +} + +class AnonPayReceivePage extends BasePage { + AnonPayReceivePage({required this.args}) : invoiceInfo = args.invoiceInfo; + + final AnonPayReceivePageArgs args; + final AnonpayInfoBase invoiceInfo; @override String get title => S.current.receive; @@ -104,6 +112,7 @@ class AnonPayReceivePage extends BasePage { arguments: QrViewData( data: invoiceInfo.clearnetUrl, version: qr.QrVersions.auto, + embeddedImagePath: args.qrImage, )); }); }, @@ -123,6 +132,8 @@ class AnonPayReceivePage extends BasePage { child: QrImage( data: invoiceInfo.clearnetUrl, version: qr.QrVersions.auto, + embeddedImagePath: args.qrImage, + size: 230, ), ), ), diff --git a/lib/src/screens/receive/fullscreen_qr_page.dart b/lib/src/screens/receive/fullscreen_qr_page.dart index ebe3eb781..d0f86b4b6 100644 --- a/lib/src/screens/receive/fullscreen_qr_page.dart +++ b/lib/src/screens/receive/fullscreen_qr_page.dart @@ -71,6 +71,7 @@ class FullscreenQRPage extends BasePage { ), ), child: QrImage( + size: 360, data: qrViewData.data, version: qrViewData.version, embeddedImagePath: qrViewData.embeddedImagePath, diff --git a/lib/src/screens/receive/widgets/qr_image.dart b/lib/src/screens/receive/widgets/qr_image.dart index ef4d3ad6a..32dec6aae 100644 --- a/lib/src/screens/receive/widgets/qr_image.dart +++ b/lib/src/screens/receive/widgets/qr_image.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:qr_flutter/qr_flutter.dart' as qr; class QrImage extends StatelessWidget { @@ -22,15 +23,43 @@ class QrImage extends StatelessWidget { @override Widget build(BuildContext context) { - return qr.QrImageView( - data: data, - errorCorrectionLevel: errorCorrectionLevel, - version: version ?? qr.QrVersions.auto, - size: size, - foregroundColor: foregroundColor, - backgroundColor: backgroundColor, - padding: const EdgeInsets.all(8.0), - embeddedImage: AssetImage(embeddedImagePath ?? 'assets/images/qr-cake.png'), - ); + final imagePath = embeddedImagePath ?? 'assets/images/qr-cake.png'; + final isSvg = imagePath.endsWith('.svg'); + + if (isSvg) { + final qrSize = size ?? 100.0; + final logoSize = qrSize * 0.30; + + return Stack( + alignment: Alignment.center, + children: [ + qr.QrImageView( + data: data, + errorCorrectionLevel: errorCorrectionLevel, + version: version ?? qr.QrVersions.auto, + size: qrSize, + foregroundColor: foregroundColor, + backgroundColor: backgroundColor, + padding: const EdgeInsets.all(12.0), + ), + SvgPicture.asset( + imagePath, + width: logoSize * 0.8, + height: logoSize * 0.8, + ), + ], + ); + } else { + return qr.QrImageView( + data: data, + errorCorrectionLevel: errorCorrectionLevel, + version: version ?? qr.QrVersions.auto, + size: size, + foregroundColor: foregroundColor, + backgroundColor: backgroundColor, + padding: const EdgeInsets.all(12.0), + embeddedImage: AssetImage(imagePath), + ); + } } } diff --git a/lib/src/screens/receive/widgets/qr_widget.dart b/lib/src/screens/receive/widgets/qr_widget.dart index 91f2676dc..140c5619f 100644 --- a/lib/src/screens/receive/widgets/qr_widget.dart +++ b/lib/src/screens/receive/widgets/qr_widget.dart @@ -97,17 +97,14 @@ class QRWidget extends StatelessWidget { ), child: Column( children: [ - Container( - clipBehavior: Clip.hardEdge, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12.5), - ), - padding: EdgeInsets.all(3), + ClipRRect( + borderRadius: BorderRadius.circular(12.5), child: AspectRatio( aspectRatio: 1.0, child: QrImage( embeddedImagePath: addressListViewModel.qrImage, data: addressUri.toString(), + size: 230, ), ), ), @@ -199,32 +196,29 @@ class QRWidget extends StatelessWidget { ], ), Observer( - builder: (_) => Padding( - padding: EdgeInsets.only(top: 10), - child: Row( - children: [ - Expanded( - child: Form( - key: formKey, - child: CurrencyAmountTextField( - hasUnderlineBorder: true, - borderWidth: 0.0, - selectedCurrency: _currencyName, - selectedCurrencyDecimals: - addressListViewModel.selectedCurrency.decimals, - amountFocusNode: amountTextFieldFocusNode, - amountController: amountController, - padding: EdgeInsets.only(top: 20, left: _width / 4), - currentThemeType: currentTheme.type, - isAmountEditable: true, - tag: addressListViewModel.selectedCurrency.tag, - onTapPicker: () => _presentPicker(context), - isPickerEnable: true, - ), + builder: (_) => Row( + children: [ + Expanded( + child: Form( + key: formKey, + child: CurrencyAmountTextField( + hasUnderlineBorder: true, + borderWidth: 0.0, + selectedCurrency: _currencyName, + selectedCurrencyDecimals: + addressListViewModel.selectedCurrency.decimals, + amountFocusNode: amountTextFieldFocusNode, + amountController: amountController, + padding: EdgeInsets.only(top: 20, left: _width / 4), + currentThemeType: currentTheme.type, + isAmountEditable: true, + tag: addressListViewModel.selectedCurrency.tag, + onTapPicker: () => _presentPicker(context), + isPickerEnable: true, ), ), - ], - ), + ), + ], )), Divider(height: 1, color: Theme.of(context).colorScheme.outlineVariant), Padding( diff --git a/lib/src/widgets/cake_image_widget.dart b/lib/src/widgets/cake_image_widget.dart index 04d298e2e..5c80083a3 100644 --- a/lib/src/widgets/cake_image_widget.dart +++ b/lib/src/widgets/cake_image_widget.dart @@ -39,6 +39,7 @@ class CakeImageWidget extends StatelessWidget { imageUrl!, height: height, width: width, + color: color, fit: fit ?? BoxFit.contain, ) : Image.asset( @@ -54,6 +55,7 @@ class CakeImageWidget extends StatelessWidget { imageUrl!, height: height, width: width, + color: color, fit: fit ?? BoxFit.contain, placeholderBuilder: (_) { return loadingWidget ?? const Center(child: CircularProgressIndicator()); diff --git a/lib/utils/qr_util.dart b/lib/utils/qr_util.dart new file mode 100644 index 000000000..26b300064 --- /dev/null +++ b/lib/utils/qr_util.dart @@ -0,0 +1,36 @@ +import 'package:cw_core/wallet_type.dart'; + +String getQrImage(WalletType type) { + switch (type) { + case WalletType.ethereum: + return 'assets/images/eth_chain_qr.svg'; + case WalletType.solana: + return 'assets/images/sol_chain_qr.svg'; + case WalletType.polygon: + return 'assets/images/pol_chain_qr.svg'; + case WalletType.tron: + return 'assets/images/trx_chain_qr.svg'; + case WalletType.zano: + return 'assets/images/zano_chain_qr.svg'; + case WalletType.monero: + return 'assets/images/xmr_chain_qr.svg'; + case WalletType.wownero: + return 'assets/images/wow_chain_qr.svg'; + case WalletType.bitcoin: + return 'assets/images/btc_chain_qr.svg'; + case WalletType.litecoin: + return 'assets/images/ltc_chain_qr.svg'; + case WalletType.bitcoinCash: + return 'assets/images/bch_chain_qr.svg'; + case WalletType.nano: + return 'assets/images/xno_chain_qr.svg'; + case WalletType.decred: + return 'assets/images/dcr_chain_qr.svg'; + case WalletType.dogecoin: + return 'assets/images/doge_chain_qr.svg'; + case WalletType.banano: + case WalletType.haven: + case WalletType.none: + return 'assets/images/qr-cake.svg'; + } +} diff --git a/lib/view_model/anon_invoice_page_view_model.dart b/lib/view_model/anon_invoice_page_view_model.dart index 05467bd71..bf519c577 100644 --- a/lib/view_model/anon_invoice_page_view_model.dart +++ b/lib/view_model/anon_invoice_page_view_model.dart @@ -4,6 +4,7 @@ import 'package:cake_wallet/anonpay/anonpay_request.dart'; import 'package:cake_wallet/core/execution_state.dart'; import 'package:cake_wallet/entities/fiat_currency.dart'; import 'package:cake_wallet/entities/preferences_key.dart'; +import 'package:cake_wallet/utils/qr_util.dart'; import 'package:cw_core/receive_page_option.dart'; import 'package:cake_wallet/store/settings_store.dart'; import 'package:cw_core/crypto_currency.dart'; @@ -175,6 +176,9 @@ abstract class AnonInvoicePageViewModelBase with Store { @computed String get currentWalletName => _wallet.name; + @computed + String get qrImage => getQrImage(_wallet.type); + @action void reset() { selectedCurrency = walletTypeToCryptoCurrency(_wallet.type); diff --git a/lib/view_model/exchange/exchange_trade_view_model.dart b/lib/view_model/exchange/exchange_trade_view_model.dart index bc8be9228..c35519083 100644 --- a/lib/view_model/exchange/exchange_trade_view_model.dart +++ b/lib/view_model/exchange/exchange_trade_view_model.dart @@ -19,6 +19,7 @@ import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/src/screens/exchange_trade/exchange_trade_item.dart'; import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart'; import 'package:cake_wallet/store/dashboard/trades_store.dart'; +import 'package:cake_wallet/utils/qr_util.dart'; import 'package:cake_wallet/view_model/send/fees_view_model.dart'; import 'package:cake_wallet/view_model/send/output.dart'; import 'package:cake_wallet/view_model/send/send_view_model.dart'; @@ -315,4 +316,7 @@ abstract class ExchangeTradeViewModelBase with Store { _isSplToken() || _isTronToken(); } + + @computed + String get qrImage => getQrImage(wallet.type); } diff --git a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart index 0ccea7ca1..7e55137a6 100644 --- a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart +++ b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart @@ -19,6 +19,7 @@ import 'package:cake_wallet/store/dashboard/fiat_conversion_store.dart'; import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/store/yat/yat_store.dart'; import 'package:cake_wallet/tron/tron.dart'; +import 'package:cake_wallet/utils/qr_util.dart'; import 'package:cake_wallet/zano/zano.dart'; import 'package:cake_wallet/utils/list_item.dart'; import 'package:cake_wallet/view_model/wallet_address_list/wallet_account_list_header.dart'; @@ -622,38 +623,38 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo switch (wallet.type) { case WalletType.ethereum: return [ - 'assets/images/eth_icon.png', - 'assets/images/usdc_icon.png', - 'assets/images/usdt_wallet_icon.png', - 'assets/images/deuro_icon.png', - 'assets/images/more_tokens.png', + 'assets/images/eth_icon.svg', + 'assets/images/usdc_icon.svg', + 'assets/images/usdt_wallet_icon.svg', + 'assets/images/deuro_icon.svg', + 'assets/images/more_tokens.svg', ]; case WalletType.solana: return [ - 'assets/images/sol_icon.png', - 'assets/images/usdc_icon.png', - 'assets/images/usdt_wallet_icon.png', - 'assets/images/more_tokens.png', + 'assets/images/sol_icon.svg', + 'assets/images/usdc_icon.svg', + 'assets/images/usdt_wallet_icon.svg', + 'assets/images/more_tokens.svg', ]; case WalletType.polygon: return [ - 'assets/images/pol_icon.png', - 'assets/images/eth_pol_icon.png', - 'assets/images/usdc_icon.png', - 'assets/images/usdt_wallet_icon.png', - 'assets/images/more_tokens.png', + 'assets/images/pol_icon.svg', + 'assets/images/eth_pol_icon.svg', + 'assets/images/usdc_icon.svg', + 'assets/images/usdt_wallet_icon.svg', + 'assets/images/more_tokens.svg', ]; case WalletType.tron: return [ - 'assets/images/trx_icon.png', - 'assets/images/usdc_icon.png', - 'assets/images/usdt_wallet_icon.png', - 'assets/images/more_tokens.png', + 'assets/images/trx_icon.svg', + 'assets/images/usdc_icon.svg', + 'assets/images/usdt_wallet_icon.svg', + 'assets/images/more_tokens.svg', ]; case WalletType.zano: return [ - 'assets/images/zano_bg_icon.png', - 'assets/images/more_tokens.png', + 'assets/images/zano_icon.svg', + 'assets/images/more_tokens.svg', ]; default: @@ -662,38 +663,23 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo } @computed - String get qrImage { - switch (type) { - case WalletType.ethereum: - return 'assets/images/eth_chain_qr.png'; - case WalletType.solana: - return 'assets/images/sol_chain_qr.png'; - case WalletType.polygon: - return 'assets/images/pol_chain_qr.png'; - case WalletType.tron: - return 'assets/images/trx_chain_qr.png'; - case WalletType.zano: - return 'assets/images/zano_chain_qr.png'; - default: - return 'assets/images/qr-cake.png'; - } - } + String get qrImage => getQrImage(type); @computed String get monoImage { switch (type) { case WalletType.ethereum: - return 'assets/images/eth_chain_mono.png'; + return 'assets/images/eth_chain_mono.svg'; case WalletType.solana: - return 'assets/images/sol_chain_mono.png'; + return 'assets/images/sol_chain_mono.svg'; case WalletType.polygon: - return 'assets/images/pol_chain_mono.png'; + return 'assets/images/pol_chain_mono.svg'; case WalletType.tron: - return 'assets/images/trx_chain_mono.png'; + return 'assets/images/trx_chain_mono.svg'; case WalletType.zano: - return 'assets/images/zano_chain_mono.png'; + return 'assets/images/zano_chain_mono.svg'; default: - return 'assets/images/eth_chain_mono.png'; + return 'assets/images/eth_chain_mono.svg'; } }