dashboard#1
This commit is contained in:
@@ -97,8 +97,8 @@ class _AccountStatementScreen extends State<AccountStatementScreen> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final now = DateTime.now();
|
final now = DateTime.now();
|
||||||
final maxToDate = fromDate!.add(const Duration(days: 31)).isBefore(now)
|
final maxToDate = fromDate!.add(const Duration(days: 183)).isBefore(now)
|
||||||
? fromDate!.add(const Duration(days: 31))
|
? fromDate!.add(const Duration(days: 183))
|
||||||
: now;
|
: now;
|
||||||
final picked = await showDatePicker(
|
final picked = await showDatePicker(
|
||||||
context: context,
|
context: context,
|
||||||
|
|||||||
@@ -474,9 +474,12 @@ class _DashboardScreenState extends State<DashboardScreen>
|
|||||||
|
|
||||||
// Quick Links
|
// Quick Links
|
||||||
GridView.count(
|
GridView.count(
|
||||||
crossAxisCount: 4,
|
crossAxisCount: 2, // Changed to 2 for two cards in a row
|
||||||
shrinkWrap: true,
|
shrinkWrap: true,
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
|
crossAxisSpacing: 10,
|
||||||
|
mainAxisSpacing: 10,
|
||||||
|
childAspectRatio: 1.2, // Adjusted for better fit with 2 cards
|
||||||
children: [
|
children: [
|
||||||
_buildQuickLink(
|
_buildQuickLink(
|
||||||
Symbols.id_card,
|
Symbols.id_card,
|
||||||
@@ -582,66 +585,6 @@ class _DashboardScreenState extends State<DashboardScreen>
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
const SizedBox(height: 5),
|
const SizedBox(height: 5),
|
||||||
|
|
||||||
// Recent Transactions
|
|
||||||
Text(
|
|
||||||
AppLocalizations.of(context).recentTransactions,
|
|
||||||
style: const TextStyle(fontSize: 17),
|
|
||||||
),
|
|
||||||
const SizedBox(height: 16),
|
|
||||||
if (_txLoading)
|
|
||||||
..._buildTransactionShimmer()
|
|
||||||
else if (_transactions.isNotEmpty)
|
|
||||||
..._transactions.map(
|
|
||||||
(tx) => ListTile(
|
|
||||||
leading: Icon(
|
|
||||||
tx.type == 'CR'
|
|
||||||
? Symbols.call_received
|
|
||||||
: Symbols.call_made,
|
|
||||||
color: tx.type == 'CR'
|
|
||||||
? const Color(0xFF10BB10)
|
|
||||||
: theme.colorScheme.error,
|
|
||||||
),
|
|
||||||
title: Text(
|
|
||||||
tx.date ?? '',
|
|
||||||
style: const TextStyle(fontSize: 15),
|
|
||||||
),
|
|
||||||
subtitle: Text(
|
|
||||||
tx.name != null
|
|
||||||
? (tx.name!.length > 22
|
|
||||||
? tx.name!.substring(0, 22)
|
|
||||||
: tx.name!)
|
|
||||||
: '',
|
|
||||||
style: const TextStyle(fontSize: 12),
|
|
||||||
),
|
|
||||||
trailing: Text(
|
|
||||||
"₹${tx.amount}",
|
|
||||||
style: const TextStyle(fontSize: 17),
|
|
||||||
),
|
|
||||||
onTap: () {
|
|
||||||
Navigator.push(
|
|
||||||
context,
|
|
||||||
MaterialPageRoute(
|
|
||||||
builder: (_) =>
|
|
||||||
TransactionDetailsScreen(transaction: tx),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
)
|
|
||||||
else
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.symmetric(vertical: 24.0),
|
|
||||||
child: Center(
|
|
||||||
child: Text(
|
|
||||||
AppLocalizations.of(context).noTransactions,
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 16,
|
|
||||||
color: Theme.of(context).colorScheme.outline,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -689,28 +632,39 @@ class _DashboardScreenState extends State<DashboardScreen>
|
|||||||
bool disable = false,
|
bool disable = false,
|
||||||
}) {
|
}) {
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
return InkWell(
|
return Card(
|
||||||
onTap: disable ? null : onTap,
|
elevation: 4,
|
||||||
child: Column(
|
shape: RoundedRectangleBorder(
|
||||||
mainAxisSize: MainAxisSize.min,
|
borderRadius: BorderRadius.circular(12.0),
|
||||||
children: [
|
),
|
||||||
Icon(
|
child: InkWell(
|
||||||
icon,
|
onTap: disable ? null : onTap,
|
||||||
size: 30,
|
borderRadius: BorderRadius.circular(12.0),
|
||||||
color: disable
|
child: Column(
|
||||||
? theme.colorScheme.onSurface.withOpacity(0.3)
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
: theme.colorScheme.primary,
|
children: [
|
||||||
grade: 200,
|
Icon(
|
||||||
weight: 700,
|
icon,
|
||||||
),
|
size: 40,
|
||||||
const SizedBox(height: 4),
|
color: disable
|
||||||
Text(
|
? theme.disabledColor
|
||||||
label,
|
: theme.colorScheme.primary,
|
||||||
textAlign: TextAlign.center,
|
),
|
||||||
style: const TextStyle(fontSize: 13),
|
const SizedBox(height: 8),
|
||||||
),
|
Text(
|
||||||
],
|
label,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: theme.textTheme.titleMedium?.copyWith(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: disable
|
||||||
|
? theme.disabledColor
|
||||||
|
: theme.colorScheme.onSurface,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,58 +27,54 @@ class _ServiceScreen extends State<ServiceScreen> {
|
|||||||
),
|
),
|
||||||
body: Stack(
|
body: Stack(
|
||||||
children: [
|
children: [
|
||||||
ListView(
|
Padding(
|
||||||
children: [
|
padding: const EdgeInsets.symmetric(vertical: 16.0),
|
||||||
// ServiceManagementTile(
|
child: Column(
|
||||||
// icon: Symbols.add,
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
// label: AppLocalizations.of(context).accountOpeningDeposit,
|
children: [
|
||||||
// onTap: () {},
|
Expanded(
|
||||||
// disabled: true,
|
child: ServiceManagementTile(
|
||||||
// ),
|
icon: Symbols.captive_portal,
|
||||||
// const Divider(height: 1),
|
label: AppLocalizations.of(context).quickLinks,
|
||||||
// ServiceManagementTile(
|
onTap: () {
|
||||||
// icon: Symbols.add,
|
Navigator.of(context).push(
|
||||||
// label: AppLocalizations.of(context).accountOpeningLoan,
|
MaterialPageRoute(
|
||||||
// onTap: () {},
|
builder: (context) => const QuickLinksScreen()),
|
||||||
// disabled: true,
|
);
|
||||||
// ),
|
},
|
||||||
// const Divider(height: 1),
|
disabled: false,
|
||||||
ServiceManagementTile(
|
),
|
||||||
icon: Symbols.captive_portal,
|
),
|
||||||
label: AppLocalizations.of(context).quickLinks,
|
const SizedBox(height: 16),
|
||||||
onTap: () {
|
Expanded(
|
||||||
Navigator.of(context).push(
|
child: ServiceManagementTile(
|
||||||
MaterialPageRoute(
|
icon: Symbols.question_mark,
|
||||||
builder: (context) => const QuickLinksScreen()),
|
label: AppLocalizations.of(context).faq,
|
||||||
);
|
onTap: () {
|
||||||
},
|
Navigator.of(context).push(
|
||||||
disabled: false,
|
MaterialPageRoute(builder: (context) => const FaqsScreen()),
|
||||||
),
|
);
|
||||||
Divider(height: 1, color: Theme.of(context).dividerColor),
|
},
|
||||||
ServiceManagementTile(
|
disabled: false,
|
||||||
icon: Symbols.question_mark,
|
),
|
||||||
label: AppLocalizations.of(context).faq,
|
),
|
||||||
onTap: () {
|
const SizedBox(height: 16),
|
||||||
Navigator.of(context).push(
|
Expanded(
|
||||||
MaterialPageRoute(builder: (context) => const FaqsScreen()),
|
child: ServiceManagementTile(
|
||||||
);
|
icon: Symbols.location_pin,
|
||||||
},
|
label: "ATM Locator",
|
||||||
disabled: false,
|
onTap: () {
|
||||||
),
|
Navigator.push(
|
||||||
Divider(height: 1, color: Theme.of(context).dividerColor),
|
context,
|
||||||
ServiceManagementTile(
|
MaterialPageRoute(
|
||||||
icon: Symbols.location_pin,
|
builder: (context) => const ATMLocatorScreen()));
|
||||||
label: "ATM Locator",
|
},
|
||||||
onTap: () {
|
disabled: false,
|
||||||
Navigator.push(
|
),
|
||||||
context,
|
),
|
||||||
MaterialPageRoute(
|
// No Spacer() needed here as Expanded children will fill space
|
||||||
builder: (context) => const ATMLocatorScreen()));
|
],
|
||||||
},
|
),
|
||||||
disabled: false,
|
|
||||||
),
|
|
||||||
Divider(height: 1, color: Theme.of(context).dividerColor),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
IgnorePointer(
|
IgnorePointer(
|
||||||
child: Center(
|
child: Center(
|
||||||
@@ -117,23 +113,38 @@ class ServiceManagementTile extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
return ListTile(
|
return Card(
|
||||||
leading: Icon(
|
margin: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 8.0),
|
||||||
icon,
|
shape: RoundedRectangleBorder(
|
||||||
color: disabled ? theme.disabledColor : null,
|
borderRadius: BorderRadius.circular(12.0),
|
||||||
),
|
),
|
||||||
title: Text(
|
elevation: 4, // Add some elevation for better visual separation
|
||||||
label,
|
child: InkWell(
|
||||||
style: TextStyle(
|
onTap: disabled ? null : onTap, // Disable InkWell if the tile is disabled
|
||||||
color: disabled ? theme.disabledColor : null,
|
borderRadius: BorderRadius.circular(12.0),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(vertical: 24.0, horizontal: 16.0),
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
icon,
|
||||||
|
size: 48, // Make icon larger
|
||||||
|
color: disabled ? theme.disabledColor : theme.colorScheme.primary,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 12),
|
||||||
|
Text(
|
||||||
|
label,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: theme.textTheme.titleLarge?.copyWith(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: disabled ? theme.disabledColor : theme.colorScheme.onSurface,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
trailing: Icon(
|
|
||||||
Symbols.arrow_right,
|
|
||||||
size: 20,
|
|
||||||
color: disabled ? theme.disabledColor : null,
|
|
||||||
),
|
|
||||||
onTap: disabled ? null : onTap,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user