Files
jwinterm 4818cdf017 brand: de-cake new-ui asset filenames + drop unused cake art
Rename the new-ui assets (source in res/pictures + compiled .svg.vec in
assets/new-ui) and their 3 code refs. Content was already Hash Bags; only the
filenames were cake:
- cake_squircle_icon      -> hash_squircle_icon   (About page)
- cakewallet-wordmark(.light) -> hash-wordmark(.light) (receive QR)
- cake-setting            -> hash-setting          (settings)

Remove unused cake assets (0 refs): by-cakelabs, cakelabs-icon, new-ui cupcake
duplicate, cake_icon.png, cake_wordmark.png. (assets/images/cupcake* kept — that
is Cake's Cupcake hardware-signer device name, a real integration, not branding.)
2026-08-07 03:31:32 -04:00

136 lines
5.9 KiB
Dart

import 'package:hash_wallet/di.dart';
import 'package:hash_wallet/generated/i18n.dart';
import 'package:hash_wallet/src/widgets/hash_image_widget.dart';
import 'package:hash_wallet/themes/core/theme_store.dart';
import 'package:hash_wallet/view_model/wallet_address_list/wallet_address_list_view_model.dart';
import 'package:cw_core/crypto_currency.dart';
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import '../../../src/screens/receive/widgets/qr_image.dart';
class ReceiveQrCode extends StatelessWidget {
ReceiveQrCode({
super.key,
required this.onTap,
required this.largeQrMode,
required this.addressListViewModel,
});
final VoidCallback onTap;
final bool largeQrMode;
final WalletAddressListViewModel addressListViewModel;
static const double largeQrModeBottomPadding = 140;
static const Duration animDuration = Duration(milliseconds: 500);
final bool isLightMode = !(getIt.get<ThemeStore>().currentTheme.isDark);
@override
Widget build(BuildContext context) {
final double targetY = largeQrMode ? largeQrModeBottomPadding+50 : 0;
final double resolvedSize = MediaQuery.of(context).size.width * 0.5;
final double resolvedScale = largeQrMode ? 1.7 : 1;
return Stack(
alignment: Alignment.topCenter,
children: [
AnimatedSlide(
curve: Curves.easeOutCubic,
duration: animDuration,
offset: largeQrMode ? Offset(0, -1) : Offset.zero,
child: AnimatedOpacity(
duration: animDuration,
opacity: largeQrMode ? 1 : 0,
child: HashImageWidget(imageUrl:
isLightMode
? "assets/new-ui/hash-wordmark-light.svg"
: "assets/new-ui/hash-wordmark.svg",
height: 45,
)),
),
GestureDetector(
onTap: onTap,
behavior: HitTestBehavior.opaque,
child: TweenAnimationBuilder<double>(
tween: Tween<double>(begin: 0, end: targetY),
duration: animDuration,
curve: Curves.easeOutCubic,
builder: (context, value, child) {
return Transform.translate(
offset: Offset(0, value),
child: child,
);
},
child: Observer(
builder: (_) => Column(
children: [
AnimatedScale(
curve: Curves.easeOutCubic,
alignment: Alignment.bottomCenter,
scale: resolvedScale,
duration: animDuration,
child: AnimatedContainer(
duration: animDuration,
curve: Curves.easeOutCubic,
width: resolvedSize,
height: resolvedSize,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
color: Colors.white,
),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.vertical(top: Radius.circular(20)),
color: addressListViewModel.hasPayjoin && !largeQrMode
? Theme.of(context).colorScheme.surfaceContainer
: Colors.transparent),
child: ClipRRect(
borderRadius: BorderRadius.circular(20),
child: Observer(
builder: (_) => QrImage(
data: addressListViewModel.uri.toString(),
size: resolvedSize,
embeddedImagePath:
addressListViewModel.tokenCurrency != null
? addressListViewModel.tokenCurrency ==
CryptoCurrency.btcln
? addressListViewModel.qrImage
: addressListViewModel.tokenCurrency!.iconPath
: addressListViewModel.qrImage,
))),
),
),
),
if (addressListViewModel.hasPayjoin)
Opacity(
opacity: largeQrMode ? 0 : 1,
child: Container(
width: resolvedSize,
decoration: BoxDecoration(
borderRadius: BorderRadius.vertical(bottom: Radius.circular(16)),
color: Theme.of(context).colorScheme.surfaceContainer),
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 2.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 4,
children: [
HashImageWidget(imageUrl:"assets/new-ui/payjoin.svg"),
Text(S.of(context).payjoin_enabled)
],
),
))),
AnimatedSize(
duration: animDuration,
curve: Curves.easeOutCubic,
child: SizedBox(height: largeQrMode ? largeQrModeBottomPadding+40 : 0))
],
),
)),
),
],
);
}
}