diff --git a/assets/fonts/Sriracha-Regular.ttf b/assets/fonts/Sriracha-Regular.ttf new file mode 100644 index 0000000..c74f555 Binary files /dev/null and b/assets/fonts/Sriracha-Regular.ttf differ diff --git a/lib/features/dashboard/screens/dashboard_screen.dart b/lib/features/dashboard/screens/dashboard_screen.dart index 612fbcb..9a33be9 100644 --- a/lib/features/dashboard/screens/dashboard_screen.dart +++ b/lib/features/dashboard/screens/dashboard_screen.dart @@ -9,6 +9,7 @@ import 'package:kmobile/features/fund_transfer/screens/fund_transfer_beneficiary import 'package:kmobile/features/quick_pay/screens/quick_pay_screen.dart'; import 'package:kmobile/src/preferences/preference.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart'; +import 'package:google_fonts/google_fonts.dart'; class DashboardScreen extends StatefulWidget { const DashboardScreen({super.key}); @@ -20,13 +21,42 @@ class DashboardScreen extends StatefulWidget { class _DashboardScreenState extends State { // Mock data for transactions final List> transactions = [ - {'name': 'Raj Kumar', 'amount': '₹1,000', 'date': '09 March, 2025 16:04', 'type': 'in'}, - {'name': 'Sunita Joshi', 'amount': '₹1,45,000', 'date': '07 March, 2025 16:04', 'type': 'out'}, - {'name': 'Manoj Singh', 'amount': '₹2,400', 'date': '07 March, 2025 16:04', 'type': 'in'}, - {'name': 'Raj Kumar', 'amount': '₹11,500', 'date': '09 March, 2025 16:04', 'type': 'in'}, + { + 'name': 'Raj Kumar', + 'amount': '₹1,000', + 'date': '09 March, 2025 16:04', + 'type': 'in' + }, + { + 'name': 'Sunita Joshi', + 'amount': '₹1,45,000', + 'date': '07 March, 2025 16:04', + 'type': 'out' + }, + { + 'name': 'Manoj Singh', + 'amount': '₹2,400', + 'date': '07 March, 2025 16:04', + 'type': 'in' + }, + { + 'name': 'Raj Kumar', + 'amount': '₹11,500', + 'date': '09 March, 2025 16:04', + 'type': 'in' + }, {'name': 'Manoj Singh', 'amount': '₹1,000', 'date': '', 'type': 'in'}, ]; + List accountNumbers = [ + '0300015678903456', + '0300015678903678', + '0300015678903325', + ]; + + String selectedAccount = '0300015678903456'; + bool isVisible = false; + @override Widget build(BuildContext context) { return Scaffold( @@ -34,8 +64,12 @@ class _DashboardScreenState extends State { appBar: AppBar( backgroundColor: const Color(0xfff5f9fc), automaticallyImplyLeading: false, - title: const Text('kMobile', style: TextStyle(color: Colors.blueAccent, - fontWeight: FontWeight.w500),), + title: Text( + 'kMobile', + style: TextStyle( + color: Theme.of(context).primaryColor, + fontWeight: FontWeight.w500), + ), actions: [ // IconButton( // icon: const Icon(Icons.notifications_outlined), @@ -47,12 +81,15 @@ class _DashboardScreenState extends State { padding: const EdgeInsets.only(right: 10.0), child: InkWell( borderRadius: BorderRadius.circular(20), - onTap: (){ - Navigator.push(context, MaterialPageRoute( - builder: (context) => const Preference())); + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const Preference())); }, child: const CircleAvatar( - backgroundImage: AssetImage('assets/images/avatar.jpg'), // Replace with your image + backgroundImage: AssetImage('assets/images/avatar.jpg'), + // Replace with your image radius: 20, ), ), @@ -66,45 +103,91 @@ class _DashboardScreenState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ + Padding( + padding: const EdgeInsets.only(left: 8.0), + child: Text( + "Hi Trina Bakshi", + style: GoogleFonts.sriracha().copyWith(fontSize: 20), + ), + ), const SizedBox(height: 16), // Account Info Card Container( - padding: const EdgeInsets.all(16), + padding: const EdgeInsets.all(24), decoration: BoxDecoration( - color: Colors.blue[700], + color: Theme.of(context).primaryColor, borderRadius: BorderRadius.circular(16), ), - child: const Column( + child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ - Text("Account Number: ", style: - TextStyle(color: Colors.white, fontSize: 12)), - Text("03000156789462302", style: - TextStyle(color: Colors.white, fontSize: 14)), - Padding( - padding: EdgeInsets.only(left: 5.0), - child: Icon(Symbols.keyboard_arrow_down, color: Colors.white), + const Text("Account Number: ", + style: + TextStyle(color: Colors.white, fontSize: 12)), + DropdownButton( + value: selectedAccount, + dropdownColor: Theme.of(context).primaryColor, + underline: const SizedBox(), + icon: const Icon(Icons.keyboard_arrow_down), + iconEnabledColor: Colors.white, + style: const TextStyle( + color: Colors.white, fontSize: 14), + items: accountNumbers.map((String acc) { + return DropdownMenuItem( + value: acc, + child: Text(acc, + style: const TextStyle( + color: Colors.white, fontSize: 14)), + ); + }).toList(), + onChanged: (String? newValue) { + setState(() { + selectedAccount = newValue!; + }); + }, ), ], ), - SizedBox(height: 15), + const SizedBox(height: 15), Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisAlignment: MainAxisAlignment.start, children: [ - Text("₹ *****", style: TextStyle(color: Colors.white, - fontSize: 24, fontWeight: FontWeight.w700)), - Icon(Symbols.visibility_lock, color: Colors.white), + const Text("₹ ", + style: const TextStyle( + color: Colors.white, + fontSize: 40, + fontWeight: FontWeight.w700)), + Text(isVisible ? "1,23,456" : "*****", + style: const TextStyle( + color: Colors.white, + fontSize: 30, + fontWeight: FontWeight.w700)), + const Spacer(), + InkWell( + onTap: () { + setState(() { + isVisible = !isVisible; + }); + }, + child: Icon( + isVisible + ? Symbols.visibility_lock + : Symbols.visibility, + color: Colors.white)), ], ), - SizedBox(height: 20), + const SizedBox(height: 20), ], ), ), const SizedBox(height: 18), - const Text('Quick Links', style: TextStyle(fontSize: 15),), + const Text( + 'Quick Links', + style: TextStyle(fontSize: 15), + ), const SizedBox(height: 16), // Quick Links @@ -114,44 +197,58 @@ class _DashboardScreenState extends State { physics: const NeverScrollableScrollPhysics(), children: [ _buildQuickLink(Symbols.id_card, "Customer \n Info", () { - Navigator.push(context, MaterialPageRoute( - builder: (context) => const CustomerInfoScreen())); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const CustomerInfoScreen())); }), - _buildQuickLink(Symbols.currency_rupee, "Quick \n Pay", - () { - Navigator.push(context, MaterialPageRoute( - builder: (context) => const QuickPayScreen())); - }), - _buildQuickLink(Symbols.send_money, "Fund \n Transfer", - () { - Navigator.push(context, MaterialPageRoute( - builder: (context) => const FundTransferBeneficiaryScreen())); - }), - _buildQuickLink(Symbols.server_person, "Account \n Info", - (){ - Navigator.push(context, MaterialPageRoute( + _buildQuickLink(Symbols.currency_rupee, "Quick \n Pay", () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const QuickPayScreen())); + }), + _buildQuickLink(Symbols.send_money, "Fund \n Transfer", () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + const FundTransferBeneficiaryScreen())); + }), + _buildQuickLink(Symbols.server_person, "Account \n Info", () { + Navigator.push( + context, + MaterialPageRoute( builder: (context) => const AccountInfoScreen())); - }), + }), _buildQuickLink(Symbols.receipt_long, "Account \n History", - () { - Navigator.push(context, MaterialPageRoute( - builder: (context) => const AccountStatementScreen())); - }), - _buildQuickLink(Symbols.checkbook, "Handle \n Cheque", - () { - Navigator.push(context, MaterialPageRoute( - builder: (context) => const ChequeManagementScreen())); - }), - _buildQuickLink(Icons.group, "Manage \n Beneficiary", - () { - Navigator.push(context, MaterialPageRoute( - builder: (context) => const ManageBeneficiariesScreen())); - }), - _buildQuickLink(Symbols.support_agent, "Contact \n Us", - () { - Navigator.push(context, MaterialPageRoute( - builder: (context) => const EnquiryScreen())); - }), + () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + const AccountStatementScreen())); + }), + _buildQuickLink(Symbols.checkbook, "Handle \n Cheque", () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + const ChequeManagementScreen())); + }), + _buildQuickLink(Icons.group, "Manage \n Beneficiary", () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + const ManageBeneficiariesScreen())); + }), + _buildQuickLink(Symbols.support_agent, "Contact \n Us", () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const EnquiryScreen())); + }), ], ), const SizedBox(height: 10), @@ -159,16 +256,20 @@ class _DashboardScreenState extends State { // Recent Transactions const Align( alignment: Alignment.centerLeft, - child: Text("Recent Transactions", style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), + child: Text("Recent Transactions", + style: + TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), ), ...transactions.map((tx) => ListTile( - leading: Icon(tx['type'] == 'in' ? Symbols.call_received : Symbols.call_made, color: tx['type'] == 'in' ? Colors.green : Colors.red), - title: Text(tx['name']!), - subtitle: Text(tx['date']!), - trailing: Text(tx['amount']!), - )), - - + leading: Icon( + tx['type'] == 'in' + ? Symbols.call_received + : Symbols.call_made, + color: tx['type'] == 'in' ? Colors.green : Colors.red), + title: Text(tx['name']!), + subtitle: Text(tx['date']!), + trailing: Text(tx['amount']!), + )), ], ), ), @@ -182,11 +283,13 @@ class _DashboardScreenState extends State { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Icon(icon, size: 30, color: Colors.blue[700]), + Icon(icon, size: 30, color: Theme.of(context).primaryColor), const SizedBox(height: 4), - Text(label, textAlign: TextAlign.center, style: const TextStyle(fontSize: 12)), + Text(label, + textAlign: TextAlign.center, + style: const TextStyle(fontSize: 12)), ], ), ); } -} \ No newline at end of file +} diff --git a/pubspec.lock b/pubspec.lock index c639059..2529681 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -65,6 +65,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.19.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" + url: "https://pub.dev" + source: hosted + version: "3.0.6" cupertino_icons: dependency: "direct main" description: @@ -245,6 +253,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.3" + google_fonts: + dependency: "direct main" + description: + name: google_fonts + sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82 + url: "https://pub.dev" + source: hosted + version: "6.2.1" http: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 838fb81..ec152eb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -54,6 +54,7 @@ dependencies: path_provider: ^2.1.5 flutter_swipe_button: ^2.1.3 provider: ^6.1.5 + google_fonts: ^6.2.1 @@ -102,6 +103,12 @@ flutter: - asset: assets/fonts/Rubik-Regular.ttf - asset: assets/fonts/Rubik-Bold.ttf weight: 700 + + - family: Sriracha + fonts: + - asset: assets/fonts/Sriracha-Regular.ttf + + # style: italic # - family: Trajan Pro # fonts: