@ -106,398 +106,388 @@ class _LandingPageState extends State<LandingPage> {
insuranceViewModel = Provider . of < InsuranceViewModel > ( context , listen: false ) ;
insuranceViewModel = Provider . of < InsuranceViewModel > ( context , listen: false ) ;
immediateLiveCareViewModel = Provider . of < ImmediateLiveCareViewModel > ( context , listen: false ) ;
immediateLiveCareViewModel = Provider . of < ImmediateLiveCareViewModel > ( context , listen: false ) ;
appState = getIt . get < AppState > ( ) ;
appState = getIt . get < AppState > ( ) ;
return Scaffold (
return PopScope (
backgroundColor: AppColors . bgScaffoldColor ,
canPop: false ,
body: SingleChildScrollView (
child: Scaffold (
padding: EdgeInsets . only ( top: kToolbarHeight + 0. h , bottom: 24 ) ,
backgroundColor: AppColors . bgScaffoldColor ,
child: Column (
body: SingleChildScrollView (
spacing: 16. h ,
padding: EdgeInsets . only ( top: kToolbarHeight + 0. h , bottom: 24 ) ,
children: [
child: Column (
Row (
spacing: 16. h ,
spacing: 8. h ,
children: [
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
Row (
children: [
spacing: 8. h ,
appState . isAuthenticated
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
? WelcomeWidget (
children: [
onTap: ( ) {
appState . isAuthenticated
Navigator . of ( context ) . push ( springPageRoute ( ProfileSettings ( ) ) ) ;
? WelcomeWidget (
} ,
onTap: ( ) {
name: ( ' ${ appState . getAuthenticatedUser ( ) ! . firstName ! } ${ appState . getAuthenticatedUser ( ) ! . lastName ! } ' ) ,
Navigator . of ( context ) . push ( springPageRoute ( ProfileSettings ( ) ) ) ;
imageUrl: appState . getAuthenticatedUser ( ) ? . gender = = 1 ? AppAssets . male_img : AppAssets . femaleImg ,
} ,
) . expanded
name: ( ' ${ appState . getAuthenticatedUser ( ) ! . firstName ! } ${ appState . getAuthenticatedUser ( ) ! . lastName ! } ' ) ,
: CustomButton (
imageUrl: appState . getAuthenticatedUser ( ) ? . gender = = 1 ? AppAssets . male_img : AppAssets . femaleImg ,
text: LocaleKeys . loginOrRegister . tr ( context: context ) ,
) . expanded
onPressed: ( ) async {
: CustomButton (
await authVM . onLoginPressed ( ) ;
text: LocaleKeys . loginOrRegister . tr ( context: context ) ,
} ,
onPressed: ( ) async {
backgroundColor: Color ( 0xffFEE9EA ) ,
await authVM . onLoginPressed ( ) ;
borderColor: Color ( 0xffFEE9EA ) ,
} ,
textColor: Color ( 0xffED1C2B ) ,
backgroundColor: Color ( 0xffFEE9EA ) ,
fontSize: 14. f ,
borderColor: Color ( 0xffFEE9EA ) ,
fontWeight: FontWeight . w500 ,
textColor: Color ( 0xffED1C2B ) ,
borderRadius: 12 ,
fontSize: 14. f ,
padding: EdgeInsets . fromLTRB ( 10. h , 0 , 10. h , 0 ) ,
fontWeight: FontWeight . w500 ,
height: 40. h ,
borderRadius: 12. r ,
) ,
padding: EdgeInsets . fromLTRB ( 10. h , 0 , 10. h , 0 ) ,
Row (
height: 40. h ,
mainAxisSize: MainAxisSize . min ,
spacing: 12. h ,
children: [
Utils . buildSvgWithAssets ( icon: AppAssets . bell , height: 18. h , width: 18. h ) . onPress ( ( ) {
Navigator . of ( context ) . push (
CustomPageRoute (
page: MedicalFilePage ( ) ,
/ / page: LoginScreen ( ) ,
) ,
) ;
} ) ,
Utils . buildSvgWithAssets ( icon: AppAssets . search_icon , height: 18. h , width: 18. h ) . onPress ( ( ) {
Navigator . of ( context ) . push (
CustomPageRoute (
page: MedicalFilePage ( ) ,
/ / page: LoginScreen ( ) ,
) ,
) ;
} ) ,
Utils . buildSvgWithAssets ( icon: AppAssets . contact_icon , height: 18. h , width: 18. h ) . onPress ( ( ) {
Navigator . of ( context ) . push (
CustomPageRoute (
page: MedicalFilePage ( ) ,
/ / page: LoginScreen ( ) ,
) ,
) ,
) ;
Row (
} ) ,
mainAxisSize: MainAxisSize . min ,
] ,
spacing: 12. h ,
)
] ,
) . paddingSymmetrical ( 24. h , 0. h ) ,
appState . isAuthenticated
? Column (
children: [
children: [
SizedBox ( height: 12. h ) ,
Utils . buildSvgWithAssets ( icon: AppAssets . bell , height: 18. h , width: 18. h ) . onPress ( ( ) {
Row (
Navigator . of ( context ) . push (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
CustomPageRoute (
children: [
page: MedicalFilePage ( ) ,
" Appointments & Visits " . toText16 ( isBold: true ) ,
/ / page: LoginScreen ( ) ,
Row (
children: [
LocaleKeys . viewAll . tr ( context: context ) . toText12 ( color: AppColors . primaryRedColor ) ,
SizedBox ( width: 2. h ) ,
Icon ( Icons . arrow_forward_ios , color: AppColors . primaryRedColor , size: 10. h ) ,
] ,
) ,
) ,
] ,
) ;
) . paddingSymmetrical ( 24. h , 0. h ) . onPress ( ( ) {
} ) ,
Utils . buildSvgWithAssets ( icon: AppAssets . search_icon , height: 18. h , width: 18. h ) . onPress ( ( ) {
Navigator . of ( context ) . push (
Navigator . of ( context ) . push (
CustomPageRoute (
CustomPageRoute (
page: MyAppointmentsPage ( ) ,
page: MedicalFilePage ( ) ,
/ / page: LoginScreen ( ) ,
) ,
) ,
) ;
) ;
} ) ,
} ) ,
SizedBox ( height: 16. h ) ,
Utils . buildSvgWithAssets ( icon: AppAssets . contact_icon , height: 18. h , width: 18. h ) . onPress ( ( ) {
Consumer < MyAppointmentsViewModel > ( builder: ( context , myAppointmentsVM , child ) {
Navigator . of ( context ) . push (
return myAppointmentsVM . isMyAppointmentsLoading
CustomPageRoute (
? Container (
page: MedicalFilePage ( ) ,
decoration: RoundedRectangleBorder ( ) . toSmoothCornerDecoration ( color: AppColors . whiteColor , borderRadius: 24. h , hasShadow: true ) ,
/ / page: LoginScreen ( ) ,
child: AppointmentCard (
) ,
patientAppointmentHistoryResponseModel: PatientAppointmentHistoryResponseModel ( ) ,
) ;
myAppointmentsViewModel: myAppointmentsViewModel ,
} ) ,
bookAppointmentsViewModel: bookAppointmentsViewModel ,
] ,
isLoading: true ,
) ,
isFromHomePage: true ,
] ,
) ,
) . paddingSymmetrical ( 24. h , 0. h ) ,
) . paddingSymmetrical ( 24. h , 0. h )
appState . isAuthenticated
: myAppointmentsVM . patientAppointmentsHistoryList . isNotEmpty
? Column (
? myAppointmentsVM . patientAppointmentsHistoryList . length = = 1
children: [
? Container (
SizedBox ( height: 12. h ) ,
decoration:
Row (
RoundedRectangleBorder ( ) . toSmoothCornerDecoration ( color: AppColors . whiteColor , borderRadius: 24. h , hasShadow: true ) ,
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
child: AppointmentCard (
children: [
patientAppointmentHistoryResponseModel: myAppointmentsVM . patientAppointmentsHistoryList . first ,
" Appointments & Visits " . toText16 ( isBold: true ) ,
myAppointmentsViewModel: myAppointmentsViewModel ,
Row (
bookAppointmentsViewModel: bookAppointmentsViewModel ,
children: [
isLoading: false ,
LocaleKeys . viewAll . tr ( context: context ) . toText12 ( color: AppColors . primaryRedColor ) ,
isFromHomePage: true ,
SizedBox ( width: 2. h ) ,
) ,
Icon ( Icons . arrow_forward_ios , color: AppColors . primaryRedColor , size: 10. h ) ,
) . paddingSymmetrical ( 24. h , 0. h )
] ,
: Swiper (
) ,
itemCount: myAppointmentsVM . isMyAppointmentsLoading
] ,
? 3
) . paddingSymmetrical ( 24. h , 0. h ) . onPress ( ( ) {
: myAppointmentsVM . patientAppointmentsHistoryList . length < 3
Navigator . of ( context ) . push ( CustomPageRoute ( page: MyAppointmentsPage ( ) ) ) ;
? myAppointmentsVM . patientAppointmentsHistoryList . length
} ) ,
: 3 ,
SizedBox ( height: 16. h ) ,
layout: SwiperLayout . STACK ,
Consumer < MyAppointmentsViewModel > (
loop: true ,
builder: ( context , myAppointmentsVM , child ) {
itemWidth: MediaQuery . of ( context ) . size . width - 48. h ,
return myAppointmentsVM . isMyAppointmentsLoading
indicatorLayout: PageIndicatorLayout . COLOR ,
? Container (
axisDirection: AxisDirection . right ,
decoration: RoundedRectangleBorder ( ) . toSmoothCornerDecoration (
controller: _controller ,
color: AppColors . whiteColor ,
itemHeight: 210 + 25 ,
borderRadius: 24. r ,
pagination: const SwiperPagination (
hasShadow: true ,
alignment: Alignment . bottomCenter ,
) ,
margin: EdgeInsets . only ( top: 210 + 8 + 24 ) ,
child: AppointmentCard (
builder: DotSwiperPaginationBuilder ( color: Color ( 0xffD9D9D9 ) , activeColor: AppColors . blackBgColor ) ,
patientAppointmentHistoryResponseModel: PatientAppointmentHistoryResponseModel ( ) ,
) ,
myAppointmentsViewModel: myAppointmentsViewModel ,
itemBuilder: ( BuildContext context , int index ) {
bookAppointmentsViewModel: bookAppointmentsViewModel ,
return Container (
isLoading: true ,
decoration: RoundedRectangleBorder ( )
isFromHomePage: true ,
. toSmoothCornerDecoration ( color: AppColors . whiteColor , borderRadius: 24. h , hasShadow: true ) ,
) ,
) . paddingSymmetrical ( 24. h , 0. h )
: myAppointmentsVM . patientAppointmentsHistoryList . isNotEmpty
? myAppointmentsVM . patientAppointmentsHistoryList . length = = 1
? Container (
decoration: RoundedRectangleBorder ( ) . toSmoothCornerDecoration (
color: AppColors . whiteColor ,
borderRadius: 24. r ,
hasShadow: true ,
) ,
child: AppointmentCard (
child: AppointmentCard (
patientAppointmentHistoryResponseModel: myAppointmentsVM . patientAppointmentsHistoryList [ index ] ,
patientAppointmentHistoryResponseModel: myAppointmentsVM . patientAppointmentsHistoryList .first ,
myAppointmentsViewModel: myAppointmentsViewModel ,
myAppointmentsViewModel: myAppointmentsViewModel ,
bookAppointmentsViewModel: bookAppointmentsViewModel ,
bookAppointmentsViewModel: bookAppointmentsViewModel ,
isLoading: false ,
isLoading: false ,
isFromHomePage: true ,
isFromHomePage: true ,
) ,
) ,
) ;
) . paddingSymmetrical ( 24. h , 0. h )
} ,
: Swiper (
)
itemCount: myAppointmentsVM . isMyAppointmentsLoading
: Container (
? 3
width: double . infinity ,
: myAppointmentsVM . patientAppointmentsHistoryList . length < 3
decoration:
? myAppointmentsVM . patientAppointmentsHistoryList . length
RoundedRectangleBorder ( ) . toSmoothCornerDecoration ( color: AppColors . whiteColor , borderRadius: 24 , hasShadow: true ) ,
: 3 ,
child: Padding (
layout: SwiperLayout . STACK ,
padding: EdgeInsets . all ( 12. h ) ,
loop: true ,
child: Column (
itemWidth: MediaQuery . of ( context ) . size . width - 48. h ,
children: [
indicatorLayout: PageIndicatorLayout . COLOR ,
Utils . buildSvgWithAssets ( icon: AppAssets . home_calendar_icon , width: 32. h , height: 32. h ) ,
axisDirection: AxisDirection . right ,
SizedBox ( height: 12. h ) ,
controller: _controller ,
" You do not have any upcoming appointment. Please book an appointment " . needTranslation . toText12 ( isCenter: true ) ,
itemHeight: 210 + 25 ,
SizedBox ( height: 12. h ) ,
pagination: const SwiperPagination (
CustomButton (
alignment: Alignment . bottomCenter ,
text: LocaleKeys . bookAppo . tr ( context: context ) ,
margin: EdgeInsets . only ( top: 210 + 8 + 24 ) ,
onPressed: ( ) {
builder: DotSwiperPaginationBuilder ( color: Color ( 0xffD9D9D9 ) , activeColor: AppColors . blackBgColor ) ,
Navigator . of ( context ) . push (
) ,
CustomPageRoute (
itemBuilder: ( BuildContext context , int index ) {
page: BookAppointmentPage ( ) ,
return Container (
decoration: RoundedRectangleBorder ( ) . toSmoothCornerDecoration (
color: AppColors . whiteColor ,
borderRadius: 24. r ,
hasShadow: true ,
) ,
child: AppointmentCard (
patientAppointmentHistoryResponseModel: myAppointmentsVM . patientAppointmentsHistoryList [ index ] ,
myAppointmentsViewModel: myAppointmentsViewModel ,
bookAppointmentsViewModel: bookAppointmentsViewModel ,
isLoading: false ,
isFromHomePage: true ,
) ,
) ,
) ;
) ;
} ,
} ,
backgroundColor: Color ( 0xffFEE9EA ) ,
)
borderColor: Color ( 0xffFEE9EA ) ,
: Container (
textColor: Color ( 0xffED1C2B ) ,
width: double . infinity ,
fontSize: 14. f ,
decoration:
fontWeight: FontWeight . w500 ,
RoundedRectangleBorder ( ) . toSmoothCornerDecoration ( color: AppColors . whiteColor , borderRadius: 24. r , hasShadow: true ) ,
padding: EdgeInsets . fromLTRB ( 10. h , 0 , 10. h , 0 ) ,
child: Padding (
icon: AppAssets . add_icon ,
padding: EdgeInsets . all ( 12. h ) ,
iconColor: AppColors . primaryRedColor ,
child: Column (
) ,
] ,
) ,
) ,
) . paddingSymmetrical ( 24. h , 0. h ) ;
} ) ,
Consumer < ImmediateLiveCareViewModel > ( builder: ( context , immediateLiveCareVM , child ) {
return immediateLiveCareVM . patientHasPendingLiveCareRequest
? Column (
children: [
SizedBox ( height: 12. h ) ,
Container (
decoration: RoundedRectangleBorder ( ) . toSmoothCornerDecoration (
color: AppColors . whiteColor ,
borderRadius: 20. h ,
hasShadow: true ,
side: BorderSide ( color: AppColors . ratingColorYellow , width: 3. h ) ,
) ,
width: double . infinity ,
child: Padding (
padding: EdgeInsets . all ( 16. h ) ,
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: [
children: [
AppCustomChipWidget (
Utils . buildSvgWithAssets ( icon: AppAssets . home_calendar_icon , width: 32. h , height: 32. h ) ,
labelText: immediateLiveCareViewModel . patientLiveCareHistoryList [ 0 ] . stringCallStatus ,
SizedBox ( height: 12. h ) ,
backgroundColor: AppColors . warningColorYellow . withValues ( alpha: 0.20 ) ,
" You do not have any upcoming appointment. Please book an appointment " . needTranslation . toText12 ( isCenter: true ) ,
textColor: AppColors . alertColor ,
SizedBox ( height: 12. h ) ,
CustomButton (
text: LocaleKeys . bookAppo . tr ( context: context ) ,
onPressed: ( ) {
Navigator . of ( context ) . push ( CustomPageRoute ( page: BookAppointmentPage ( ) ) ) ;
} ,
backgroundColor: Color ( 0xffFEE9EA ) ,
borderColor: Color ( 0xffFEE9EA ) ,
textColor: Color ( 0xffED1C2B ) ,
fontSize: 14. f ,
fontWeight: FontWeight . w500 ,
padding: EdgeInsets . fromLTRB ( 10. h , 0 , 10. h , 0 ) ,
icon: AppAssets . add_icon ,
iconColor: AppColors . primaryRedColor ,
height: ( isFoldable | | isTablet ) ? 56. h : 46. h ,
) ,
) ,
Utils . buildSvgWithAssets ( icon: AppAssets . waiting_icon , width: 24. h , height: 24. h ) ,
/ / Lottie . asset ( AppAnimations . pending_loading_animation , repeat: true , reverse: false , frameRate: FrameRate ( 60 ) , width: 40. h , height: 40. h , fit: BoxFit . contain ) ,
] ,
] ,
) ,
) ,
SizedBox ( height: 8. h ) ,
) ,
Row (
) . paddingSymmetrical ( 24. h , 0. h ) ;
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
} ,
) ,
Consumer < ImmediateLiveCareViewModel > (
builder: ( context , immediateLiveCareVM , child ) {
return immediateLiveCareVM . patientHasPendingLiveCareRequest
? Column (
children: [
SizedBox ( height: 12. h ) ,
Container (
decoration: RoundedRectangleBorder ( ) . toSmoothCornerDecoration (
color: AppColors . whiteColor ,
borderRadius: 20. r ,
hasShadow: true ,
side: BorderSide ( color: AppColors . ratingColorYellow , width: 3. h ) ,
) ,
width: double . infinity ,
child: Padding (
padding: EdgeInsets . all ( 16. h ) ,
child: Column (
crossAxisAlignment: CrossAxisAlignment . start ,
children: [
children: [
" You have a pending LiveCare request " . needTranslation . toText12 ( isBold: true ) ,
Row (
Utils . buildSvgWithAssets (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
icon: AppAssets . forward_arrow_icon_small ,
children: [
iconColor: AppColors . blackColor ,
AppCustomChipWidget (
width: 20. h ,
labelText: immediateLiveCareViewModel . patientLiveCareHistoryList [ 0 ] . stringCallStatus ,
height: 15. h ,
backgroundColor: AppColors . warningColorYellow . withValues ( alpha: 0.20 ) ,
fit: BoxFit . contain ,
textColor: AppColors . alertColor ,
) ,
Utils . buildSvgWithAssets ( icon: AppAssets . waiting_icon , width: 24. h , height: 24. h ) ,
/ / Lottie . asset ( AppAnimations . pending_loading_animation , repeat: true , reverse: false , frameRate: FrameRate ( 60 ) , width: 40. h , height: 40. h , fit: BoxFit . contain ) ,
] ,
) ,
SizedBox ( height: 8. h ) ,
Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: [
" You have a pending LiveCare request " . needTranslation . toText12 ( isBold: true ) ,
Utils . buildSvgWithAssets (
icon: AppAssets . forward_arrow_icon_small ,
iconColor: AppColors . blackColor ,
width: 20. h ,
height: 15. h ,
fit: BoxFit . contain ,
) ,
] ,
) ,
) ,
] ,
] ,
) ,
) ,
] ,
) ,
) ,
) . paddingSymmetrical ( 24. h , 0. h ) . onPress ( ( ) {
) ,
Navigator . of ( context ) . push ( CustomPageRoute ( page: ImmediateLiveCarePendingRequestPage ( ) ) ) ;
) . paddingSymmetrical ( 24. h , 0. h ) . onPress ( ( ) {
} ) ,
Navigator . of ( context ) . push (
SizedBox ( height: 12. h ) ,
CustomPageRoute (
] ,
page: ImmediateLiveCarePendingRequestPage ( ) ,
)
) ,
: SizedBox ( height: 12. h ) ;
) ;
} ,
} ) ,
SizedBox ( height: 12. h ) ,
] ,
)
: SizedBox ( height: 12. h ) ;
} ) ,
Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: [
" Quick Links " . needTranslation . toText16 ( isBold: true ) ,
Row (
children: [
" View medical file " . needTranslation . toText12 ( color: AppColors . primaryRedColor ) ,
SizedBox ( width: 2. h ) ,
Icon ( Icons . arrow_forward_ios , color: AppColors . primaryRedColor , size: 10. h ) ,
] ,
) ,
] ,
) . paddingSymmetrical ( 24. h , 0. h ) . onPress ( ( ) {
Navigator . of ( context ) . push (
CustomPageRoute (
page: MedicalFilePage ( ) ,
) ,
) ;
} ) ,
SizedBox ( height: 16. h ) ,
Container (
height: 120. h ,
decoration: RoundedRectangleBorder ( ) . toSmoothCornerDecoration (
color: AppColors . whiteColor ,
borderRadius: 24 ,
) ,
) ,
child: Column (
Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: [
children: [
Expanded (
" Quick Links " . needTranslation . toText16 ( isBold: true ) ,
child: ListView . separated (
Row (
scrollDirection: Axis . horizontal ,
children: [
itemCount: LandingPageData . getLoggedInServiceCardsList . length ,
" View medical file " . needTranslation . toText12 ( color: AppColors . primaryRedColor ) ,
shrinkWrap: true ,
SizedBox ( width: 2. h ) ,
padding: EdgeInsets . only ( left: 16. h , right: 16. h ) ,
Icon ( Icons . arrow_forward_ios , color: AppColors . primaryRedColor , size: 10. h ) ,
itemBuilder: ( context , index ) {
] ,
return AnimationConfiguration . staggeredList (
position: index ,
duration: const Duration ( milliseconds: 1000 ) ,
child: SlideAnimation (
horizontalOffset: 100.0 ,
child: FadeInAnimation (
child: SmallServiceCard (
icon: LandingPageData . getLoggedInServiceCardsList [ index ] . icon ,
title: LandingPageData . getLoggedInServiceCardsList [ index ] . title ,
subtitle: LandingPageData . getLoggedInServiceCardsList [ index ] . subtitle ,
iconColor: LandingPageData . getLoggedInServiceCardsList [ index ] . iconColor ,
textColor: LandingPageData . getLoggedInServiceCardsList [ index ] . textColor ,
backgroundColor: LandingPageData . getLoggedInServiceCardsList [ index ] . backgroundColor ,
isBold: LandingPageData . getLoggedInServiceCardsList [ index ] . isBold ,
serviceName: LandingPageData . getLoggedInServiceCardsList [ index ] . serviceName ,
) ,
) ,
) ,
) ;
} ,
separatorBuilder: ( BuildContext cxt , int index ) = > 10. width ,
) ,
) ,
) ,
] ,
] ,
) ,
) . paddingSymmetrical ( 24. h , 0. h ) . onPress ( ( ) {
) . paddingSymmetrical ( 24. h , 0. h ) ,
Navigator . of ( context ) . push ( CustomPageRoute ( page: MedicalFilePage ( ) ) ) ;
] ,
} ) ,
)
SizedBox ( height: 16. h ) ,
: Container (
Container (
height: 127. h ,
height: 120. h ,
decoration: RoundedRectangleBorder ( ) . toSmoothCornerDecoration (
decoration: RoundedRectangleBorder ( ) . toSmoothCornerDecoration ( color: AppColors . whiteColor , borderRadius: 24. r ) ,
color: AppColors . whiteColor ,
child: Column (
borderRadius: 24 ,
children: [
) ,
Expanded (
child: Column (
child: ListView . separated (
children: [
scrollDirection: Axis . horizontal ,
Expanded (
itemCount: LandingPageData . getLoggedInServiceCardsList . length ,
child: ListView . separated (
shrinkWrap: true ,
scrollDirection: Axis . horizontal ,
padding: EdgeInsets . only ( left: 16. h , right: 16. h ) ,
itemCount: LandingPageData . getNotLoggedInServiceCardsList . length ,
itemBuilder: ( context , index ) {
shrinkWrap: true ,
return AnimationConfiguration . staggeredList (
padding: EdgeInsets . only ( left: 16. h , right: 16. h ) ,
position: index ,
itemBuilder: ( context , index ) {
duration: const Duration ( milliseconds: 1000 ) ,
return AnimationConfiguration . staggeredList (
child: SlideAnimation (
position: index ,
horizontalOffset: 100.0 ,
duration: const Duration ( milliseconds: 1000 ) ,
child: FadeInAnimation (
child: SlideAnimation (
child: SmallServiceCard (
horizontalOffset: 100.0 ,
icon: LandingPageData . getLoggedInServiceCardsList [ index ] . icon ,
child: FadeInAnimation (
title: LandingPageData . getLoggedInServiceCardsList [ index ] . title ,
child: SmallServiceCard (
subtitle: LandingPageData . getLoggedInServiceCardsList [ index ] . subtitle ,
serviceName: LandingPageData . getNotLoggedInServiceCardsList [ index ] . serviceName ,
iconColor: LandingPageData . getLoggedInServiceCardsList [ index ] . iconColor ,
icon: LandingPageData . getNotLoggedInServiceCardsList [ index ] . icon ,
textColor: LandingPageData . getLoggedInServiceCardsList [ index ] . textColor ,
title: LandingPageData . getNotLoggedInServiceCardsList [ index ] . title ,
backgroundColor: LandingPageData . getLoggedInServiceCardsList [ index ] . backgroundColor ,
subtitle: LandingPageData . getNotLoggedInServiceCardsList [ index ] . subtitle ,
isBold: LandingPageData . getLoggedInServiceCardsList [ index ] . isBold ,
iconColor: LandingPageData . getNotLoggedInServiceCardsList [ index ] . iconColor ,
serviceName: LandingPageData . getLoggedInServiceCardsList [ index ] . serviceName ,
textColor: LandingPageData . getNotLoggedInServiceCardsList [ index ] . textColor ,
) ,
backgroundColor: LandingPageData . getNotLoggedInServiceCardsList [ index ] . backgroundColor ,
) ,
isBold: LandingPageData . getNotLoggedInServiceCardsList [ index ] . isBold ,
) ,
) ,
) ;
) ,
} ,
separatorBuilder: ( BuildContext cxt , int index ) = > 10. width ,
) ,
) ,
) ;
) ,
} ,
] ,
separatorBuilder: ( BuildContext cxt , int index ) = > 0. width ,
) ,
) ,
) ,
) .paddingSymmetrical ( 24. h , 0. h ) ,
] ,
] ,
) ,
)
) . paddingSymmetrical ( 24. h , 0. h ) ,
: Container (
Row (
height: 127. h ,
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
decoration: RoundedRectangleBorder ( ) . toSmoothCornerDecoration ( color: AppColors . whiteColor , borderRadius: 24. r ) ,
children: [
child: Column (
" Services " . toText16 ( isBold: true ) ,
children: [
Row (
Expanded (
children: [
child: ListView . separated (
" View all services " . toText12 ( color: AppColors . primaryRedColor ) ,
scrollDirection: Axis . horizontal ,
SizedBox ( width: 2. h ) ,
itemCount: LandingPageData . getNotLoggedInServiceCardsList . length ,
Icon ( Icons . arrow_forward_ios , color: AppColors . primaryRedColor , size: 10. h ) ,
shrinkWrap: true ,
] ,
padding: EdgeInsets . only ( left: 16. h , right: 16. h ) ,
) ,
itemBuilder: ( context , index ) {
] ,
return AnimationConfiguration . staggeredList (
) . paddingSymmetrical ( 24. h , 0. h ) ,
position: index ,
SizedBox (
duration: const Duration ( milliseconds: 1000 ) ,
height: 325. h ,
child: SlideAnimation (
child: Column (
horizontalOffset: 100.0 ,
children: [
child: FadeInAnimation (
Expanded (
child: SmallServiceCard (
child: ListView . separated (
serviceName: LandingPageData . getNotLoggedInServiceCardsList [ index ] . serviceName ,
scrollDirection: Axis . horizontal ,
icon: LandingPageData . getNotLoggedInServiceCardsList [ index ] . icon ,
itemCount: LandingPageData . getServiceCardsList . length ,
title: LandingPageData . getNotLoggedInServiceCardsList [ index ] . title ,
shrinkWrap: true ,
subtitle: LandingPageData . getNotLoggedInServiceCardsList [ index ] . subtitle ,
padding: EdgeInsets . only ( left: 24. h , right: 24. h ) ,
iconColor: LandingPageData . getNotLoggedInServiceCardsList [ index ] . iconColor ,
itemBuilder: ( context , index ) {
textColor: LandingPageData . getNotLoggedInServiceCardsList [ index ] . textColor ,
return AnimationConfiguration . staggeredList (
backgroundColor: LandingPageData . getNotLoggedInServiceCardsList [ index ] . backgroundColor ,
position: index ,
isBold: LandingPageData . getNotLoggedInServiceCardsList [ index ] . isBold ,
duration: const Duration ( milliseconds: 1000 ) ,
) ,
child: SlideAnimation (
) ,
horizontalOffset: 100.0 ,
) ,
child: FadeInAnimation (
) ;
child: LargeServiceCard (
} ,
image: LandingPageData . getServiceCardsList [ index ] . icon ,
separatorBuilder: ( BuildContext cxt , int index ) = > 0. width ,
title: LandingPageData . getServiceCardsList [ index ] . title ,
subtitle: LandingPageData . getServiceCardsList [ index ] . subtitle ,
icon: LandingPageData . getServiceCardsList [ index ] . largeCardIcon ,
) ,
) ,
) ,
) ,
) ,
) ;
] ,
} ,
) ,
separatorBuilder: ( BuildContext cxt , int index ) = > 8. width ,
) . paddingSymmetrical ( 24. h , 0. h ) ,
) ,
Row (
mainAxisAlignment: MainAxisAlignment . spaceBetween ,
children: [
" Services " . toText16 ( isBold: true ) ,
Row (
children: [
" View all services " . toText12 ( color: AppColors . primaryRedColor ) ,
SizedBox ( width: 2. h ) ,
Icon ( Icons . arrow_forward_ios , color: AppColors . primaryRedColor , size: 10. h ) ,
] ,
) ,
) ,
] ,
] ,
) . paddingSymmetrical ( 24. h , 0. h ) ,
SizedBox (
height: 340. h ,
child: ListView . separated (
scrollDirection: Axis . horizontal ,
itemCount: LandingPageData . getServiceCardsList . length ,
shrinkWrap: true ,
padding: EdgeInsets . only ( left: 24. w , right: 24. w ) ,
itemBuilder: ( context , index ) {
return AnimationConfiguration . staggeredList (
position: index ,
duration: const Duration ( milliseconds: 1000 ) ,
child: SlideAnimation (
horizontalOffset: 100.0 ,
child: FadeInAnimation (
child: LargeServiceCard (
image: LandingPageData . getServiceCardsList [ index ] . icon ,
title: LandingPageData . getServiceCardsList [ index ] . title ,
subtitle: LandingPageData . getServiceCardsList [ index ] . subtitle ,
icon: LandingPageData . getServiceCardsList [ index ] . largeCardIcon ,
) ,
) ,
) ,
) ;
} ,
separatorBuilder: ( BuildContext cxt , int index ) = > SizedBox ( width: 8. w ) ,
) ,
) ,
) ,
) ,
appState . isAuthenticated ? HabibWalletCard ( ) : SizedBox ( ) ,
appState . isAuthenticated ? HabibWalletCard ( ) : SizedBox ( ) ,
] ,
] ,
) ,
) ,
) ,
) ,
) ,
) ;
) ;
@ -509,19 +499,21 @@ class _LandingPageState extends State<LandingPage> {
title: " " ,
title: " " ,
isCloseButtonVisible: false ,
isCloseButtonVisible: false ,
child: StatefulBuilder ( builder: ( context , setState ) {
child: StatefulBuilder (
return QuickLogin (
builder: ( context , setState ) {
isDone: isDone ,
return QuickLogin (
onPressed: ( ) {
isDone: isDone ,
/ / sharedPref . setBool ( HAS_ENABLED_QUICK_LOGIN , true ) ;
onPressed: ( ) {
authVM . loginWithFingerPrintFace ( ( ) {
/ / sharedPref . setBool ( HAS_ENABLED_QUICK_LOGIN , true ) ;
isDone = true ;
authVM . loginWithFingerPrintFace ( ( ) {
cacheService . saveBool ( key: CacheConst . quickLoginEnabled , value: true ) ;
isDone = true ;
setState ( ( ) { } ) ;
cacheService . saveBool ( key: CacheConst . quickLoginEnabled , value: true ) ;
} ) ;
setState ( ( ) { } ) ;
} ,
} ) ;
) ;
} ,
} ) ,
) ;
} ,
) ,
/ / height: isDone = = false ? ResponsiveExtension . screenHeight * 0.5 : ResponsiveExtension . screenHeight * 0.3 ,
/ / height: isDone = = false ? ResponsiveExtension . screenHeight * 0.5 : ResponsiveExtension . screenHeight * 0.3 ,
isFullScreen: false ,
isFullScreen: false ,
callBackFunc: ( ) {
callBackFunc: ( ) {