💄 Optimized wallet screen
This commit is contained in:
@@ -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",
|
||||||
|
@@ -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(
|
||||||
|
@@ -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",
|
||||||
|
@@ -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),
|
||||||
|
Reference in New Issue
Block a user