From 753893cd56fc80d668dac398e9663e8e6896d645 Mon Sep 17 00:00:00 2001 From: Sneha Date: Thu, 21 Aug 2025 16:03:45 +0530 Subject: [PATCH] dashboard added --- android/app/src/main/AndroidManifest.xml | 1 + images/customercare_appbar.png | Bin 0 -> 2092 bytes images/notification_appbar.png | Bin 0 -> 1992 bytes lib/common/dashboard.dart | 19 +++ lib/common/settings.dart | 39 ++++++ lib/common/splash_screen.dart | 64 +++++----- lib/login/login.dart | 5 +- lib/login/login_signup_screen.dart | 7 +- lib/login/signup.dart | 150 +++++++++++++++++++++++ 9 files changed, 250 insertions(+), 35 deletions(-) create mode 100644 images/customercare_appbar.png create mode 100644 images/notification_appbar.png create mode 100644 lib/common/dashboard.dart create mode 100644 lib/login/signup.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 3926dfc..eef1798 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,4 +1,5 @@ + @~0drDELIAGL9O(c600d`2O+f$vv5yP=^{Tts4ktQCy@LEk)FU*m(KAMh^dk;@)L;e(ph=}(_LmP z+2=;lj741b4wP+50PgT{z#_WejE1&&BEb7&?|XLvJRXmS9SA)oilP`GT!#Q-^&Y2(;abBs198QTWt(|I};*`hTAj;m_l{bJmD?X7F80?_5V@N9aIIz=_?I$0}@%% zu(uA0+!5mJcW_82LevmJRrCw0+?hBnHxGzLWPOR;q{-bAQYeP9B(O(wkKe!%tqV~} z1cX=gGbvm7x%Z$%kuWK3DGn{8RUz~QEs(FR|3Gz^Aw7wwZf3!$mEb`s3rX;?i$0?@ zA=1%Nctq`ZZ22d9;=Q}3;A?2;JfW9oR)uv3zSwAbG!;Nw=pib`76s?}scT6D1zl^R zuDR^=i&5V}eV2x5MTm5=W;0JvB7_@Vtd#0&(zWfxfH4idccDR?H%<0U(v=AR%%MY~ z==&Ig#gRq7K}+nHkEn?f&;af&A_yma5kaBv!Ok)w`fksmA)H!-wuWHv##k_b4Ob(h zs-z<-I5HMYtzr%}acdFE8cZax&rJkHdQb9&v0xC|jkXLpvj{tDz`1z;?h!DBz5_Ks zcU~L%i$?kihZYfzjYSalfib#r1NqcYj20{hwMS6ygh2eoP+%_3-c5lyx`|R-szqSU zMMZEVL^@>E8~ph&w}w>=eTAM^s8c1?abyvuW~m?6@R`M82IOECnE56>8C(6|tK$Y<&w76I#1cbP0c9TpeBSbz75 zxUh)W@V?-%lu?%DJmGC|sXH-Lq8c_Admh3}&@uRU=^ zqQN2-tePfI1-uYU@Io-b3&Df|lq6kK8N|5-WU}5P|CeTw_;Be^lLLyp{dg-O(le^+ zlpJn@@to={6(MC(+{Q?V?hof#4l;#*7HLM$sT6G)>Sb-7hlTru-oM8kwP_Zu4G*qn z>PgQgshez2Kp*Q_i0Z%KC7&rQeC>ri8J7rIc z-0ZAFFG3frG)=m1kX9QUC)9~&ZyieQ{l5;k5~QK2%w8Cjdc>K#i+8P$2+b9k$frV_ zP4nK4h7Wc?%EnJi_X14z#aTh!tm%Wxna4C&o2CE_Lg2JW1Wz&A)j&e#Hu1GS0%Isd z_IFc<3psn=i@Io-b3&8|01QWavOz=W5!3)6z zF9Z|35KQnwFrl0f68&+Sx=5K>hu4HqakPs*1fGDW9#W38e!VIL8Ulf&;c*%Xd2rkK zd{_@L^I^v8g&`Px05f74jXncydIe3GoQn5nCU1V0L~9SGbpJ(%D=OE^%AU3I6N`qU znZ*Hut26->FnQhdn#%QZv$J*`5deGWQQ87Ggs={eQuVUL)^0TsxO(gzrm2aF! zB(Mi?nH#gCCK=$U_bXEV(Yv66SrM4Fc_QMo1-$CV!> znMBk?g9~~ggm#`m+}2^OrCk2DLWKnCZw3(EA05-@yeNO5+7O3oVG+(c?~{QsI?Vyf z17rNBs+5R)ZxueZMoI&=8$;TcK;@c1hfXibkx;qW+5}uT1{20wX*gL5K_aN7_Qv9F z8wucfkr?SH(dg1PgIc%1j5IAKOrUL2F~)G?epG0@&>SPYW}HHHeMEGB_@*=e?zGQ% zd^P_`MHn2Jo5%X0wOLuja�!SLkb};ic1jsi9pT)xg#PuUw^e)<93Iq-Fq*^Sp0v zpf~K5f1tE+T^4%f**a5XGlAyW2w|76p!FWFLR zt|nj6;Qk7uKEmW$46`P_bov>xeo{XzLUa2oe1t&RUKs17=7v|pA}IK*H6`++s|B?N zQ45EAE}Z@uSwv9WZp+0Onj$bp^Ut_G9I6d6SCJPO^%2srPJ`QZlVvEDfnRJhpa>dQ zzSO&nA5OPi9(>@_GzBzvPYO%ur3Mvtt?GV4iR6S+y`{PMblBD|Bd-bF+DIMuv^Xgz zr*!Klj-H80000@~0drDELIAGL9O(c600d`2O+f$vv5yPO4WxC$KYSvORT-J$AD41c|qHin6s+lqayV z^)&uq7F#(HiC%zozAOWv1dyPL-;l@#EK&FaxcImi0PuJ`9?$<3ga!~rD_sa+6@c9Z zhO2-W(d+o@TsQ>AhV&w#Z}kc?7$nJ29~{R?0U`pR)un>opeJ1Azk=yVfI**xIY^S@ z9yo|o0^|kX-k{pP3DXz)WO(a95+h4@k|Y^|BRC;|)qiS*RJj0o;kRB=?Tf)BY7(JR0cI+EKDK9UAVxB2%KPnv zQ@k&AVGA*|vN)e7P#@3WK9r>f5h@d4%EIRbya(BM_oA@%KkqgPl5!!oE>GGdR4hUz z0*D%lt=Aux(pPnv3J<<__W(F$##tH#%9s}HV0>rILrk#G($ zjQJLjDQXIXS1$DZ-y&=QUul&Qm~RE<1z@ZzO;>%%I$`XMBEwxUjClb9{6U(IL9KhR zQZiNL2%69W;Epss70y$RvY@COnen}A8>65f<;fq1;4CA>L+!yvu|)QnjH+T&Q7&QMyroPfcpJVQGM zgP0Xy%&K>?H4c+kl2!>PFAdBJ5MV4#M|KFVgMoZ5z|4Ab8@2(e+R=b6NI6h&xdkA~ zR|{QUh`Ru3uUZDf7z|=o0H#>zXbpc<;fTq z-_-~PTY$=I00%BF#9dH4qhcg!f;bWPa-LoGn*HI_8t+=dGZPi?uq3fhmr0A>Ve z;X`RUgICZv@Iac(;1@8!%mRq+hbatjfR($S&y31u8R~{+ZvjDTTbU>Q*gOI9XI2cG zXAj<(T>w=)E`x(6jQ_u-@RXAq;{Y~hZ3Qz4pyh@h1U+afsN=RiTPv74KtnI~7l+Bo zyF1WeqNNqSL1Qg=WBL{lv^R8uFrfMDDbis{@@g_N?iJ&ndbVbt}NOZZP^+lolX2yy_4nYL-2i7xLf@MF%q#6HBIV16n#phV9LR;k}A{m6WLrG8bwKG|>`3 zL_Vq(+{CbRVHf6|EZxor84`p+)@ucAolKCjP3rpg!zZ5v!FPHwy(;j z*9EBpuRWL1bYJn_(bmv&Vbp8^4cgCj1qN?)vgrxX$SuX139zS=O=~eOUyxdOZQ3z) ze$iis*J=S`K}t-p6vHo1e&%S2$!O{2XmJQ?#@6XCW5|QD=O8F!CUTEIUhuS$Z~NFy zkH_Qjcsw4D$Kx>yZDMRiOSkx*0*h|0yq?C(;L>|8t!#dN&*ek@8Q>6=Tw$UE70lD( zCcSUjg>1Z2{tg*&JKxsi_hh}~_5A)C0R!Z6S{GJb?vvQa`Nj$Ztx9^Rj35E=gP9N69RBX=Vvc8 zt`ji;FZ|<~W4lb@i~yX``S~AV=f>OO?ite?J=|bFp~Bw=hj2;&PU&0kv@m}=pDCP~ zh)qHqgBfsFKpu%%+96=-i$JTyX#u`O_@`##n%dO~`_a6B-(T#@^0OYQyco{o@pwF* aY4{IHL7GWjLpaX>0000 createState() => _DashboardScreenState(); +} + +class _DashboardScreenState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar:AppSettings.appBar('Dashboard'), + + ); + } +} diff --git a/lib/common/settings.dart b/lib/common/settings.dart index 9e7cbd3..dd645a6 100644 --- a/lib/common/settings.dart +++ b/lib/common/settings.dart @@ -305,4 +305,43 @@ class AppSettings{ textColor: Colors.white, fontSize: 16.0); } + + static appBar(String title) { + title = title ?? ''; + return AppBar( + backgroundColor: Colors.white, + elevation: 0, + scrolledUnderElevation: 0, + title: Text(title,style: fontTextStyle(14,Color(0XFF2A2A2A),FontWeight.w500),), + iconTheme: IconThemeData(color: Color(0XFF2A2A2A)), + actions: [ + Row( + children: [ + Padding(padding: EdgeInsets.fromLTRB(10,10,0,10), + child: IconButton( + icon: Image( + image: AssetImage('images/customercare_appbar.png') + + ), + onPressed: (){ + + }, + ), + ), + + Padding(padding: EdgeInsets.fromLTRB(0,10,10,10), + child: IconButton( + icon: Image.asset( + 'images/notification_appbar.png', // Example URL image + ), + onPressed: (){ + + }, + ), + ) + ], + ) + ], + ); + } } \ No newline at end of file diff --git a/lib/common/splash_screen.dart b/lib/common/splash_screen.dart index 148d400..cc75f45 100644 --- a/lib/common/splash_screen.dart +++ b/lib/common/splash_screen.dart @@ -1,11 +1,15 @@ -import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:flutter_secure_storage/flutter_secure_storage.dart'; +import 'package:supplier_new/common/dashboard.dart'; +import 'package:supplier_new/common/settings.dart'; import 'package:supplier_new/login/login.dart'; import 'package:supplier_new/login/starting_screen.dart'; void main() async{ SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + await Firebase.initializeApp(); //FirebaseMessaging.onBackgroundMessage(_messageHandler); runApp(new Splash()); } @@ -17,7 +21,7 @@ class Splash extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, - title: 'Water Management', + title: 'Aquick Supplier', theme: new ThemeData( primarySwatch: Colors.blue, ), @@ -35,36 +39,31 @@ class SplashScreen extends StatefulWidget { class _SplashScreenState extends State { - - Widget _defaultHome = new StartingScreen(); - - - /*void loginCheck()async{ - - bool _result = await AppSettings.isSigIn(); - - - *//*store device information in firebase*//* - try{ - if(Platform.isIOS){ - await FireBaseCore.init(); - } - //await FireBaseCore.init(); - await FireBaseCore.checkFcmTokenInFireStoreDbWithdeviceId(); - // AppSettings.fcmId=await AppSettings.getData('FCM_TOKEN', 'STRING'); - } - catch(e){ - print(e); - } - - if (_result) { + final storage = FlutterSecureStorage( + aOptions: AndroidOptions( + resetOnError: true, + encryptedSharedPreferences: true, + ), + ); + + Future _checkLoginStatus() async { + await Future.delayed(Duration(seconds: 2)); // Simulate splash delay + String? authToken = await storage.read(key: 'authToken'); + if (authToken != null) { await AppSettings.loadDataFromMemory(); - AppSettings.fcmId=await AppSettings.getData('FCM_TOKEN', 'STRING'); - // await AppSettings.getProfile(); - _defaultHome = new DashboardScreen(); + //AppSettings.fcmId=await AppSettings.getData('FCM_TOKEN', 'STRING'); + Navigator.pushReplacement( + context, + MaterialPageRoute(builder: (context) => DashboardScreen()), + ); + } else { + // Navigate to Login Screen otherwise + Navigator.pushReplacement( + context, + MaterialPageRoute(builder: (context) => StartingScreen()), + ); } - }*/ - + } @@ -73,12 +72,13 @@ class _SplashScreenState extends State { //loginCheck(); super.initState(); - Future.delayed( + _checkLoginStatus(); + /* Future.delayed( const Duration(seconds: 3), () => Navigator.push( context, MaterialPageRoute(builder: (context) => _defaultHome), - )); + ));*/ } @override Widget build(BuildContext context) { diff --git a/lib/login/login.dart b/lib/login/login.dart index 8181edb..2ae5d90 100644 --- a/lib/login/login.dart +++ b/lib/login/login.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:supplier_new/common/dashboard.dart'; import 'package:supplier_new/common/settings.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; @@ -219,11 +220,11 @@ class _LoginState extends State { await storage.write(key: 'authToken', value: token); print('Token saved: $token'); - /*await Navigator.push( + await Navigator.push( context, MaterialPageRoute( builder: (context) => const DashboardScreen()), - );*/ + ); AppSettings.longSuccessToast("Logged in Successfully"); mobileNumberController.text=''; passwordController.text=''; diff --git a/lib/login/login_signup_screen.dart b/lib/login/login_signup_screen.dart index a28b7b6..6e1b377 100644 --- a/lib/login/login_signup_screen.dart +++ b/lib/login/login_signup_screen.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:supplier_new/common/settings.dart'; import 'package:supplier_new/login/login.dart'; +import 'package:supplier_new/login/signup.dart'; class LoginSignUpScreen extends StatefulWidget { const LoginSignUpScreen({super.key}); @@ -79,7 +80,11 @@ class _LoginSignUpScreenState extends State { ), ), onPressed: () async { - // Your onPressed logic + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => SignUp()), + ); }, child: Text( 'Sign up', diff --git a/lib/login/signup.dart b/lib/login/signup.dart new file mode 100644 index 0000000..8d60fee --- /dev/null +++ b/lib/login/signup.dart @@ -0,0 +1,150 @@ +import 'package:flutter/material.dart'; + +import '../common/settings.dart'; + +class SignUp extends StatefulWidget { + const SignUp({super.key}); + + @override + State createState() => _SignUpState(); +} + +class _SignUpState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + backgroundColor: Colors.white, + elevation: 0, + scrolledUnderElevation: 0, + + ), + backgroundColor: Colors.white, + body: SingleChildScrollView( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Top image + Container( + width: 24, + height: 24, + decoration: const BoxDecoration( + image: DecorationImage( + image: AssetImage('images/business.png'), + fit: BoxFit.contain, // Optional: can also use BoxFit.cover + ), + ), + ), + + const SizedBox(height: 12), + + Text( + 'Tell us about your water tanker business', + style: fontTextStyle(12, Color(0xFF2D2E30),FontWeight.w400), + ), + + const SizedBox(height: 24), + + Text( + "BUSINESS REGISTRATION", + style: fontTextStyle(10, Color(0xFF2D2E30),FontWeight.w600), + ), + const SizedBox(height: 10), + + _buildTextField('Business Name *', 'Enter your Business Name'), + _buildTextField('Registration Number *', 'Business Registration Number'), + _buildTextField('Years in Business *', 'Years of operation'), + + const SizedBox(height: 24), + Text( + "CONTACT INFORMATION", + style: fontTextStyle(10, Color(0xFF2D2E30),FontWeight.w600), + ), + const SizedBox(height: 10), + + _buildTextField('Primary Contact Name *', 'Full Name'), + _buildTextField('Position/Title *', 'Job title'), + _buildTextField('Mobile Number *', 'Mobile Number'), + _buildTextField('Additional Mobile Number', 'Alternate Number'), + _buildTextField('Email Address', 'Email Address'), + + const SizedBox(height: 24), + Text( + "BUSINESS ADDRESS", + style: fontTextStyle(10, Color(0xFF2D2E30),FontWeight.w600), + ), + const SizedBox(height: 10), + + _buildTextField('Address Line 1 *', '123 Main St'), + _buildTextField('Address Line 2(Optional)', 'Area'), + _buildTextField('City *', 'City'), + _buildTextField('State/Province *', 'State'), + _buildTextField('ZIP/Postal Code ', '12345'), + + const SizedBox(height: 10), + Padding( + padding: const EdgeInsets.only(left: 45.0), // Add space on the left + child: Row( + children: [ + Image.asset( + 'images/Maps.png', + width: 20, + height: 20, + ), + const SizedBox(width: 8), + Text( + "Add Location from Maps", + style: fontTextStyle(14, Color(0xFF2D2E30),FontWeight.w500), + ), + ], + ), + ), + const SizedBox(height: 20), + SizedBox( + width: double.infinity, + child: ElevatedButton( + onPressed: () { + // Submit logic goes here + }, + style: ElevatedButton.styleFrom( + backgroundColor: Colors.blueAccent, + padding: const EdgeInsets.symmetric(vertical: 16), + ), + child: Text( + 'Submit', + style: fontTextStyle(16, Colors.white, FontWeight.w600), + ), + ), + ), + ], + ), + ), + ); + } + + Widget _buildTextField(String label, String hint) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + label, + style: fontTextStyle(12, Color(0xFF2D2E30),FontWeight.w500), + ), + const SizedBox(height: 6), + TextField( + decoration: InputDecoration( + hintText: hint, + hintStyle: fontTextStyle(13, Colors.grey.shade600, FontWeight.normal), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(8), + ), + contentPadding: const EdgeInsets.symmetric(horizontal: 12, vertical: 14), + ), + ), + const SizedBox(height: 16), + ], + ); + } +} +