💄 Optimized wallet screen

This commit is contained in:
2025-10-04 20:38:42 +08:00
parent 5dbe7371cb
commit 44dbfc36d9
4 changed files with 31 additions and 36 deletions

View File

@@ -481,6 +481,7 @@
"pinCode": "PIN Code", "pinCode": "PIN Code",
"biometric": "Biometric", "biometric": "Biometric",
"enterPinToConfirm": "Enter your 6-digit PIN to confirm payment", "enterPinToConfirm": "Enter your 6-digit PIN to confirm payment",
"enterPin": "Enter your PIN code",
"clearPin": "Clear PIN", "clearPin": "Clear PIN",
"useBiometricToConfirm": "Use biometric authentication to confirm payment", "useBiometricToConfirm": "Use biometric authentication to confirm payment",
"touchSensorToAuthenticate": "Touch the sensor to authenticate", "touchSensorToAuthenticate": "Touch the sensor to authenticate",

View File

@@ -285,37 +285,6 @@ class _CreateFundSheetState extends State<CreateFundSheet> {
), ),
); );
}), }),
if (selectedRecipients.length < 10)
OutlinedButton.icon(
onPressed: () async {
final recipient =
await showModalBottomSheet<SnAccount>(
context: context,
useRootNavigator: true,
isScrollControlled: true,
builder:
(context) =>
const AccountPickerSheet(),
);
if (recipient != null &&
!selectedRecipients.contains(
recipient,
)) {
setState(
() =>
selectedRecipients.add(recipient),
);
}
},
icon: const Icon(Icons.person_add),
label: Text('addRecipient'.tr()),
style: OutlinedButton.styleFrom(
minimumSize: const Size(
double.infinity,
48,
),
),
).padding(all: 16),
], ],
) )
: Column( : Column(
@@ -470,7 +439,7 @@ class _CreateFundSheetState extends State<CreateFundSheet> {
bottom: MediaQuery.of(context).viewInsets.bottom, bottom: MediaQuery.of(context).viewInsets.bottom,
), ),
child: SheetScaffold( child: SheetScaffold(
titleText: 'enterPinToConfirm'.tr(), titleText: 'enterPin'.tr(),
heightFactor: 0.5, heightFactor: 0.5,
child: Padding( child: Padding(
padding: const EdgeInsets.all(20), padding: const EdgeInsets.all(20),
@@ -481,7 +450,7 @@ class _CreateFundSheetState extends State<CreateFundSheet> {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Text( Text(
'enterPinToConfirm'.tr(), 'enterPinToConfirmPayment'.tr(),
style: Theme.of(context).textTheme.titleMedium style: Theme.of(context).textTheme.titleMedium
?.copyWith(fontWeight: FontWeight.w500), ?.copyWith(fontWeight: FontWeight.w500),
textAlign: TextAlign.center, textAlign: TextAlign.center,
@@ -862,6 +831,29 @@ class WalletScreen extends HookConsumerWidget {
return 'walletCurrency${isShort ? 'Short' : ''}${currency[0].toUpperCase()}${currency.substring(1).toLowerCase()}'; return 'walletCurrency${isShort ? 'Short' : ''}${currency[0].toUpperCase()}${currency.substring(1).toLowerCase()}';
} }
List<SnWalletPocket> _getAllCurrencies(List<SnWalletPocket> pockets) {
final allCurrencies = <String>{};
allCurrencies.addAll(kCurrencyIconData.keys);
allCurrencies.addAll(pockets.map((p) => p.currency));
return allCurrencies.map((currency) {
final existingPocket = pockets.firstWhere(
(p) => p.currency == currency,
orElse:
() => SnWalletPocket(
id: '',
currency: currency,
amount: 0.0,
walletId: '',
createdAt: DateTime.now(),
updatedAt: DateTime.now(),
deletedAt: null,
),
);
return existingPocket;
}).toList();
}
return AppScaffold( return AppScaffold(
appBar: AppBar( appBar: AppBar(
title: Text('wallet').tr(), title: Text('wallet').tr(),
@@ -908,7 +900,7 @@ class WalletScreen extends HookConsumerWidget {
margin: EdgeInsets.zero, margin: EdgeInsets.zero,
child: Column( child: Column(
children: [ children: [
...data.pockets.map( ..._getAllCurrencies(data.pockets).map(
(pocket) => ListTile( (pocket) => ListTile(
leading: Icon( leading: Icon(
kCurrencyIconData[pocket.currency] ?? kCurrencyIconData[pocket.currency] ??
@@ -932,6 +924,8 @@ class WalletScreen extends HookConsumerWidget {
).padding(horizontal: 12, top: 12), ).padding(horizontal: 12, top: 12),
), ),
SliverGap(8),
// Tab Bar // Tab Bar
SliverToBoxAdapter( SliverToBoxAdapter(
child: TabBar( child: TabBar(

View File

@@ -188,7 +188,7 @@ Add these keys to your localization files:
"description": "Description", "description": "Description",
"pinCode": "PIN Code", "pinCode": "PIN Code",
"biometric": "Biometric", "biometric": "Biometric",
"enterPinToConfirm": "Enter your 6-digit PIN to confirm payment", "enterPinToConfirmPayment": "Enter your 6-digit PIN to confirm payment",
"clearPin": "Clear PIN", "clearPin": "Clear PIN",
"useBiometricToConfirm": "Use biometric authentication to confirm payment", "useBiometricToConfirm": "Use biometric authentication to confirm payment",
"touchSensorToAuthenticate": "Touch the sensor to authenticate", "touchSensorToAuthenticate": "Touch the sensor to authenticate",

View File

@@ -385,7 +385,7 @@ class _PaymentContentState extends ConsumerState<_PaymentContent> {
return Column( return Column(
children: [ children: [
Text( Text(
'enterPinToConfirm'.tr(), 'enterPinToConfirmPayment'.tr(),
style: Theme.of( style: Theme.of(
context, context,
).textTheme.titleMedium?.copyWith(fontWeight: FontWeight.w500), ).textTheme.titleMedium?.copyWith(fontWeight: FontWeight.w500),