Wallet update for correct name and symbol appearance

This commit is contained in:
Arseni
2025-12-16 19:37:28 +03:00
parent 67b52af150
commit 9a90e6a03b
12 changed files with 111 additions and 117 deletions

View File

@@ -34,8 +34,8 @@ class WalletCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
BalanceHeader(
walletName: wallet.name,
walletId: wallet.walletUserID,
walletNetwork: wallet.network,
tokenSymbol: wallet.tokenSymbol,
),
BalanceAmount(
wallet: wallet,

View File

@@ -2,37 +2,46 @@ import 'package:flutter/material.dart';
class BalanceHeader extends StatelessWidget {
final String walletName;
final String walletId;
final String? walletNetwork;
final String? tokenSymbol;
const BalanceHeader({
super.key,
required this.walletName,
required this.walletId,
this.walletNetwork,
this.tokenSymbol,
});
static const double _spacing = 8.0;
@override
Widget build(BuildContext context) {
final textTheme = Theme.of(context).textTheme;
final colorScheme = Theme.of(context).colorScheme;
final symbol = tokenSymbol?.trim();
return Row(
children: [
Text(
walletName,
'Crypto Wallet',
style: textTheme.titleMedium?.copyWith(
color: colorScheme.onSurface,
),
),
const SizedBox(width: _spacing),
Text(
walletId,
style: textTheme.bodySmall?.copyWith(
color: colorScheme.onSurface,
if (symbol != null && symbol.isNotEmpty) ...[
const SizedBox(width: 8),
Container(
padding: const EdgeInsets.symmetric(horizontal: 10, vertical: 6),
decoration: BoxDecoration(
color: colorScheme.primaryContainer,
borderRadius: BorderRadius.circular(999),
),
child: Text(
symbol,
style: textTheme.bodyMedium?.copyWith(
color: colorScheme.onPrimaryContainer,
fontWeight: FontWeight.w600,
),
),
),
),
],
],
);
}

View File

@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:pshared/utils/currency.dart';
import 'package:pweb/generated/i18n/app_localizations.dart';
import 'package:pweb/models/wallet.dart';
import 'package:pweb/pages/dashboard/buttons/balance/amount.dart';
@@ -48,9 +49,21 @@ class WalletCard extends StatelessWidget {
},
),
Text(
wallet.name,
style: theme.textTheme.bodyLarge!.copyWith(fontWeight: FontWeight.w500),
AppLocalizations.of(context)!.paymentTypeCryptoWallet,
style: theme.textTheme.bodyLarge!.copyWith(
fontWeight: FontWeight.w600,
color: theme.colorScheme.onSurface,
),
),
if (wallet.tokenSymbol != null) ...[
const SizedBox(height: 4),
Text(
wallet.tokenSymbol!,
style: theme.textTheme.bodyMedium?.copyWith(
color: theme.colorScheme.onSurfaceVariant,
),
),
],
],
),
),
@@ -60,4 +73,4 @@ class WalletCard extends StatelessWidget {
),
);
}
}
}

View File

@@ -3,114 +3,46 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:pweb/providers/wallets.dart';
import 'package:pweb/widgets/error/snackbar.dart';
import 'package:pweb/generated/i18n/app_localizations.dart';
class WalletEditHeader extends StatefulWidget {
class WalletEditHeader extends StatelessWidget {
const WalletEditHeader({super.key});
@override
State<WalletEditHeader> createState() => _WalletEditHeaderState();
}
class _WalletEditHeaderState extends State<WalletEditHeader> {
bool _isEditing = false;
late TextEditingController _controller;
@override
void initState() {
super.initState();
_controller = TextEditingController();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final provider = context.watch<WalletsProvider>();
final wallet = provider.selectedWallet;
final loc = AppLocalizations.of(context)!;
if (wallet == null) {
return SizedBox.shrink();
return const SizedBox.shrink();
}
final theme = Theme.of(context);
if (!_isEditing) {
_controller.text = wallet.name;
}
return Row(
spacing: 8,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: !_isEditing
? Row(
children: [
Expanded(
child: Text(
wallet.name,
style: theme.textTheme.headlineMedium!.copyWith(
fontWeight: FontWeight.bold,
),
),
),
IconButton(
icon: const Icon(Icons.edit),
onPressed: () {
setState(() {
_isEditing = true;
});
},
),
],
)
: Row(
children: [
Expanded(
child: TextFormField(
controller: _controller,
decoration: InputDecoration(
border: OutlineInputBorder(),
isDense: true,
hintText: loc.walletName,
),
),
),
IconButton(
icon: const Icon(Icons.check),
color: theme.colorScheme.primary,
onPressed: () async {
await executeActionWithNotification(
context: context,
action: () async => await provider.updateWallet(wallet.copyWith(name: _controller.text)),
errorMessage: loc.walletNameUpdateFailed,
successMessage: loc.walletNameSaved,
);
setState(() {
_isEditing = false;
});
},
),
IconButton(
icon: const Icon(Icons.close),
onPressed: () {
_controller.text = wallet.name;
setState(() {
_isEditing = false;
});
},
),
],
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 4,
children: [
Text(
'Crypto Wallet',
style: theme.textTheme.headlineMedium!.copyWith(
fontWeight: FontWeight.bold,
),
),
if (wallet.tokenSymbol != null)
Text(
wallet.tokenSymbol!,
style: theme.textTheme.bodyMedium?.copyWith(
color: theme.colorScheme.onSurfaceVariant,
),
),
],
),
),
],
);

View File

@@ -46,7 +46,7 @@ class WalletTopUpContent extends StatelessWidget {
children: [
WalletTopUpHeader(
onBack: onBack,
walletName: wallet.name,
tokenSymbol: assetLabel,
),
SizedBox(height: dimensions.paddingLarge),
WalletTopUpMeta(

View File

@@ -5,18 +5,24 @@ import 'package:pweb/generated/i18n/app_localizations.dart';
class WalletTopUpHeader extends StatelessWidget {
final VoidCallback onBack;
final String walletName;
final String? tokenSymbol;
const WalletTopUpHeader({
super.key,
required this.onBack,
required this.walletName,
this.tokenSymbol,
});
@override
Widget build(BuildContext context) {
final theme = Theme.of(context);
final loc = AppLocalizations.of(context)!;
final symbol = tokenSymbol?.trim();
final subtitle = [
'Crypto Wallet',
if (symbol != null && symbol.isNotEmpty) symbol,
].join(' · ');
return Row(
children: [
@@ -34,7 +40,7 @@ class WalletTopUpHeader extends StatelessWidget {
),
const SizedBox(height: 4),
Text(
walletName,
subtitle,
style: theme.textTheme.bodyMedium?.copyWith(
color: theme.colorScheme.onSurfaceVariant,
),