From d78c46be9d3067abde2ec009ebd9952879977d50 Mon Sep 17 00:00:00 2001 From: Venba Date: Sat, 30 Mar 2024 17:08:13 +0530 Subject: [PATCH] employee new flow design done --- assets/Group.png | Bin 0 -> 2307 bytes assets/Group_3.png | Bin 0 -> 5297 bytes assets/Vector.png | Bin 0 -> 840 bytes assets/partnerLogo.png | Bin 0 -> 85731 bytes lib/addons.dart | 974 +++++++++++++++++++++++++++++ lib/customAppBar/customAppBar.dart | 36 +- lib/empDetails.dart | 765 ++++++++++++++++++++++ lib/empReview.dart | 906 +++++++++++++++++++++++++++ lib/excel_verification.dart | 667 +++++++++++++------- lib/hrHome.dart | 502 +++++---------- lib/hrLogin.dart | 135 ++-- lib/main.dart | 6 + lib/phone.dart | 178 +++--- lib/verify.dart | 2 +- 14 files changed, 3469 insertions(+), 702 deletions(-) create mode 100644 assets/Group.png create mode 100644 assets/Group_3.png create mode 100644 assets/Vector.png create mode 100644 assets/partnerLogo.png create mode 100644 lib/addons.dart create mode 100644 lib/empDetails.dart create mode 100644 lib/empReview.dart diff --git a/assets/Group.png b/assets/Group.png new file mode 100644 index 0000000000000000000000000000000000000000..77774913ad2b73c2bccbba09ed30a9059b0015d2 GIT binary patch literal 2307 zcmV+e3HqLwWm+jG74}_02C9vy2tT39YK5WA3CuzpNl$ez`)EYKJejk$}{V|XBl6!5p- zb^TFBJxFMZ2M>z=dFHaY0uunOVJf4X;HbLS#u-$y=glfS0PwIcT8m2?QyKN+sD(=q z3<}qa`FAh@JW|yIzis`(YPN}{ND~)bfeAx^&|%DQ z1(~~ASSo?VH6_zIo;4m0*l<0$)ADbNv4L^%xFNFr3x zuhsn8k#&Bilmw(g7QLoZ2AUtfyM{lO!6sVVlZejsdLd7V{BhS})hJ;HBTek1J$upI z9yG4PV9QPu%{zi;Y8r#8C;0}N{`F`xFG}ARmWtkQGZ&{h>D=r*UEQL11Vbd9+ODVb zHdlZdK>eoE-5-V&QaKYFDJbb%pvG2JwYxWa5q|3M`-EseYoZpUqaDZTt@0wRNQ9+ zW7tYpK$50}?qxfz1)?CU2x)*Pj4Nyf)0|3nfKLlO=?p@(4z>0u3CTj_#jxZF1)4bS z39x93hVvSl1+#-%A&3VUK>sqG0Xz8f)p9B;%Y!UW90(!yXOU{m8u5Lgq!%M92PR)0 zXlm1;!joPTA*m0MCoS}0kOKCGhX$I$pfSAZBzdojQTpt)}Mw~a2h&P;V%Fk+~x z%);<`Fiyd>^#xT(46Q-Z@m!(hsOAfvAQ&?+*ZjnJx0W4}6p)=*j6!2sjh=qoRENk4 zuMIPRH={}4CkF-KZE((}Wqk-fhl*!l<`HO3et2(tK;Krw|7tK|^phy8Hh0mi#d){q z7KxXO^1IINn{Ww25}_-MZGB(J_gFd6#q~{LZ`V2!1|H{ICubu$z!qg6%{spt-1pnTy~x8LHqsKaZC`I`2wAS8+KU z3eyR$I2UV^EN>1A7xO!`&$!=Z|93KFz+m*Pe_Ux4Efk@# zK;~^B@$UUB`-=x6#}(DY+VJU6=9K&tT9Ezz8z8KFy|7foc^r~paUq3qT*^-c%l=Es zAT&z%t{0Y(%NJj$ZhreX?xkIK?t!yD%>NsvfKPO{njuL<%$McLf&(MAtLD8y%79UM z@K1{DagiCb`;qb`?lqa7383nefZH@kZ|+GY#Pn4c863t(`Ix*`O%{Z&`|H&9jSen) z%5!w11L@LL-*`H1)LF1Mu9|w>^aVHcC@Lqn%YZ&y%`fetY2Jc_FfF#?zn(OxAE}AP ze60~QBSae#yX0F0U9hXBEg?pMv>5wcjjD15L3uL0Gu$PF^uRQ3lSSN634*F~vXWo~ z?ARuF_l&G&)VNXsJGEH8F56(Yd|0J|dz|Y!X+dcb71}YX-V7Hs-Lw$4$q002ovPDHLkV1kl8Jm&xa literal 0 HcmV?d00001 diff --git a/assets/Group_3.png b/assets/Group_3.png new file mode 100644 index 0000000000000000000000000000000000000000..24d87cded89ad0a63369874c46fec3bc2c9705e0 GIT binary patch literal 5297 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 Vljk>4a-`#+t^$2nuJk1A{{UmRfwTYs literal 0 HcmV?d00001 diff --git a/lib/addons.dart b/lib/addons.dart new file mode 100644 index 0000000..ba4d107 --- /dev/null +++ b/lib/addons.dart @@ -0,0 +1,974 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'customAppBar/customAppBar.dart'; + +class addOnsDetails extends StatefulWidget { + const addOnsDetails({Key? key}) : super(key: key); + + @override + State createState() => _addOnsDetailsState(); +} + +class _addOnsDetailsState extends State { + bool _isSwitched = false; // Declare the _isSwitched variable here + + @override + void initState() { + super.initState(); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: CustomAppBar(), + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.symmetric( + horizontal: MediaQuery.of(context).size.width * + 0.1, // 30% of screen width as horizontal padding + vertical: MediaQuery.of(context).size.height * + 0.03, // 5% of screen height as vertical padding + ), + color: Color(0xFFEFF3F6), + child: Column( + children: [ + Card( + elevation: 0, + child: Container( + width: double.infinity, + height: 75, + padding: EdgeInsets.only( + top: 20, + bottom: 20, + left: 30, + right: 30), // Add padding to the container + child: Row( + children: [ + Expanded( + flex: 6, + child: Container( + width: 150, + height: 150, + alignment: Alignment.centerLeft, + child: Image.asset( + 'assets/Group.png', + width: 80, // Set the width of the image + height: 80, // Set the height of the image + fit: BoxFit.contain, // Adjust the fit as needed + ), + )), + Expanded( + flex: 6, + child: Text( + 'Bharti Airtel', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ) + ], + ), + ), + ), + SizedBox(height: 16), + Card( + elevation: 0, + child: Padding( + padding: EdgeInsets.all(30), + child: Column( + children: [ + Container( + decoration: BoxDecoration( + color: Color( + 0xFFFFF1DD), // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 15, bottom: 15, left: 25, right: 25), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Plan Name', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + 'Group Personal Accident Coverage', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Text( + 'Floater Sum Insured', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + '₹ 3,00,000', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + ], + ), + ), + SizedBox(height: 15), + Container( + padding: EdgeInsets.only( + top: 0, bottom: 0, left: 15, right: 15), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(Icons.arrow_right, + color: Color(0xFFE26728)), // Arrow icon + SizedBox( + width: 10), // Space between icon and text + Expanded( + child: Text( + 'Employee Name • Self • DOB - 22/10/1997', + style: TextStyle( + fontSize: 18, + color: Color(0xFF232526), + ), + ), + ), + ], + ), + ], + ), + ), + ], + ), + )), + SizedBox(height: 16), + Card( + elevation: 0, + child: Padding( + padding: EdgeInsets.all(30), + child: Column( + children: [ + Container( + decoration: BoxDecoration( + color: Color( + 0xFFFFF1DD), // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 15, bottom: 15, left: 25, right: 25), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Plan Name', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + 'Group Medical Coverage', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Text( + 'Floater Sum Insured', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + '₹ 3,00,000', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + ], + ), + ), + SizedBox(height: 15), + Container( + padding: EdgeInsets.only( + top: 0, bottom: 0, left: 15, right: 15), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(Icons.arrow_right, + color: Color(0xFFE26728)), // Arrow icon + SizedBox( + width: 10), // Space between icon and text + Expanded( + child: Text( + 'Employee Name • Self • DOB - 22/10/1997', + style: TextStyle( + fontSize: 18, + color: Color(0xFF232526), + ), + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(Icons.arrow_right, + color: Color(0xFFE26728)), // Arrow icon + SizedBox( + width: 10), // Space between icon and text + Expanded( + child: Text( + 'Spouse Name • Spouse • DOB - 22/10/1997', + style: TextStyle( + fontSize: 18, + color: Color(0xFF232526), + ), + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(Icons.arrow_right, + color: Color(0xFFE26728)), // Arrow icon + SizedBox( + width: 10), // Space between icon and text + Expanded( + child: Text( + 'Sons Name • Son • DOB - 22/10/1997', + style: TextStyle( + fontSize: 18, + color: Color(0xFF232526), + ), + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(Icons.arrow_right, + color: Color(0xFFE26728)), // Arrow icon + SizedBox( + width: 10), // Space between icon and text + Expanded( + child: Text( + 'Daughters Name • Daughter • DOB - 22/10/1997', + style: TextStyle( + fontSize: 18, + color: Color(0xFF232526), + ), + ), + ), + ], + ), + ], + ), + ), + ], + ), + )), + SizedBox(height: 16), + Card( + elevation: 0, + child: Padding( + padding: EdgeInsets.all(30), + child: Column( + children: [ + Container( + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 12, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Add Ons', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + color: Color(0xFF181818)), + ), + Text( + 'Increase your medical cover for your family or add parents or parent in laws by paying additional premium', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + color: Color(0xFF181818), + ), + ), + ], + ))), + ], + ), + ), + ], + ), + )), + SizedBox(height: 16), + Card( + elevation: 0, + child: Padding( + padding: EdgeInsets.all(30), + child: Column( + children: [ + Container( + decoration: BoxDecoration( + color: Color( + 0xFFDDF3FF), // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 25, bottom: 25, left: 25, right: 25), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Add On Name', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + 'Group Medical Coverage - Top Up', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Switch( + value: _isSwitched, + onChanged: (value) { + setState(() { + _isSwitched = value; + // Add your logic here based on the toggle state + }); + }, + activeColor: Color( + 0xFFE26728), // Color when the switch is ON + inactiveTrackColor: Colors + .grey, // Color of the switch track when OFF + ), + ], + ))), + ], + ), + ), + SizedBox(height: 15), + Container( + decoration: BoxDecoration( + color: Color( + 0xFFDDF3FF), // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 25, bottom: 25, left: 25, right: 25), + child: Column( + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Add On Name', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + 'Group Medical Coverage - Add Parents', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + Expanded( + flex: 3, + child: Container( + width: 50, + alignment: Alignment.center, + child: Column( + mainAxisAlignment: + MainAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.center, + children: [ + DropdownButtonFormField( + onChanged: (value) {}, + decoration: InputDecoration( + border: + OutlineInputBorder(), + hintText: 'Sum Insured', + labelText: 'Sum Insured', + contentPadding: + EdgeInsets.symmetric( + vertical: 5, + horizontal: 5), + ), + value: null, + items: [ + DropdownMenuItem( + value: 'Item 1', + child: Text('₹ 3,00,000'), + ), + DropdownMenuItem( + value: 'Item 2', + child: Text('₹ 4,00,000'), + ), + ], + ), + ], + ))), + Expanded( + flex: 3, + child: Container( + alignment: Alignment.centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Switch( + value: _isSwitched, + onChanged: (value) { + setState(() { + _isSwitched = value; + // Add your logic here based on the toggle state + }); + }, + activeColor: Color( + 0xFFE26728), // Color when the switch is ON + inactiveTrackColor: Colors + .grey, // Color of the switch track when OFF + ), + ], + ))), + ], + ), + SizedBox(height: 20), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 4, + child: Container( + width: 50, + alignment: Alignment.center, + child: Column( + mainAxisAlignment: + MainAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.center, + children: [ + DropdownButtonFormField( + onChanged: (value) {}, + decoration: InputDecoration( + border: + OutlineInputBorder(), + hintText: 'Relationship', + labelText: 'Relationship', + contentPadding: + EdgeInsets.symmetric( + vertical: 5, + horizontal: 5), + ), + value: null, + items: [ + DropdownMenuItem( + value: 'Item 1', + child: Text('Father'), + ), + DropdownMenuItem( + value: 'Item 2', + child: Text('Mother'), + ), + ], + ), + ], + ))), + SizedBox(width: 10), + Expanded( + flex: 4, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Container( + child: TextFormField( + onChanged: (value) => null, + decoration: InputDecoration( + border: + OutlineInputBorder(), + hintText: + 'Member Full Name', + labelText: + 'Member Full Name', + contentPadding: + EdgeInsets.symmetric( + vertical: 10, + horizontal: 15), + ), + validator: (value) { + if (value == null || + value.isEmpty) { + return 'Member Full Name is required'; + } + return null; + }, + ), + ) + ], + ))), + SizedBox(width: 10), + Expanded( + flex: 4, + child: Container( + alignment: Alignment.centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Container( + child: TextFormField( + onChanged: (value) => null, + decoration: InputDecoration( + border: + OutlineInputBorder(), + hintText: 'DD-MM-YYYY', + labelText: + 'Date of Birth', + contentPadding: + EdgeInsets.symmetric( + vertical: 10, + horizontal: 15), + ), + validator: (value) { + if (value == null || + value.isEmpty) { + return 'Date of Birth is required'; + } + return null; + }, + ), + ) + ], + ))), + ], + ), + SizedBox(height: 10), + Row( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Expanded( + flex: 12, + child: Container( + alignment: Alignment.centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Align( + alignment: + Alignment.centerRight, + child: SizedBox( + width: + 180, // Set the desired width + child: TextButton( + onPressed: () => null, + child: Row( + mainAxisAlignment: + MainAxisAlignment + .end, + children: [ + Icon( + Icons + .person_remove, + color: Color( + 0xFF62696C), // Set the color of the icon + ), + SizedBox( + width: + 8), // Add space between icon and text + Text( + 'Remove', + style: TextStyle( + color: Color( + 0xFF62696C), // Set the color of the text + ), + ) + ], + ), + ), + ), + ), + ], + ))), + ]), + SizedBox(height: 20), + Container( + decoration: BoxDecoration( + border: Border.all( + color: + Color(0xFF000000), // Set border color + width: 1, // Set border width + ), + // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 15, bottom: 15, left: 25, right: 25), + child: Row( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Expanded( + flex: 1, + child: Container( + alignment: Alignment.center, + child: Column( + mainAxisAlignment: + MainAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.center, + children: [ + Container( + padding: EdgeInsets.all( + 5), // Padding around the icon + decoration: BoxDecoration( + color: Color( + 0xFF6A6A6A), // Background color of the icon container + borderRadius: + BorderRadius.circular( + 5), // Radius of the container + ), + child: Icon( + Icons + .person_add, // Icon data + color: Colors.white, + size: + 20, // Color of the icon + ), + ), + ], + ))), + Expanded( + flex: 11, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Add Parent', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 22, + fontWeight: + FontWeight.w500, + ), + ), + ], + ))), + ], + ), + ), + SizedBox(height: 20), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 5, + child: Container( + alignment: Alignment.center, + child: Column( + mainAxisAlignment: + MainAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.center, + children: [ + Text( + 'Additional Premium', + textAlign: TextAlign.start, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w500, + ), + ), + Text( + '₹3099/Year', + textAlign: TextAlign.start, + style: TextStyle( + fontSize: 18, + ), + ), + ], + ))), + Expanded( + flex: 2, + child: Container( + alignment: Alignment.center, + child: Column( + mainAxisAlignment: + MainAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.center, + children: [ + Text( + 'GST', + textAlign: TextAlign.start, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w500, + ), + ), + Text( + '₹557.82/-', + textAlign: TextAlign.start, + style: TextStyle( + fontSize: 18, + ), + ), + ], + ))), + Expanded( + flex: 5, + child: Container( + alignment: Alignment.center, + child: Column( + mainAxisAlignment: + MainAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.center, + children: [ + Text( + 'Total Payable', + textAlign: TextAlign.start, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w500, + ), + ), + Text( + '₹3656.82/Year', + textAlign: TextAlign.start, + style: TextStyle( + fontSize: 18, + ), + ), + ], + ))), + ], + ), + ], + )), + ], + ), + )), + SizedBox(height: 16), + Card( + elevation: 0, + child: Container( + width: double.infinity, + height: 75, + padding: EdgeInsets.only( + top: 20, + bottom: 20, + left: 30, + right: 30), // Add padding to the container + child: Row( + children: [ + Expanded( + flex: 6, + child: Container( + width: 150, + height: 150, + alignment: Alignment.centerLeft, + child: ElevatedButton( + onPressed: () { + Navigator.pushNamed(context, 'empDetails'); + }, + child: Text( + 'Back', + style: TextStyle(color: Color(0xFFE26728)), + ), + style: ElevatedButton.styleFrom( + backgroundColor: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(5), + side: BorderSide(color: Color(0xFFE26728)), + ), + ), + ), + )), + Expanded( + flex: 6, + child: Container( + width: 150, + height: 150, + alignment: Alignment.centerRight, + child: ElevatedButton( + onPressed: () { + Navigator.pushNamed( + context, 'empReviewDetails'); + }, + child: Text( + 'Continue', + style: TextStyle(color: Colors.white), + ), + style: ElevatedButton.styleFrom( + backgroundColor: Color(0xFFE26728), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(5), + ), + ), + ), + )), + ], + ), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/customAppBar/customAppBar.dart b/lib/customAppBar/customAppBar.dart index 8ad43b0..f04702b 100644 --- a/lib/customAppBar/customAppBar.dart +++ b/lib/customAppBar/customAppBar.dart @@ -20,20 +20,36 @@ class CustomAppBar extends StatelessWidget implements PreferredSizeWidget { children: [ // Logo Column Expanded( - flex: 4, - child: Container( - margin: EdgeInsets.only(top: 10, bottom: 10), - width: 150, - height: 150, - child: Image.asset( - 'assets/navbarLogo.png', - fit: BoxFit.contain, // Adjust the fit as needed - ), + flex: 3, + child: Row( + mainAxisAlignment: MainAxisAlignment + .spaceEvenly, // Adjust the alignment as needed + children: [ + Container( + margin: EdgeInsets.only(top: 10, bottom: 10), + width: 230, + height: 230, + child: Image.asset( + 'assets/Group_3.png', + fit: BoxFit.contain, // Adjust the fit as needed + ), + ), + // SizedBox(width: 0), // Adjust the space between the images + // Container( + // margin: EdgeInsets.only(top: 10, bottom: 10), + // width: 150, + // height: 150, + // child: Image.asset( + // 'assets/partnerLogo.png', + // fit: BoxFit.contain, // Adjust the fit as needed + // ), + // ), + ], ), ), // AdaptiveNavBar Column Expanded( - flex: 8, + flex: 9, child: AdaptiveNavBar( screenWidth: sw, backgroundColor: Color(0xFF00989E), diff --git a/lib/empDetails.dart b/lib/empDetails.dart new file mode 100644 index 0000000..d66b5a2 --- /dev/null +++ b/lib/empDetails.dart @@ -0,0 +1,765 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'customAppBar/customAppBar.dart'; + +class empDetails extends StatefulWidget { + const empDetails({Key? key}) : super(key: key); + + @override + State createState() => _empDetailsState(); +} + +class _empDetailsState extends State { + @override + void initState() { + super.initState(); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: CustomAppBar(), + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.symmetric( + horizontal: MediaQuery.of(context).size.width * + 0.1, // 30% of screen width as horizontal padding + vertical: MediaQuery.of(context).size.height * + 0.03, // 5% of screen height as vertical padding + ), + color: Color(0xFFEFF3F6), + child: Column( + children: [ + Card( + elevation: 0, + child: Container( + width: double.infinity, + height: 75, + padding: EdgeInsets.only( + top: 20, + bottom: 20, + left: 30, + right: 30), // Add padding to the container + child: Row( + children: [ + Expanded( + flex: 6, + child: Container( + width: 150, + height: 150, + alignment: Alignment.centerLeft, + child: Image.asset( + 'assets/Group.png', + width: 80, // Set the width of the image + height: 80, // Set the height of the image + fit: BoxFit.contain, // Adjust the fit as needed + ), + )), + Expanded( + flex: 6, + child: Text( + 'Bharti Airtel', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ) + ], + ), + ), + ), + SizedBox(height: 16), + Card( + elevation: 0, + child: Padding( + padding: EdgeInsets.all(30), + child: Column( + children: [ + Container( + decoration: BoxDecoration( + color: Color( + 0xFFFFF1DD), // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 15, bottom: 15, left: 25, right: 25), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Plan Name', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + 'Group Personal Accident Coverage', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Text( + 'Floater Sum Insured', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + '₹ 3,00,000', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + ], + ), + ), + SizedBox(height: 10), + Container( + padding: EdgeInsets.only( + top: 0, bottom: 0, left: 10, right: 10), + child: Text( + 'This is a floater sum insured. A floater is a type ot sum insured that provides coverage to more than one member ot a tamily at the same time. Simply put, its a single insurance cover tor the entire family.', + style: TextStyle( + fontSize: 14, + color: Color(0xFF727272), + )), + ), + SizedBox(height: 15), + Container( + decoration: BoxDecoration( + color: Color( + 0xFFF9F9FB), // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 15, bottom: 15, left: 25, right: 25), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 12, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Please Note', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w600, + ), + ), + Text( + 'Lorem Ipsum is simply dummy text of the printing and typesetting industry.', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + ), + ), + ], + ))), + ], + ), + ), + SizedBox(height: 15), + Container( + decoration: BoxDecoration( + border: Border.all( + color: Color(0xFF000000), // Set border color + width: 1, // Set border width + ), + // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 15, bottom: 15, left: 25, right: 25), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 1, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Container( + padding: EdgeInsets.all( + 10), // Padding around the icon + decoration: BoxDecoration( + color: Color( + 0xFF00989E), // Background color of the icon container + borderRadius: BorderRadius.circular( + 5), // Radius of the container + ), + child: Icon( + Icons.account_circle, // Icon data + color: Colors.white, + size: 32, // Color of the icon + ), + ), + ], + ))), + Expanded( + flex: 9, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Employee', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w600, + ), + ), + Text( + 'Self • 6565656565 • 22/10/1997', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + ), + ), + ], + ))), + Expanded( + flex: 2, + child: Container( + alignment: Alignment.topRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Text( + 'View', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 16, + color: Color(0xFFE26728), + ), + ), + ], + ))), + ], + ), + ), + ], + ), + )), + SizedBox(height: 16), + Card( + elevation: 0, + child: Padding( + padding: EdgeInsets.all(30), + child: Column( + children: [ + Container( + decoration: BoxDecoration( + color: Color( + 0xFFFFF1DD), // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 15, bottom: 15, left: 25, right: 25), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Plan Name', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + 'Group Medical Coverage', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Text( + 'Floater Sum Insured', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + '₹ 3,00,000', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + ], + ), + ), + SizedBox(height: 10), + Container( + padding: EdgeInsets.only( + top: 0, bottom: 0, left: 10, right: 10), + child: Text( + 'This is a floater sum insured. A floater is a type ot sum insured that provides coverage to more than one member ot a tamily at the same time. Simply put, its a single insurance cover tor the entire family.', + style: TextStyle( + fontSize: 14, + color: Color(0xFF727272), + )), + ), + SizedBox(height: 15), + Container( + decoration: BoxDecoration( + color: Color( + 0xFFF9F9FB), // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 15, bottom: 15, left: 25, right: 25), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 12, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Please Note', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w600, + ), + ), + Text( + 'Can add Employee + Spouse + 2 dependent children', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + ), + ), + ], + ))), + ], + ), + ), + SizedBox(height: 15), + Container( + padding: EdgeInsets.only( + top: 0, bottom: 0, left: 15, right: 15), + child: Text('Please review your enrolled dependents.', + style: TextStyle( + fontSize: 18, + color: Color(0xFF727272), + fontWeight: FontWeight.w500, + )), + ), + SizedBox(height: 15), + Container( + decoration: BoxDecoration( + border: Border.all( + color: Color(0xFF000000), // Set border color + width: 1, // Set border width + ), + // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 15, bottom: 15, left: 25, right: 25), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 1, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Container( + padding: EdgeInsets.all( + 10), // Padding around the icon + decoration: BoxDecoration( + color: Color( + 0xFF00989E), // Background color of the icon container + borderRadius: BorderRadius.circular( + 5), // Radius of the container + ), + child: Icon( + Icons.account_circle, // Icon data + color: Colors.white, + size: 32, // Color of the icon + ), + ), + ], + ))), + Expanded( + flex: 9, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Employee', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w600, + ), + ), + Text( + 'Self • DOB - 22/10/1997', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + ), + ), + ], + ))), + Expanded( + flex: 2, + child: Container( + alignment: Alignment.topRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Text( + 'View', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 16, + color: Color(0xFFE26728), + ), + ), + ], + ))), + ], + ), + ), + SizedBox(height: 15), + Container( + decoration: BoxDecoration( + border: Border.all( + color: Color(0xFF000000), // Set border color + width: 1, // Set border width + ), + // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 15, bottom: 15, left: 25, right: 25), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 1, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Container( + padding: EdgeInsets.all( + 10), // Padding around the icon + decoration: BoxDecoration( + color: Color( + 0xFF00989E), // Background color of the icon container + borderRadius: BorderRadius.circular( + 5), // Radius of the container + ), + child: Icon( + Icons.account_circle, // Icon data + color: Colors.white, + size: 32, // Color of the icon + ), + ), + ], + ))), + Expanded( + flex: 8, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Spouse Name', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w600, + ), + ), + Text( + 'Spouse • DOB - 22/10/1999', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + ), + ), + ], + ))), + Expanded( + flex: 1, + child: Container( + alignment: Alignment.topRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Text( + 'Delete', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 16, + color: Color(0xFFE26728), + ), + ), + ], + ))), + Expanded( + flex: 1, + child: Container( + alignment: Alignment.topRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Text( + 'View', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 16, + color: Color(0xFFE26728), + ), + ), + ], + ))), + ], + ), + ), + SizedBox(height: 15), + Container( + decoration: BoxDecoration( + border: Border.all( + color: Color(0xFF000000), // Set border color + width: 1, // Set border width + ), + // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 15, bottom: 15, left: 25, right: 25), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 1, + child: Container( + alignment: Alignment.center, + child: Column( + mainAxisAlignment: + MainAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.center, + children: [ + Container( + padding: EdgeInsets.all( + 5), // Padding around the icon + decoration: BoxDecoration( + color: Color( + 0xFF6A6A6A), // Background color of the icon container + borderRadius: BorderRadius.circular( + 5), // Radius of the container + ), + child: Icon( + Icons.person_add, // Icon data + color: Colors.white, + size: 20, // Color of the icon + ), + ), + ], + ))), + Expanded( + flex: 11, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Add Child', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 22, + fontWeight: FontWeight.w500, + ), + ), + ], + ))), + ], + ), + ), + ], + ), + )), + SizedBox(height: 16), + Card( + elevation: 0, + child: Container( + width: double.infinity, + height: 75, + padding: EdgeInsets.only( + top: 20, + bottom: 20, + left: 30, + right: 30), // Add padding to the container + child: Row( + children: [ + Expanded( + flex: 12, + child: Container( + width: 150, + height: 150, + alignment: Alignment.centerRight, + child: ElevatedButton( + onPressed: () { + Navigator.pushNamed(context, 'addOnsDetails'); + }, + child: Text( + 'Continue', + style: TextStyle(color: Colors.white), + ), + style: ElevatedButton.styleFrom( + backgroundColor: Color(0xFFE26728), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(5), + ), + ), + ), + )), + ], + ), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/empReview.dart b/lib/empReview.dart new file mode 100644 index 0000000..cd10303 --- /dev/null +++ b/lib/empReview.dart @@ -0,0 +1,906 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'customAppBar/customAppBar.dart'; + +class empReviewDetails extends StatefulWidget { + const empReviewDetails({Key? key}) : super(key: key); + + @override + State createState() => _empReviewDetailsState(); +} + +class _empReviewDetailsState extends State { + bool isChecked = false; // Declare the _isSwitched variable here + + @override + void initState() { + super.initState(); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: CustomAppBar(), + body: SingleChildScrollView( + child: Container( + padding: EdgeInsets.symmetric( + horizontal: MediaQuery.of(context).size.width * + 0.1, // 30% of screen width as horizontal padding + vertical: MediaQuery.of(context).size.height * + 0.03, // 5% of screen height as vertical padding + ), + color: Color(0xFFEFF3F6), + child: Column( + children: [ + Card( + elevation: 0, + child: Container( + width: double.infinity, + height: 75, + padding: EdgeInsets.only( + top: 20, + bottom: 20, + left: 30, + right: 30), // Add padding to the container + child: Row( + children: [ + Expanded( + flex: 6, + child: Container( + width: 150, + height: 150, + alignment: Alignment.centerLeft, + child: Image.asset( + 'assets/Group.png', + width: 80, // Set the width of the image + height: 80, // Set the height of the image + fit: BoxFit.contain, // Adjust the fit as needed + ), + )), + Expanded( + flex: 6, + child: Text( + 'Bharti Airtel', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ) + ], + ), + ), + ), + SizedBox(height: 16), + Card( + elevation: 0, + child: Container( + width: double.infinity, + padding: EdgeInsets.only( + top: 20, + bottom: 20, + left: 30, + right: 30), // Add padding to the container + child: Column(children: [ + Row( + children: [ + Expanded( + flex: 12, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Review', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20, + color: Color(0xFF181818), + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + ], + ), + Row( + children: [ + Expanded( + flex: 2, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Total Payable', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + color: Color(0xFF181818), + ), + ), + ], + ))), + Expanded( + flex: 10, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + '₹6016.82/Year ', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 22, + color: Color(0xFFE26728), + fontWeight: FontWeight.w500, + ), + ), + ], + ))), + ], + ), + ])), + ), + SizedBox(height: 16), + Card( + elevation: 0, + child: Padding( + padding: EdgeInsets.all(30), + child: Column( + children: [ + Container( + decoration: BoxDecoration( + color: Color( + 0xFFFFF1DD), // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 15, bottom: 15, left: 25, right: 25), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Plan Name', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + 'Group Personal Accident Coverage', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Text( + 'Floater Sum Insured', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + '₹ 3,00,000', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + ], + ), + ), + SizedBox(height: 15), + Container( + padding: EdgeInsets.only( + top: 0, bottom: 0, left: 15, right: 15), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(Icons.arrow_right, + color: Color(0xFFE26728)), // Arrow icon + SizedBox( + width: 10), // Space between icon and text + Expanded( + child: Text( + 'Employee Name • Self • DOB - 22/10/1997', + style: TextStyle( + fontSize: 18, + color: Color(0xFF232526), + ), + ), + ), + ], + ), + ], + ), + ), + ], + ), + )), + SizedBox(height: 16), + Card( + elevation: 0, + child: Padding( + padding: EdgeInsets.all(30), + child: Column( + children: [ + Container( + decoration: BoxDecoration( + color: Color( + 0xFFFFF1DD), // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 15, bottom: 15, left: 25, right: 25), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Plan Name', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + 'Group Medical Coverage', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Text( + 'Floater Sum Insured', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + '₹ 3,00,000', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + ], + ), + ), + SizedBox(height: 15), + Container( + padding: EdgeInsets.only( + top: 0, bottom: 0, left: 15, right: 15), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(Icons.arrow_right, + color: Color(0xFFE26728)), // Arrow icon + SizedBox( + width: 10), // Space between icon and text + Expanded( + child: Text( + 'Employee Name • Self • DOB - 22/10/1997', + style: TextStyle( + fontSize: 18, + color: Color(0xFF232526), + ), + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(Icons.arrow_right, + color: Color(0xFFE26728)), // Arrow icon + SizedBox( + width: 10), // Space between icon and text + Expanded( + child: Text( + 'Spouse Name • Spouse • DOB - 22/10/1997', + style: TextStyle( + fontSize: 18, + color: Color(0xFF232526), + ), + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(Icons.arrow_right, + color: Color(0xFFE26728)), // Arrow icon + SizedBox( + width: 10), // Space between icon and text + Expanded( + child: Text( + 'Sons Name • Son • DOB - 22/10/1997', + style: TextStyle( + fontSize: 18, + color: Color(0xFF232526), + ), + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(Icons.arrow_right, + color: Color(0xFFE26728)), // Arrow icon + SizedBox( + width: 10), // Space between icon and text + Expanded( + child: Text( + 'Daughters Name • Daughter • DOB - 22/10/1997', + style: TextStyle( + fontSize: 18, + color: Color(0xFF232526), + ), + ), + ), + ], + ), + ], + ), + ), + ], + ), + )), + SizedBox(height: 16), + Card( + elevation: 0, + child: Padding( + padding: EdgeInsets.all(30), + child: Column( + children: [ + Container( + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 12, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Add Ons', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + color: Color(0xFF181818), + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + ], + ), + ), + SizedBox(height: 15), + Container( + decoration: BoxDecoration( + color: Color( + 0xFFFFF1DD), // Set background color for the container + borderRadius: BorderRadius.circular( + 5), // Set border radius for the container + ), + padding: EdgeInsets.only( + top: 15, bottom: 15, left: 25, right: 25), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Addon Name', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + 'Group Medical Coverage - Add Parents', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Text( + 'Floater Sum Insured', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 18, + ), + ), + Text( + '₹ 3,00,000', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + ], + ), + ), + SizedBox(height: 15), + Container( + padding: EdgeInsets.only( + top: 0, bottom: 0, left: 15, right: 15), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(Icons.arrow_right, + color: Color(0xFFE26728)), // Arrow icon + SizedBox( + width: 10), // Space between icon and text + Expanded( + child: Text( + 'Fathers Name • Father • DOB - 19/08/1948', + style: TextStyle( + fontSize: 18, + color: Color(0xFF232526), + ), + ), + ), + ], + ), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon(Icons.arrow_right, + color: Color(0xFFE26728)), // Arrow icon + SizedBox( + width: 10), // Space between icon and text + Expanded( + child: Text( + 'Mothers Name • Mother • DOB - 19/08/1950', + style: TextStyle( + fontSize: 18, + color: Color(0xFF232526), + ), + ), + ), + ], + ), + ], + ), + ), + ], + ), + )), + SizedBox(height: 16), + Card( + elevation: 0, + child: Padding( + padding: EdgeInsets.all(30), + child: Column( + children: [ + Container( + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 12, + child: Container( + alignment: Alignment + .centerLeft, // Adjust padding as needed + child: Table( + columnWidths: { + 0: FlexColumnWidth( + 2), // Adjust column width as needed + 1: FlexColumnWidth(2), + }, + children: [ + TableRow( + children: [ + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + 'Premium Summary', + textAlign: TextAlign.start, + style: TextStyle( + fontWeight: + FontWeight.bold), + ), + ), + ), + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + 'Additional Premium', + textAlign: TextAlign.start, + style: TextStyle( + fontWeight: + FontWeight.bold), + ), + ), + ), + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + 'GST', + textAlign: TextAlign.start, + style: TextStyle( + fontWeight: + FontWeight.bold), + ), + ), + ), + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + 'Total', + textAlign: TextAlign.start, + style: TextStyle( + fontWeight: + FontWeight.bold), + ), + ), + ), + ], + ), + TableRow( + children: [ + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + 'Group Medical Coverage - Top Up', + textAlign: TextAlign.start, + ), + ), + ), + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + '₹2000/Year', + textAlign: TextAlign.end, + ), + ), + ), + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + '₹360/-', + textAlign: TextAlign.end, + ), + ), + ), + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + '₹2360/Year', + textAlign: TextAlign.end, + ), + ), + ), + ], + ), + TableRow( + children: [ + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + 'Group Medical Coverage - Top Up', + textAlign: TextAlign.start, + ), + ), + ), + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + '₹2000/Year', + textAlign: TextAlign.end, + ), + ), + ), + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + '₹360/-', + textAlign: TextAlign.end, + ), + ), + ), + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + '₹2360/Year', + textAlign: TextAlign.end, + ), + ), + ), + ], + ), + ], + ), + )) + ], + ), + ), + SizedBox(height: 10), + Container( + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + 'Total Payable', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20, + color: Color(0xFF181818), + fontWeight: FontWeight.w600, + ), + ), + ], + ))), + Expanded( + flex: 6, + child: Container( + alignment: Alignment.centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Text( + '₹6016.82/Year', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 18, + color: Color(0xFFE26728), + fontWeight: FontWeight.w500, + ), + ), + ], + ))) + ], + ), + ), + SizedBox(height: 15), + Container( + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + flex: 11, + child: Container( + alignment: Alignment.centerRight, + child: Column( + mainAxisAlignment: + MainAxisAlignment.end, + crossAxisAlignment: + CrossAxisAlignment.end, + children: [ + Text( + 'I declare that the information I have provided is true and accurate to the best of my knowledge', + textAlign: TextAlign.right, + style: TextStyle( + fontSize: 18, + color: Color(0xFF292929), + ), + ), + ], + ))), + Expanded( + flex: 1, + child: Container( + alignment: Alignment.centerLeft, + child: Column( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Checkbox( + value: isChecked, + onChanged: (bool? value) { + setState(() { + isChecked = value!; + }); + }, + activeColor: Color(0xFFE26728), + ), + ], + ))), + ], + ), + ), + SizedBox(height: 15), + Container( + child: Row( + children: [ + Expanded( + flex: 6, + child: Container( + width: 150, + height: 150, + alignment: Alignment.centerLeft, + child: ElevatedButton( + onPressed: () { + Navigator.pushNamed( + context, 'addOnsDetails'); + }, + child: Text( + 'Back', + style: + TextStyle(color: Color(0xFFE26728)), + ), + style: ElevatedButton.styleFrom( + backgroundColor: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(5), + side: BorderSide( + color: Color(0xFFE26728)), + ), + ), + ), + )), + Expanded( + flex: 6, + child: Container( + width: 150, + height: 150, + alignment: Alignment.centerRight, + child: ElevatedButton( + onPressed: () {}, + child: Text( + 'Submit', + style: TextStyle(color: Colors.white), + ), + style: ElevatedButton.styleFrom( + backgroundColor: Color(0xFFE26728), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(5), + ), + ), + ), + )), + ], + ), + ), + ], + ), + )), + ], + ), + ), + ), + ); + } +} diff --git a/lib/excel_verification.dart b/lib/excel_verification.dart index 3c8db1d..0055d25 100644 --- a/lib/excel_verification.dart +++ b/lib/excel_verification.dart @@ -34,6 +34,10 @@ class _excelVerifyState extends State { dynamic columnIndexMismatchCount = 0; dynamic columnMissingCount = 0; List> extractedData = []; + dynamic policyName; + dynamic policyFirstPart; + List> originalData = []; // Original data source + List> filteredData = []; // Filtered data source @override void initState() { @@ -114,14 +118,16 @@ class _excelVerifyState extends State { reader.readAsArrayBuffer(file); reader.onLoadEnd.listen((event) async { Uint8List? fileBytes = reader.result as Uint8List?; - Uint8List? fileBytes2 = reader.result as Uint8List?; if (fileBytes != null) { // Call function to process Excel data setState(() { fileName = file.name; }); - + // Save fileBytes to local storage + final jsonString = json.encode(fileBytes); + html.window.localStorage['fileBytes'] = jsonString; print(fileName); + print(fileBytes); _processExcelData(fileBytes); } }); @@ -141,8 +147,8 @@ class _excelVerifyState extends State { if (dataArray[0].length == 10) { for (int i = 0; i < dataArray.length; i++) { Map dataMap = { - "SNo": dataArray[i][0].value, - "EmpCode": dataArray[i][1].value, + "S.No": dataArray[i][0].value, + "Emp Code": dataArray[i][1].value, "Name": dataArray[i][2].value, "DOJ": dataArray[i][3].value, "Gender": dataArray[i][4].value, @@ -161,8 +167,9 @@ class _excelVerifyState extends State { } } // Do something with extracted data (e.g., display in UI) - - print(extractedData); + originalData = extractedData; + filteredData = List.from(originalData); + print(filteredData); print(validationArray); validationArray[0].forEach((key, value) { @@ -222,13 +229,48 @@ class _excelVerifyState extends State { return dataArray; } - Future sendExcelFIleTOAPI() async { - print('_processExcelData'); - print(fileBytes2); + void _dragAndDropFile(html.File file) async { + print('file'); + print(file); + // Prepare form data + final formData = html.FormData(); + formData.appendBlob('file', file); + + // Send formData to API endpoint + final response = await html.HttpRequest.request( + 'your_api_endpoint_here', + method: 'POST', + sendData: formData, + ); + + // Handle response as needed + print(response.responseText); + } + + void _retrieveAndUploadFile() { + final jsonString = html.window.localStorage['fileBytes']; + if (jsonString != null) { + final decodedBytes = json.decode(jsonString); + if (decodedBytes is List) { + setState(() { + fileName = 'Retrieved File'; // Provide a default name + }); + sendExcelFIleTOAPI( + Uint8List.fromList(decodedBytes.cast()), fileName!); + } + } + } + + Future sendExcelFIleTOAPI(Uint8List fileBytes, String fileName) async { + print('submit'); + print(fileBytes); if (fileBytes == null) { print('return'); return; // No file selected } + // // Prepare form data + // final formData = html.FormData(); + // formData.appendBlob('file', html.Blob([fileBytes]), fileName); // URL of the API where you want to send the file final apiUrl = Environment.apiUrl + 'employeeUpload'; @@ -239,10 +281,14 @@ class _excelVerifyState extends State { // Attach the file to the request // Set authorization token in headers request.headers['Authorization'] = 'Bearer $_token'; - request.files.add(http.MultipartFile.fromBytes('file', fileBytes!, + request.files.add(http.MultipartFile.fromBytes('file', fileBytes, filename: fileName)); // Specify filename here request.fields['client_id'] = clintID; - request.fields['policy_id'] = '1'; + if (policyFirstPart == 'GPA') { + request.fields['policy_id'] = '1'; + } else { + request.fields['policy_id'] = '3'; + } // Send the request final response = await request.send(); @@ -259,224 +305,425 @@ class _excelVerifyState extends State { } } + void search(String query) { + setState(() { + if (query.isEmpty) { + // If search query is empty, show all data + filteredData = List.from(originalData); + } else { + // Filter the data based on the search query + filteredData = originalData.where((item) { + // Implement your filter logic here, for example: + return item['emp_code'].toLowerCase().contains(query.toLowerCase()); + }).toList(); + } + }); + } + @override Widget build(BuildContext context) { + // Retrieve the passed argument + dynamic importPolicyName = + ModalRoute.of(context)!.settings.arguments as String?; + + List parts = importPolicyName.split(" - "); + policyFirstPart = + parts.isNotEmpty ? parts[0] : ''; // Accessing the first element + print(policyFirstPart); // Output: GMC + + print(importPolicyName); return Scaffold( appBar: CustomAppBar(), - body: Container( - padding: const EdgeInsets.all(20), - color: Color(0xFFEFF3F6), - child: Card( - elevation: 0, - child: Column( - children: [ - Expanded( - child: Stepper( - type: StepperType.horizontal, - currentStep: _currentStep, - onStepContinue: _currentStep == 2 - ? null - : () { - if (_currentStep == 0) { - // For the first step, allow continue if fileName is not null - if (fileName != null) { - setState(() { - _currentStep += 1; - }); - } - } else if (_currentStep == 1) { - // For the second step, allow continue if both errors are 0 - if (missingColumnErrorMsg == 0 && - columnIndexMismatchCount == 0) { - setState(() { - _currentStep += 1; - }); - } - } - // setState(() { - // // Increment the current step when the user clicks continue - // if (_currentStep < 2) { - // _currentStep += 1; - // } - // }); - }, - onStepCancel: () { - setState(() { - // Decrement the current step when the user clicks cancel - if (_currentStep > 0) { - _currentStep -= 1; - } - }); - }, - steps: [ - Step( - title: Container( - child: Text( - 'Import Excel', - style: TextStyle( - color: Color(0xFFE26728), + body: SafeArea( + child: Theme( + data: ThemeData( + canvasColor: Color(0xFFF4F7FE), + colorScheme: Theme.of(context).colorScheme.copyWith( + primary: Color(0xFFE26728), + background: Colors.red, + secondary: Color(0xFFE26728), + ), + ), + child: Container( + padding: const EdgeInsets.all(20), + color: Color(0xFFEFF3F6), + child: Card( + elevation: 0, + child: Column( + children: [ + Expanded( + child: Stepper( + type: StepperType.horizontal, + currentStep: _currentStep, + controlsBuilder: + (BuildContext context, ControlsDetails controls) { + return Positioned( + bottom: 0, + right: 0, + left: 0, + child: Padding( + padding: const EdgeInsets.all(16.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + if (_currentStep != 0) + ElevatedButton( + onPressed: controls.onStepCancel, + child: Text( + 'Cancel', + style: + TextStyle(color: Color(0xFFE26728)), + ), + style: ElevatedButton.styleFrom( + backgroundColor: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(5), + side: BorderSide( + color: Color(0xFFE26728)), + ), + ), + ), + SizedBox(width: 10), + if (_currentStep != 2) + ElevatedButton( + onPressed: controls.onStepContinue, + child: const Text( + 'NEXT', + style: TextStyle(color: Colors.white), + ), + style: ElevatedButton.styleFrom( + backgroundColor: Color(0xFFE26728), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(5), + ), + ), + ), + SizedBox(width: 10), + if (_currentStep == 2) + ElevatedButton( + onPressed: () { + _retrieveAndUploadFile(); + }, + child: Text( + 'Submit', + style: TextStyle(color: Colors.white), + ), + style: ElevatedButton.styleFrom( + backgroundColor: Color(0xFFE26728), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(5), + ), + ), + ), + ], + ), ), - ), - ), - content: Container( - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Expanded( - flex: 6, - child: Container( - margin: EdgeInsets.symmetric(horizontal: 10), - alignment: Alignment.center, - color: Colors.grey[200], - height: 300, // Adjust height as needed - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - fileName != null - ? Text( - 'File Uploaded: $fileName', - style: TextStyle(fontSize: 16), - ) - : ElevatedButton( - onPressed: () => - _uploadFile('Policy Name'), + ); + }, + onStepContinue: _currentStep == 2 + ? null + : () { + if (_currentStep == 0) { + // For the first step, allow continue if fileName is not null + if (fileName != null) { + setState(() { + _currentStep += 1; + }); + } + } else if (_currentStep == 1) { + // For the second step, allow continue if both errors are 0 + if (missingColumnErrorMsg == 0 && + columnIndexMismatchCount == 0) { + setState(() { + _currentStep += 1; + }); + } + } + // setState(() { + // // Increment the current step when the user clicks continue + // if (_currentStep < 2) { + // _currentStep += 1; + // } + // }); + }, + onStepCancel: () { + setState(() { + // Decrement the current step when the user clicks cancel + if (_currentStep > 0) { + _currentStep -= 1; + } + }); + }, + steps: [ + Step( + title: Container( + child: Text( + 'Import Excel', + style: TextStyle( + color: Color(0xFFE26728), + ), + ), + ), + content: Container( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Expanded( + flex: 12, + child: Column( + children: [ + Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Expanded( child: Text( - 'Import', + importPolicyName ?? '', + textAlign: TextAlign.center, style: TextStyle( - color: Colors.white), + fontSize: 20, + fontWeight: FontWeight + .w600, // Adjust the font size as needed + color: Color( + 0xFF181818), // Adjust the text color as needed + ), ), - style: ElevatedButton.styleFrom( - backgroundColor: - Color(0xFFE26728), + ) + ], + ), + SizedBox(height: 20), + Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Expanded( + child: Container( + margin: EdgeInsets.symmetric( + horizontal: 150), + alignment: Alignment.center, + color: Colors.grey[200], + height: + 250, // Adjust height as needed + child: DragTarget( + onAccept: + (html.File droppedFile) { + setState(() { + fileName = droppedFile.name; + }); + _dragAndDropFile(droppedFile); + }, + builder: (BuildContext context, + List candidateData, + List + rejectedData) { + return Container( + alignment: Alignment.center, + child: Column( + mainAxisAlignment: + MainAxisAlignment + .center, + children: [ + if (fileName == null) + Text( + 'Drop files here to start uploading', + style: TextStyle( + fontSize: 16), + ), + SizedBox(height: 20), + if (fileName == null) + Text( + 'OR', + style: TextStyle( + fontSize: 16), + ), // Add spacing between texts + SizedBox(height: 20), + fileName != null + ? Text( + 'File Uploaded: $fileName', + style: TextStyle( + fontSize: + 16), + ) + : ElevatedButton( + onPressed: () => + _uploadFile( + 'Policy Name'), + child: Text( + 'Select File', + style: TextStyle( + color: Colors + .white), + ), + style: ElevatedButton + .styleFrom( + backgroundColor: + Color( + 0xFFE26728), + ), + ), + // Add more Text widgets for additional lines of text + ], + ), + ); + }, + ), ), ), - SizedBox(height: 20), // Add some space - // Drag and drop widget goes here - // Example: DragTarget or Draggable - // For example, a DragTarget that accepts Draggable widgets - // if (fileName != null) - // Text( - // 'File Uploaded: $fileName', - // style: TextStyle(fontSize: 16), - // ), - if (fileName == null) - DragTarget( - builder: (BuildContext context, - List candidateData, - List rejectedData) { - return Container( - width: 200, - height: 200, - alignment: Alignment.center, - color: Colors.blue, - child: Text( - 'Drag and drop file to import'), - ); - }, - onAccept: (data) { - // Handle accepted data - }, + ], ), - ], + ], + ), ), - ), + ], ), - ], + ), + isActive: _currentStep == 0, ), - ), - isActive: _currentStep == 0, - ), - Step( - title: Text( - 'Excel Validation', - style: TextStyle(color: Color(0xFFE26728)), - ), - content: Padding( - padding: EdgeInsets.only( - top: 30, - bottom: 30, - left: 300, - right: - 300), // Adjust the horizontal padding as needed - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - _buildRowWithIcon( - missingColumnErrorMsg == 0 - ? Icons.check_circle - : Icons.error, - 'No of column missing - $missingColumnErrorMsg', - iconColor: missingColumnErrorMsg == 0 - ? Colors.green - : Colors.red, // Set color based on condition + Step( + title: Text( + 'Excel Validation', + style: TextStyle(color: Color(0xFFE26728)), + ), + content: Padding( + padding: EdgeInsets.only( + top: 30, + bottom: 30, + left: 300, + right: + 300), // Adjust the horizontal padding as needed + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + _buildRowWithIcon( + missingColumnErrorMsg == 0 + ? Icons.check_circle + : Icons.error, + 'No of column missing - $missingColumnErrorMsg', + iconColor: missingColumnErrorMsg == 0 + ? Colors.green + : Colors + .red, // Set color based on condition + ), + if (missingColumnErrorMsg == 0) + _buildRowWithIcon( + columnIndexMismatchCount == 0 + ? Icons.check_circle + : Icons.error, + 'Column Index is Missmatching - $columnIndexMismatchCount', + iconColor: columnIndexMismatchCount == 0 + ? Colors.green + : Colors.red, + ), + // _buildRowWithIcon( + // columnMissingCount == 0 + // ? Icons.check_circle + // : Icons.error, + // 'Column Missing - $columnMissingCount', + // iconColor: columnMissingCount == 0 + // ? Colors.green + // : Colors.red, + // ), + ], ), - if (missingColumnErrorMsg == 0) - _buildRowWithIcon( - columnIndexMismatchCount == 0 - ? Icons.check_circle - : Icons.error, - 'Column Index is Missmatching - $columnIndexMismatchCount', - iconColor: columnIndexMismatchCount == 0 - ? Colors.green - : Colors.red, - ), - // _buildRowWithIcon( - // columnMissingCount == 0 - // ? Icons.check_circle - // : Icons.error, - // 'Column Missing - $columnMissingCount', - // iconColor: columnMissingCount == 0 - // ? Colors.green - // : Colors.red, - // ), - ], + ), + isActive: _currentStep == 1, ), - ), - isActive: _currentStep == 1, - ), - Step( - title: Text( - 'Preview', - style: TextStyle(color: Color(0xFFE26728)), - ), - content: Column( - children: [ - Row( + Step( + title: Text( + 'Preview', + style: TextStyle(color: Color(0xFFE26728)), + ), + content: Column( children: [ - Expanded( - child: SingleChildScrollView( - child: _buildDataTable(), - ), - ) + Row( + children: [ + Expanded( + flex: 10, + child: Container( + alignment: Alignment.centerLeft, + child: Container( + width: + 350, // Set your desired width here + height: + 40, // Set your desired height here + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Color.fromRGBO( + 255, + 255, + 255, + 0.5), // Shadow color with opacity + offset: Offset(5, + 5), // Shadow position (horizontal, vertical) + blurRadius: 10, // Blur radius + spreadRadius: + 0, // Spread radius + ), + ], + borderRadius: + BorderRadius.circular(5), + ), + child: TextField( + textAlignVertical: TextAlignVertical + .center, // Center the text vertically + decoration: InputDecoration( + hintText: 'Search', + suffixIcon: Icon(Icons.search), + contentPadding: EdgeInsets.all( + 10), // Adjust the horizontal padding + border: OutlineInputBorder( + borderSide: BorderSide( + color: Color( + 0xFFf5f5f7)), // Set border color to gray + ), + ), + onChanged: + search, // Call the search method on text change + ), + )), + ), + ], + ), + SizedBox(height: 20), + Row( + children: [ + Expanded( + child: SingleChildScrollView( + child: _buildDataTable(), + ), + ) + ], + ), ], ), - ], - ), - isActive: _currentStep == 2, - ), - ], - ), - ), - SizedBox(height: 20), - if (_currentStep == 2) - Align( - alignment: Alignment.bottomRight, - child: ElevatedButton( - onPressed: () { - sendExcelFIleTOAPI(); - }, - child: Text( - 'Complete', - style: TextStyle(color: Colors.white), - ), - style: ElevatedButton.styleFrom( - backgroundColor: Color(0xFFE26728), + isActive: _currentStep == 2, + ), + ], ), ), - ), - SizedBox(height: 20), - ], + // SizedBox(height: 20), + // if (_currentStep == 2) + // Align( + // alignment: Alignment.bottomRight, + // child: ElevatedButton( + // onPressed: () { + // sendExcelFIleTOAPI(); + // }, + // child: Text( + // 'Complete', + // style: TextStyle(color: Colors.white), + // ), + // style: ElevatedButton.styleFrom( + // backgroundColor: Color(0xFFE26728), + // ), + // ), + // ), + // SizedBox(height: 20), + ], + ), + ), ), ), ), @@ -484,7 +731,7 @@ class _excelVerifyState extends State { } Widget _buildDataTable() { - if (extractedData.isEmpty) { + if (filteredData.isEmpty) { SizedBox(height: 25); return Text('No available data'); } else { @@ -504,7 +751,7 @@ class _excelVerifyState extends State { DataColumn(label: Text('Mobile No')), DataColumn(label: Text('SI')), ], - source: _DependenceDataSource0(extractedData), + source: _DependenceDataSource0(filteredData), ), ); } diff --git a/lib/hrHome.dart b/lib/hrHome.dart index 07dfb9a..f96b9be 100644 --- a/lib/hrHome.dart +++ b/lib/hrHome.dart @@ -37,11 +37,15 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { dynamic clintID; late TabController _tabController; List dataPolicy = []; + List> originalDataGpa = []; // Original data source + List> filteredDataGpa = []; // Filtered data source + List> originalDataGmc = []; // Original data source + List> filteredDataGmc = []; // Filtered data source @override void initState() { super.initState(); - _tabController = TabController(length: 3, vsync: this); + _tabController = TabController(length: 2, vsync: this); _loadToken(); } @@ -59,7 +63,7 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { _token = token; }); Map? decodedToken = Jwt.parseJwt(token); - clintID = decodedToken['client_id'].toString(); + clintID = decodedToken['client_id']; await getPolicyName(clintID); } else { _token = 'null'; @@ -96,16 +100,9 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { getPolicyNo1 = dataPolicy[1]['client_policy_id']; print(getPolicyNameDetails1); }); - const duration = Duration(seconds: 5); - Timer.periodic(duration, (timer) { - // Code to execute periodically every 2 seconds - getEmployeeAndDependenceGPA(clintID, getPolicyNo0); - getEmployeeAndDependenceGMC(clintID, getPolicyNo1); - - // If you want to stop the periodic execution after some time, - // you can cancel the timer like this: - timer.cancel(); - }); + // Code to execute periodically every 2 seconds + getEmployeeAndDependenceGPA(clintID, getPolicyNo0); + getEmployeeAndDependenceGMC(clintID, getPolicyNo1); } else { print('API request failed with status: ${data['status']}'); } @@ -140,6 +137,8 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { setState(() { getEmpDependenceByClintIdGPA = List>.from(data['data']); + originalDataGpa = getEmpDependenceByClintIdGPA; + filteredDataGpa = List.from(originalDataGpa); }); } else { print('API request failed with status: ${data['status']}'); @@ -175,6 +174,8 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { setState(() { getEmpDependenceByClintIdGMC = List>.from(data['data']); + originalDataGmc = getEmpDependenceByClintIdGMC; + filteredDataGmc = List.from(originalDataGmc); }); } else { print('API request failed with status: ${data['status']}'); @@ -191,113 +192,15 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { } } - // void _GMCImport() async { - // FilePickerResult? result = await FilePicker.platform.pickFiles( - // type: FileType.custom, - // allowedExtensions: ['xlsx', 'xls'], // Allow Excel file extensions - // ); - // - // if (result != null) { - // List fileBytes = result.files.single.bytes!; - // String fileName = result.files.single.name; - // - // var request = http.MultipartRequest( - // 'POST', - // Uri.parse(Environment.apiUrl + 'employeeUpload'), - // ); - // // Set authorization token in headers - // request.headers['Authorization'] = 'Bearer $_token'; - // request.files.add( - // http.MultipartFile.fromBytes( - // 'file', - // fileBytes, - // filename: fileName, - // ), - // ); - // request.fields['client_id'] = clintID; - // request.fields['policy_id'] = '3'; - // - // var response = await request.send(); - // - // if (response.statusCode == 200) { - // ToastHelper.showSuccessToast(context, 'File uploaded successfully'); - // print('File uploaded successfully'); - // - // // Call your API here after file upload - // await getEmployeeAndDependenceGMC(clintID, getPolicyNo1); - // } else { - // ToastHelper.showErrorToast( - // context, 'Failed to upload file: ${response.reasonPhrase}'); - // print('Failed to upload file: ${response.reasonPhrase}'); - // } - // } - // } - - // void _GPAImport() async { - // FilePickerResult? result = await FilePicker.platform.pickFiles( - // type: FileType.custom, - // allowedExtensions: ['xlsx', 'xls'], // Allow Excel file extensions - // ); - // - // if (result != null) { - // List fileBytes = result.files.single.bytes!; - // String fileName = result.files.single.name; - // - // var request = http.MultipartRequest( - // 'POST', - // Uri.parse(Environment.apiUrl + 'employeeUpload'), - // ); - // // Set authorization token in headers - // request.headers['Authorization'] = 'Bearer $_token'; - // request.files.add( - // http.MultipartFile.fromBytes( - // 'file', - // fileBytes, - // filename: fileName, - // ), - // ); - // request.fields['client_id'] = clintID; - // request.fields['policy_id'] = '1'; - // - // var response = await request.send(); - // - // if (response.statusCode == 200) { - // print('File uploaded successfully'); - // ToastHelper.showSuccessToast(context, 'File uploaded successfully'); - // - // // Call your API here after file upload - // await getEmployeeAndDependenceGPA(clintID, getPolicyNo0); - // } else { - // ToastHelper.showErrorToast( - // context, 'Failed to upload file: ${response.reasonPhrase}'); - // print('Failed to upload file: ${response.reasonPhrase}'); - // } - // } - // } - - // void _uploadFile(importPolicyName) async { - // if (kIsWeb) { - // print('WEB'); - // final input = html.FileUploadInputElement(); - // input.accept = '.xlsx,.xls'; // Specify accepted file types here - // input.click(); - // input.onChange.listen((event) { - // final file = input.files!.first; - // final reader = html.FileReader(); - // reader.readAsArrayBuffer(file); - // - // reader.onLoadEnd.listen((event) { - // setState(() { - // _fileBytes = reader.result as Uint8List?; - // _importFile(importPolicyName); - // }); - // }); - // }); - // } - // } - void _uploadFile(importPolicyName) async { - Navigator.pushNamed(context, 'excelVerify'); + var argumentDetails; + if (importPolicyName == 'GPA') { + argumentDetails = importPolicyName + ' - ' + getPolicyNameDetails0; + } else { + argumentDetails = importPolicyName + ' - ' + getPolicyNameDetails1; + } + + Navigator.pushNamed(context, 'excelVerify', arguments: argumentDetails); return; if (kIsWeb) { final input = html.FileUploadInputElement(); @@ -311,218 +214,41 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { final Uint8List? fileBytes = reader.result as Uint8List?; if (fileBytes != null) { // Call function to process Excel data - _processExcelData(fileBytes); } }); }); } } - void _processExcelData(Uint8List fileBytes) { - // Decode the Excel file and extract relevant data - // Assuming dataArray is your array containing Excel data - List> dataArray = decodeExcelData(fileBytes); - - // Extract Name, Age, and City from the array - List> extractedData = []; - for (int i = 1; i < dataArray.length; i++) { - Map dataMap = { - "SNo": dataArray[i][0].value, - "EmpCode": dataArray[i][1].value, - "Name": dataArray[i][2].value, - "DOJ": dataArray[i][3].value, - "Gender": dataArray[i][4].value, - "Relation": dataArray[i][5].value, - "DOB": dataArray[i][6].value, - "mail": dataArray[i][7].value, - "mobile": dataArray[i][8].value, - "SI": dataArray[i][9].value, - }; - extractedData.add(dataMap); - } - - // Do something with extracted data (e.g., display in UI) - print(extractedData); - } - - // Placeholder function for decoding Excel data - List> decodeExcelData(Uint8List fileBytes) { - // Implement your logic to decode Excel data here - // This function should return your array containing Excel data - // For example, you can use the excel package to decode the Excel file - // Import the excel package in your pubspec.yaml file: - // dependencies: - // excel: ^1.1.0 - // Then use the following code to decode the Excel file: - - // Import the necessary packages - // import 'package:excel/excel.dart'; - - // Create an Excel instance from the fileBytes - final excel = Excel.decodeBytes(fileBytes); - - // Assuming there's only one sheet in the Excel file - final sheet = excel.tables.keys.first; - final table = excel.tables[sheet]!; - - // Convert Excel table to a List> - // Convert Excel table to a List> - List> dataArray = []; - for (int rowIdx = 0; rowIdx < table.rows.length; rowIdx++) { - List rowData = []; - for (int colIdx = 0; colIdx < table.rows[rowIdx].length; colIdx++) { - var value = table.rows[rowIdx][colIdx]?.value; - rowData.add(Data(value, rowIdx, colIdx, sheet)); - } - dataArray.add(rowData); - } - return dataArray; - } - - Future _importFile(importPolicyName) async { - if (_fileBytes == null) { - return; // No file selected - } - - // URL of the API where you want to send the file - final apiUrl = Environment.apiUrl + 'employeeUpload'; - - // Create a multipart request - final request = http.MultipartRequest('POST', Uri.parse(apiUrl)); - - // Attach the file to the request - // Set authorization token in headers - request.headers['Authorization'] = 'Bearer $_token'; - request.files.add(http.MultipartFile.fromBytes('file', _fileBytes!, - filename: 'excel_file.xls')); // Specify filename here - request.fields['client_id'] = clintID; - if (importPolicyName == 'GPA') { - request.fields['policy_id'] = '1'; - } else { - request.fields['policy_id'] = '3'; - } - - // Send the request - final response = await request.send(); - - // Check the status code of the response - if (response.statusCode == 200) { - // ToastHelper.showSuccessToast(context, 'File uploaded successfully'); - print('File uploaded successfully'); - if (importPolicyName == 'GPA') { - await getEmployeeAndDependenceGPA(clintID, getPolicyNo0); + void searchGpa(String query) { + setState(() { + if (query.isEmpty) { + // If search query is empty, show all data + filteredDataGpa = List.from(originalDataGpa); } else { - await getEmployeeAndDependenceGMC(clintID, getPolicyNo1); + // Filter the data based on the search query + filteredDataGpa = originalDataGpa.where((item) { + // Implement your filter logic here, for example: + return item['emp_code'].toLowerCase().contains(query.toLowerCase()); + }).toList(); } - print('File uploaded successfully'); - } else { - // ToastHelper.showSuccessToast( - // context, 'Failed to upload file: ${response.reasonPhrase}'); - print('Failed to upload file: ${response.reasonPhrase}'); - } + }); } - // void _GPAImport() async { - // print('Enter'); - // - // if (kIsWeb) { - // print('WEB'); - // final input = html.FileUploadInputElement(); - // input.accept = '.xlsx,.xls'; // Specify accepted file types here - // input.click(); - // print('WEB111'); - // input.onChange.listen((event) { - // final file = input.files!.first; - // final reader = html.FileReader(); - // reader.readAsArrayBuffer(file); - // - // reader.onLoadEnd.listen((event) { - // setState(() { - // _fileBytes = reader.result as Uint8List?; - // }); - // }); - // }); - // print(_fileBytes); - // if (_fileBytes == null) { - // return; // No file selected - // } else { - // var request = http.MultipartRequest( - // 'POST', - // Uri.parse(Environment.apiUrl + 'employeeUpload'), - // ); - // - // // Set authorization token in headers - // request.headers['Authorization'] = 'Bearer $_token'; - // request.files.add( - // http.MultipartFile.fromBytes( - // 'file', - // _fileBytes!, - // ), - // ); - // request.fields['client_id'] = clintID; - // request.fields['policy_id'] = '1'; - // - // var response = await request.send(); - // - // if (response.statusCode == 200) { - // print('File uploaded successfully'); - // ToastHelper.showSuccessToast(context, 'File uploaded successfully'); - // - // // Call your API here after file upload - // await getEmployeeAndDependenceGPA(clintID, getPolicyNo0); - // } else { - // ToastHelper.showErrorToast( - // context, 'Failed to upload file: ${response.reasonPhrase}'); - // print('Failed to upload file: ${response.reasonPhrase}'); - // } - // } - // } else { - // print('IOS Android'); - // // Use file picker for mobile platforms - // FilePickerResult? result = await FilePicker.platform.pickFiles( - // type: FileType.custom, - // allowedExtensions: ['xlsx', 'xls'], // Allow Excel file extensions - // ); - // - // // Rest of your code remains the same - // // Make sure to handle the result based on the platform - // if (result != null) { - // List fileBytes = result.files.single.bytes!; - // String fileName = result.files.single.name; - // - // var request = http.MultipartRequest( - // 'POST', - // Uri.parse(Environment.apiUrl + 'employeeUpload'), - // ); - // - // // Set authorization token in headers - // request.headers['Authorization'] = 'Bearer $_token'; - // request.files.add( - // http.MultipartFile.fromBytes( - // 'file', - // fileBytes, - // filename: fileName, - // ), - // ); - // request.fields['client_id'] = clintID; - // request.fields['policy_id'] = '1'; - // - // var response = await request.send(); - // - // if (response.statusCode == 200) { - // print('File uploaded successfully'); - // ToastHelper.showSuccessToast(context, 'File uploaded successfully'); - // - // // Call your API here after file upload - // await getEmployeeAndDependenceGPA(clintID, getPolicyNo0); - // } else { - // ToastHelper.showErrorToast( - // context, 'Failed to upload file: ${response.reasonPhrase}'); - // print('Failed to upload file: ${response.reasonPhrase}'); - // } - // } - // } - // } + void searchGmc(String query) { + setState(() { + if (query.isEmpty) { + // If search query is empty, show all data + filteredDataGmc = List.from(originalDataGmc); + } else { + // Filter the data based on the search query + filteredDataGmc = originalDataGmc.where((item) { + // Implement your filter logic here, for example: + return item['emp_code'].toLowerCase().contains(query.toLowerCase()); + }).toList(); + } + }); + } @override Widget build(BuildContext context) { @@ -539,7 +265,7 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { labelColor: Colors.white, // Selected tab color unselectedLabelColor: Colors.grey, // Unselected tab color indicator: BoxDecoration( - color: Colors.red, // Background color of selected tab + color: Color(0xFFE26728), // Background color of selected tab ), indicatorSize: TabBarIndicatorSize.label, controller: _tabController, @@ -549,7 +275,7 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { width: double.maxFinite, alignment: Alignment.center, padding: EdgeInsets.symmetric(vertical: 0), - child: Text('GPA-' + getPolicyNameDetails0 ?? ''), + child: Text('GPA-' + (getPolicyNameDetails0 ?? '')), ), ), Tab( @@ -557,7 +283,7 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { width: double.infinity, alignment: Alignment.center, padding: EdgeInsets.symmetric(vertical: 0), - child: Text('GMC-' + getPolicyNameDetails1 ?? ''), + child: Text('GMC-' + (getPolicyNameDetails1 ?? '')), ), ), ], @@ -578,15 +304,50 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { Expanded( flex: 10, child: Container( - alignment: Alignment.centerLeft, - child: Text( - '', - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), + alignment: Alignment.centerLeft, + child: Container( + width: + 350, // Set your desired width here + height: + 40, // Set your desired height here + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Color.fromRGBO( + 255, + 255, + 255, + 0.5), // Shadow color with opacity + offset: Offset(5, + 5), // Shadow position (horizontal, vertical) + blurRadius: + 10, // Blur radius + spreadRadius: + 0, // Spread radius + ), + ], + borderRadius: + BorderRadius.circular(5), + ), + child: TextField( + textAlignVertical: TextAlignVertical + .center, // Center the text vertically + decoration: InputDecoration( + hintText: 'Search', + suffixIcon: + Icon(Icons.search), + contentPadding: EdgeInsets.all( + 10), // Adjust the horizontal padding + border: OutlineInputBorder( + borderSide: BorderSide( + color: Color( + 0xFFf5f5f7)), // Set border color to gray + ), + ), + onChanged: + searchGpa, // Call the search method on text change + ), + )), ), Expanded( flex: 2, @@ -594,14 +355,14 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { alignment: Alignment.centerRight, child: Row( mainAxisAlignment: - MainAxisAlignment.spaceEvenly, + MainAxisAlignment.center, children: [ Expanded( child: ElevatedButton( onPressed: () => _uploadFile('GPA'), child: Text( - 'Import', + 'Import Data', style: TextStyle( color: Colors.white), ), @@ -609,6 +370,12 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { ElevatedButton.styleFrom( backgroundColor: Color(0xFFE26728), + shape: + RoundedRectangleBorder( + borderRadius: + BorderRadius.circular( + 5), + ), ), ), ), @@ -644,15 +411,50 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { Expanded( flex: 10, child: Container( - alignment: Alignment.centerLeft, - child: Text( - '', - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, - ), - ), - ), + alignment: Alignment.centerLeft, + child: Container( + width: + 350, // Set your desired width here + height: + 40, // Set your desired height here + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Color.fromRGBO( + 255, + 255, + 255, + 0.5), // Shadow color with opacity + offset: Offset(5, + 5), // Shadow position (horizontal, vertical) + blurRadius: + 10, // Blur radius + spreadRadius: + 0, // Spread radius + ), + ], + borderRadius: + BorderRadius.circular(5), + ), + child: TextField( + textAlignVertical: TextAlignVertical + .center, // Center the text vertically + decoration: InputDecoration( + hintText: 'Search', + suffixIcon: + Icon(Icons.search), + contentPadding: EdgeInsets.all( + 10), // Adjust the horizontal padding + border: OutlineInputBorder( + borderSide: BorderSide( + color: Color( + 0xFFf5f5f7)), // Set border color to gray + ), + ), + onChanged: + searchGmc, // Call the search method on text change + ), + )), ), Expanded( flex: 2, @@ -675,6 +477,12 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { ElevatedButton.styleFrom( backgroundColor: Color(0xFFE26728), + shape: + RoundedRectangleBorder( + borderRadius: + BorderRadius.circular( + 5), + ), ), ), ) @@ -709,7 +517,7 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { } Widget _buildDataTableGPA() { - if (getEmpDependenceByClintIdGPA.isEmpty) { + if (filteredDataGpa.isEmpty) { SizedBox(height: 25); return Text('No available data'); } else { @@ -725,14 +533,14 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { DataColumn(label: Text('Gender')), DataColumn(label: Text('Mobile No')), ], - source: _DependenceDataSource0(getEmpDependenceByClintIdGPA), + source: _DependenceDataSource0(filteredDataGpa), ), ); } } Widget _buildDataTableGMC() { - if (getEmpDependenceByClintIdGPA.isEmpty) { + if (filteredDataGmc.isEmpty) { SizedBox(height: 25); return Text('No available data'); } else { @@ -748,7 +556,7 @@ class _MyHrHomeState extends State with TickerProviderStateMixin { DataColumn(label: Text('Gender')), DataColumn(label: Text('Mobile No')), ], - source: _DependenceDataSource1(getEmpDependenceByClintIdGMC), + source: _DependenceDataSource1(filteredDataGmc), ), ); } diff --git a/lib/hrLogin.dart b/lib/hrLogin.dart index dbae365..7ea5d2d 100644 --- a/lib/hrLogin.dart +++ b/lib/hrLogin.dart @@ -161,7 +161,7 @@ class _MyPhoneState extends State { Row( children: [ Expanded( - flex: 6, + flex: 4, child: Align( alignment: Alignment.centerLeft, child: MouseRegion( @@ -178,13 +178,11 @@ class _MyPhoneState extends State { children: [ Icon( Icons - .keyboard_backspace, // Icon for customer login + .west, // Icon for customer login color: Colors .black, // Adjust color as needed ), - SizedBox( - width: - 5), // Add some space between icon and text + SizedBox(width: 5), Text( 'Customer Login', style: TextStyle( @@ -199,7 +197,7 @@ class _MyPhoneState extends State { ), )), Expanded( - flex: 6, + flex: 8, child: Align( alignment: Alignment .centerRight, // Align to the start @@ -223,43 +221,53 @@ class _MyPhoneState extends State { )), ], ), - SizedBox( - height: - 20), // Add some space between rows - Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - Text( - "Welcome to Nhance", - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, + SizedBox(height: 15), + Container( + margin: + EdgeInsets.symmetric(horizontal: 150), + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Text( + "Welcome to Nhance", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), ), - ), - ], + ], + ), ), SizedBox( height: 15, ), - Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - Text( - "Have a Health Insurance Policy number, but never signed in? Don't worry, We got you covered", - style: TextStyle( - fontSize: 12, - color: Color(0xFF000000)), - textAlign: TextAlign.center, - ), - ], + Container( + margin: + EdgeInsets.symmetric(horizontal: 150), + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Expanded( + child: Text( + "Have a Health Insurance Policy number, but never signed in? Don't worry, We got you covered", + style: TextStyle( + fontSize: 12, + color: Color(0xFF000000)), + textAlign: TextAlign.center, + ), + ) + ], + ), ), SizedBox( height: 20, ), Container( height: 55, + margin: + EdgeInsets.symmetric(horizontal: 150), decoration: BoxDecoration( border: Border.all( width: 1, color: Colors.grey), @@ -325,22 +333,26 @@ class _MyPhoneState extends State { SizedBox( height: 20, ), - SizedBox( - width: double.infinity, - height: 45, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Color(0xFF00989E), - shape: RoundedRectangleBorder( - borderRadius: - BorderRadius.circular(10), + Container( + margin: + EdgeInsets.symmetric(horizontal: 150), + child: SizedBox( + width: double.infinity, + height: 45, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: Color(0xFF00989E), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(10), + ), + ), + onPressed: handleSubmit, + child: Text( + "Login With OTP", + style: TextStyle( + color: Color(0xFFFFFFFF)), ), - ), - onPressed: handleSubmit, - child: Text( - "Login With OTP", - style: TextStyle( - color: Color(0xFFFFFFFF)), ), ), ), @@ -348,22 +360,27 @@ class _MyPhoneState extends State { height: _size.width <= 1100 ? 0 : 0, ), _size.width > 1100 - ? Column( - children: [ - SizedBox(height: 30), - Text( - "Benefits of Login", - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, + ? Container( + margin: EdgeInsets.symmetric( + horizontal: 150), + child: Column( + children: [ + SizedBox(height: 30), + Text( + "Benefits of Login", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), ), - ), - SizedBox(height: 15), - ], - ) + SizedBox(height: 15), + ], + )) : SizedBox(), _size.width > 1100 ? Container( + margin: EdgeInsets.symmetric( + horizontal: 150), child: Row( mainAxisAlignment: MainAxisAlignment.center, diff --git a/lib/main.dart b/lib/main.dart index e867b68..1e8d517 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,6 +2,9 @@ import 'dart:js'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:nhancepolicy/addons.dart'; +import 'package:nhancepolicy/empReview.dart'; +import 'package:nhancepolicy/empDetails.dart'; import 'package:nhancepolicy/excel_verification.dart'; import 'package:nhancepolicy/hrHome.dart'; import 'package:nhancepolicy/hrVerify.dart'; @@ -26,6 +29,9 @@ Future main() async { 'hrVerify': (context) => MyHrVerify(), 'hrHome': (context) => MyHrHome(), 'excelVerify': (context) => excelVerify(), + 'empDetails': (context) => empDetails(), + 'addOnsDetails': (context) => addOnsDetails(), + 'empReviewDetails': (context) => empReviewDetails(), }, )); } diff --git a/lib/phone.dart b/lib/phone.dart index 40fbebe..d0c18eb 100644 --- a/lib/phone.dart +++ b/lib/phone.dart @@ -140,7 +140,7 @@ class _MyPhoneState extends State { Row( children: [ Expanded( - flex: 6, + flex: 10, child: Align( alignment: Alignment .centerLeft, // Align to the start @@ -163,71 +163,90 @@ class _MyPhoneState extends State { ), )), Expanded( - flex: 6, + flex: 2, child: Align( alignment: Alignment.centerRight, - child: ElevatedButton( - onPressed: () { - Navigator.pushNamed( - context, 'hrLogin'); - }, - child: Text( - 'HR login', - style: TextStyle( - color: Color(0xFF00989E)), - ), - style: ElevatedButton.styleFrom( - backgroundColor: Colors.white, - shape: RoundedRectangleBorder( - borderRadius: - BorderRadius.circular( - 5), - side: BorderSide( - color: Color( - 0xFF00989E)), // Add border + child: MouseRegion( + cursor: + SystemMouseCursors.click, + child: GestureDetector( + onTap: () { + // Add your navigation logic here + // For example, you can use Navigator.push to navigate to another page + Navigator.pushNamed( + context, 'hrLogin'); + }, + child: Row( + children: [ + Text( + 'HR Login', + style: TextStyle( + color: Color( + 0xFF000000), // Text color + // Add other text styles as needed + ), + ), + SizedBox(width: 5), + Icon( + Icons + .east, // Icon for customer login + color: Colors + .black, // Adjust color as needed + ), + ], ), ), ), - )) + )), ], ), - SizedBox( - height: - 20), // Add some space between rows - Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - Text( - "Welcome to Nhance", - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold, + SizedBox(height: 15), + Container( + margin: + EdgeInsets.symmetric(horizontal: 150), + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Text( + "Welcome to Nhance", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + ), ), - ), - ], + ], + ), ), SizedBox( height: 15, ), - Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - Text( - "Have a Health Insurance Policy number, but never signed in? Don't worry, We got you covered", - style: TextStyle( - fontSize: 12, - color: Color(0xFF000000)), - textAlign: TextAlign.center, - ), - ], + Container( + margin: + EdgeInsets.symmetric(horizontal: 150), + child: Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + Expanded( + child: Text( + "Have a Health Insurance Policy number, but never signed in? Don't worry, We got you covered", + style: TextStyle( + fontSize: 12, + color: Color(0xFF000000)), + textAlign: TextAlign.center, + ), + ) + ], + ), ), SizedBox( height: 20, ), Container( height: 55, + margin: + EdgeInsets.symmetric(horizontal: 150), decoration: BoxDecoration( border: Border.all( width: 1, color: Colors.grey), @@ -293,22 +312,26 @@ class _MyPhoneState extends State { SizedBox( height: 20, ), - SizedBox( - width: double.infinity, - height: 45, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Color(0xFF00989E), - shape: RoundedRectangleBorder( - borderRadius: - BorderRadius.circular(10), + Container( + margin: + EdgeInsets.symmetric(horizontal: 150), + child: SizedBox( + width: double.infinity, + height: 45, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: Color(0xFF00989E), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(10), + ), + ), + onPressed: handleSubmit, + child: Text( + "Login With OTP", + style: TextStyle( + color: Color(0xFFFFFFFF)), ), - ), - onPressed: handleSubmit, - child: Text( - "Login With OTP", - style: TextStyle( - color: Color(0xFFFFFFFF)), ), ), ), @@ -316,22 +339,27 @@ class _MyPhoneState extends State { height: _size.width <= 1100 ? 0 : 0, ), _size.width > 1100 - ? Column( - children: [ - SizedBox(height: 30), - Text( - "Benefits of Login", - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, + ? Container( + margin: EdgeInsets.symmetric( + horizontal: 150), + child: Column( + children: [ + SizedBox(height: 30), + Text( + "Benefits of Login", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, + ), ), - ), - SizedBox(height: 15), - ], - ) + SizedBox(height: 15), + ], + )) : SizedBox(), _size.width > 1100 ? Container( + margin: EdgeInsets.symmetric( + horizontal: 150), child: Row( mainAxisAlignment: MainAxisAlignment.center, diff --git a/lib/verify.dart b/lib/verify.dart index 51442af..7086a77 100644 --- a/lib/verify.dart +++ b/lib/verify.dart @@ -111,7 +111,7 @@ class _MyVerifyState extends State { // ToastHelper.showSuccessToast(context, 'Successfully Login'); print('Successfully Login'); // Redirect to another page - Navigator.pushNamed(context, 'home'); + Navigator.pushNamed(context, 'empDetails'); } else { // Show a Snackbar if the OTP is invalid // ToastHelper.showErrorToast(context, 'Invalid OTP. Please try again');