|
|
|
|
@ -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: () {
|
|
|
|
|
|