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