immediate livecare consultation implementation contd.
parent
093e645f60
commit
2f4d6f5553
@ -0,0 +1 @@
|
|||||||
|
{"nm":"Comp 1","ddd":0,"h":100,"w":100,"meta":{"g":"@lottiefiles/toolkit-js 0.33.2"},"layers":[{"ty":4,"nm":"Shape Layer 2","sr":1,"st":0,"op":300,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[5.277,-32.723,0],"ix":1},"s":{"a":0,"k":[4.91,4.91,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[50.2,50.18,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 2","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"s":{"a":0,"k":[102.555,102.555],"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.0941,0.7608,0.451],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[3.277,-34.527],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":2,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"s":{"a":0,"k":[102.555,102.555],"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0.0941,0.7608,0.451],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100,100],"t":0},{"s":[295,295],"t":60}],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[3.277,-34.527],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[100],"t":0},{"s":[0],"t":60}],"ix":7}}]}],"ind":1}],"v":"5.5.7","fr":60,"op":61,"ip":0,"assets":[]}
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
<svg width="19" height="19" viewBox="0 0 19 19" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<circle cx="9.5" cy="9.5" r="6.5" fill="#18C273"/>
|
||||||
|
<circle cx="9.5" cy="9.5" r="8" stroke="#18C273" stroke-opacity="0.31" stroke-width="3"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 252 B |
@ -0,0 +1,97 @@
|
|||||||
|
class GetLiveCareClinicListResponseModel {
|
||||||
|
int? iD;
|
||||||
|
int? serviceID;
|
||||||
|
String? serviceName;
|
||||||
|
String? serviceNameN;
|
||||||
|
int? clinicID;
|
||||||
|
int? age;
|
||||||
|
bool? isCheckAgeBelow;
|
||||||
|
int? gender;
|
||||||
|
bool? isActive;
|
||||||
|
String? createdOn;
|
||||||
|
String? createdBy;
|
||||||
|
int? isOnline;
|
||||||
|
bool? projectOutSA;
|
||||||
|
List<ShiftTimings>? shiftTimings;
|
||||||
|
|
||||||
|
GetLiveCareClinicListResponseModel(
|
||||||
|
{this.iD,
|
||||||
|
this.serviceID,
|
||||||
|
this.serviceName,
|
||||||
|
this.serviceNameN,
|
||||||
|
this.clinicID,
|
||||||
|
this.age,
|
||||||
|
this.isCheckAgeBelow,
|
||||||
|
this.gender,
|
||||||
|
this.isActive,
|
||||||
|
this.createdOn,
|
||||||
|
this.createdBy,
|
||||||
|
this.isOnline,
|
||||||
|
this.projectOutSA,
|
||||||
|
this.shiftTimings});
|
||||||
|
|
||||||
|
GetLiveCareClinicListResponseModel.fromJson(Map<String, dynamic> json) {
|
||||||
|
iD = json['ID'];
|
||||||
|
serviceID = json['ServiceID'];
|
||||||
|
serviceName = json['ServiceName'];
|
||||||
|
serviceNameN = json['ServiceNameN'];
|
||||||
|
clinicID = json['ClinicID'];
|
||||||
|
age = json['Age'];
|
||||||
|
isCheckAgeBelow = json['IsCheckAgeBelow'];
|
||||||
|
gender = json['Gender'];
|
||||||
|
isActive = json['IsActive'];
|
||||||
|
createdOn = json['CreatedOn'];
|
||||||
|
createdBy = json['CreatedBy'];
|
||||||
|
isOnline = json['IsOnline'];
|
||||||
|
projectOutSA = json['ProjectOutSA'];
|
||||||
|
if (json['ShiftTimings'] != null) {
|
||||||
|
shiftTimings = <ShiftTimings>[];
|
||||||
|
json['ShiftTimings'].forEach((v) {
|
||||||
|
shiftTimings!.add(new ShiftTimings.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = Map<String, dynamic>();
|
||||||
|
data['ID'] = this.iD;
|
||||||
|
data['ServiceID'] = this.serviceID;
|
||||||
|
data['ServiceName'] = this.serviceName;
|
||||||
|
data['ServiceNameN'] = this.serviceNameN;
|
||||||
|
data['ClinicID'] = this.clinicID;
|
||||||
|
data['Age'] = this.age;
|
||||||
|
data['IsCheckAgeBelow'] = this.isCheckAgeBelow;
|
||||||
|
data['Gender'] = this.gender;
|
||||||
|
data['IsActive'] = this.isActive;
|
||||||
|
data['CreatedOn'] = this.createdOn;
|
||||||
|
data['CreatedBy'] = this.createdBy;
|
||||||
|
data['IsOnline'] = this.isOnline;
|
||||||
|
data['ProjectOutSA'] = this.projectOutSA;
|
||||||
|
if (this.shiftTimings != null) {
|
||||||
|
data['ShiftTimings'] = this.shiftTimings!.map((v) => v.toJson()).toList();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ShiftTimings {
|
||||||
|
String? endTime;
|
||||||
|
int? shiftID;
|
||||||
|
String? startTime;
|
||||||
|
|
||||||
|
ShiftTimings({this.endTime, this.shiftID, this.startTime});
|
||||||
|
|
||||||
|
ShiftTimings.fromJson(Map<String, dynamic> json) {
|
||||||
|
endTime = json['EndTime'];
|
||||||
|
shiftID = json['ShiftID'];
|
||||||
|
startTime = json['StartTime'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = Map<String, dynamic>();
|
||||||
|
data['EndTime'] = this.endTime;
|
||||||
|
data['ShiftID'] = this.shiftID;
|
||||||
|
data['StartTime'] = this.startTime;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,158 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_staggered_animations/flutter_staggered_animations.dart';
|
||||||
|
import 'package:hmg_patient_app_new/core/app_state.dart';
|
||||||
|
import 'package:hmg_patient_app_new/core/dependencies.dart';
|
||||||
|
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
|
||||||
|
import 'package:hmg_patient_app_new/core/utils/utils.dart';
|
||||||
|
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
|
||||||
|
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
|
||||||
|
import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
|
||||||
|
import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_clinic_list_response_model.dart';
|
||||||
|
import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_livecare_clinics_response_model.dart';
|
||||||
|
import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_livecare_immediate_clinics_response_model.dart';
|
||||||
|
import 'package:hmg_patient_app_new/presentation/book_appointment/livecare/widgets/select_livecare_call_type.dart';
|
||||||
|
import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/clinic_card.dart';
|
||||||
|
import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/livecare_clinic_card.dart';
|
||||||
|
import 'package:hmg_patient_app_new/theme/colors.dart';
|
||||||
|
import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart';
|
||||||
|
import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
class SelectImmediateLiveCareClinicPage extends StatefulWidget {
|
||||||
|
const SelectImmediateLiveCareClinicPage({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<SelectImmediateLiveCareClinicPage> createState() => _SelectImmediateLiveCareClinicPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _SelectImmediateLiveCareClinicPageState extends State<SelectImmediateLiveCareClinicPage> {
|
||||||
|
TextEditingController searchEditingController = TextEditingController();
|
||||||
|
FocusNode textFocusNode = FocusNode();
|
||||||
|
late AppState appState;
|
||||||
|
late BookAppointmentsViewModel bookAppointmentsViewModel;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
scheduleMicrotask(() {
|
||||||
|
bookAppointmentsViewModel.getLiveCareImmediateClinicsList();
|
||||||
|
});
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
textFocusNode.dispose();
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
bookAppointmentsViewModel = Provider.of<BookAppointmentsViewModel>(context, listen: false);
|
||||||
|
appState = getIt.get<AppState>();
|
||||||
|
return Scaffold(
|
||||||
|
backgroundColor: AppColors.bgScaffoldColor,
|
||||||
|
body: CollapsingListView(
|
||||||
|
title: "Select LiveCare Clinic".needTranslation,
|
||||||
|
child: SingleChildScrollView(
|
||||||
|
child: Padding(
|
||||||
|
padding: EdgeInsets.all(24.h),
|
||||||
|
child: Consumer<BookAppointmentsViewModel>(builder: (context, bookAppointmentsVM, child) {
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
// SizedBox(height: 16.h),
|
||||||
|
// TextInputWidget(
|
||||||
|
// labelText: LocaleKeys.search.tr(context: context),
|
||||||
|
// hintText: LocaleKeys.clinicName.tr(context: context),
|
||||||
|
// controller: searchEditingController,
|
||||||
|
// isEnable: true,
|
||||||
|
// prefix: null,
|
||||||
|
// autoFocus: false,
|
||||||
|
// isBorderAllowed: false,
|
||||||
|
// keyboardType: TextInputType.text,
|
||||||
|
// focusNode: textFocusNode,
|
||||||
|
// suffix: searchEditingController.text.isNotEmpty
|
||||||
|
// ? GestureDetector(
|
||||||
|
// onTap: () {
|
||||||
|
// searchEditingController.clear();
|
||||||
|
// bookAppointmentsViewModel.filterClinics("");
|
||||||
|
// textFocusNode.unfocus();
|
||||||
|
// },
|
||||||
|
// child: Utils.buildSvgWithAssets(icon: AppAssets.close_bottom_sheet_icon, width: 20.h, height: 20.h, fit: BoxFit.scaleDown),
|
||||||
|
// )
|
||||||
|
// : null,
|
||||||
|
// onChange: (value) {
|
||||||
|
// bookAppointmentsViewModel.filterClinics(value!);
|
||||||
|
// },
|
||||||
|
// padding: EdgeInsets.symmetric(
|
||||||
|
// vertical: ResponsiveExtension(10).h,
|
||||||
|
// horizontal: ResponsiveExtension(15).h,
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
ListView.separated(
|
||||||
|
padding: EdgeInsets.only(top: 16.h),
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: NeverScrollableScrollPhysics(),
|
||||||
|
itemCount: bookAppointmentsVM.isImmediateLiveCareClinicsLoading ? 5 : bookAppointmentsVM.immediateLiveCareClinicsList.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
return bookAppointmentsVM.isImmediateLiveCareClinicsLoading
|
||||||
|
? ClinicCard(
|
||||||
|
bookAppointmentsVM: bookAppointmentsVM,
|
||||||
|
liveCareClinicsResponseModel: GetLiveCareClinicsResponseModel(),
|
||||||
|
clinicsListResponseModel: GetClinicsListResponseModel(),
|
||||||
|
isLoading: bookAppointmentsVM.isImmediateLiveCareClinicsLoading,
|
||||||
|
)
|
||||||
|
: AnimationConfiguration.staggeredList(
|
||||||
|
position: index,
|
||||||
|
duration: const Duration(milliseconds: 500),
|
||||||
|
child: SlideAnimation(
|
||||||
|
verticalOffset: 100.0,
|
||||||
|
child: FadeInAnimation(
|
||||||
|
child: AnimatedContainer(
|
||||||
|
duration: Duration(milliseconds: 300),
|
||||||
|
curve: Curves.easeInOut,
|
||||||
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true),
|
||||||
|
child: LiveCareClinicCard(
|
||||||
|
bookAppointmentsVM: bookAppointmentsVM,
|
||||||
|
liveCareClinicListResponseModel: bookAppointmentsVM.immediateLiveCareClinicsList[index],
|
||||||
|
isLoading: bookAppointmentsVM.isImmediateLiveCareClinicsLoading,
|
||||||
|
).onPress(() {
|
||||||
|
onImmediateLiveCareClinicSelected(bookAppointmentsVM.immediateLiveCareClinicsList[index]);
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 16.h),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
onImmediateLiveCareClinicSelected(GetLiveCareClinicListResponseModel liveCareClinic) {
|
||||||
|
//TODO: add implementation to show clinic schedule
|
||||||
|
if (liveCareClinic.isOnline == 1) {
|
||||||
|
showCommonBottomSheetWithoutHeight(context,
|
||||||
|
child: SelectLiveCareCallType(bookAppointmentsViewModel: bookAppointmentsViewModel),
|
||||||
|
callBackFunc: () {},
|
||||||
|
title: "Select LiveCare call type".needTranslation,
|
||||||
|
isCloseButtonVisible: true,
|
||||||
|
isFullScreen: false);
|
||||||
|
} else {
|
||||||
|
showCommonBottomSheetWithoutHeight(context,
|
||||||
|
child: Utils.getErrorWidget(
|
||||||
|
loadingText: "The selected clinic is only available between ${liveCareClinic.shiftTimings!.first.startTime} & ${liveCareClinic.shiftTimings!.first.endTime} hours.".needTranslation),
|
||||||
|
callBackFunc: () {},
|
||||||
|
title: "",
|
||||||
|
isCloseButtonVisible: true,
|
||||||
|
isFullScreen: false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,65 @@
|
|||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:hmg_patient_app_new/core/app_assets.dart';
|
||||||
|
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
|
||||||
|
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
|
||||||
|
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
|
||||||
|
import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
|
||||||
|
import 'package:hmg_patient_app_new/presentation/medical_file/widgets/medical_file_card.dart';
|
||||||
|
import 'package:hmg_patient_app_new/theme/colors.dart';
|
||||||
|
|
||||||
|
class SelectLiveCareCallType extends StatelessWidget {
|
||||||
|
SelectLiveCareCallType({super.key, required this.bookAppointmentsViewModel});
|
||||||
|
|
||||||
|
BookAppointmentsViewModel bookAppointmentsViewModel;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
//TODO: Replace with actual icons
|
||||||
|
return GridView(
|
||||||
|
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
|
||||||
|
crossAxisCount: 3,
|
||||||
|
crossAxisSpacing: 16,
|
||||||
|
mainAxisSpacing: 16,
|
||||||
|
mainAxisExtent: 130,
|
||||||
|
),
|
||||||
|
physics: NeverScrollableScrollPhysics(),
|
||||||
|
padding: EdgeInsets.zero,
|
||||||
|
shrinkWrap: true,
|
||||||
|
children: [
|
||||||
|
MedicalFileCard(
|
||||||
|
label: "Video Call".needTranslation,
|
||||||
|
textColor: AppColors.blackColor,
|
||||||
|
backgroundColor: AppColors.whiteColor,
|
||||||
|
svgIcon: AppAssets.eye_result_icon,
|
||||||
|
isLargeText: true,
|
||||||
|
iconSize: 36.h,
|
||||||
|
).onPress(() {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
bookAppointmentsViewModel.setLiveCareSelectedCallType(1);
|
||||||
|
}),
|
||||||
|
MedicalFileCard(
|
||||||
|
label: "Audio Call".needTranslation,
|
||||||
|
textColor: AppColors.blackColor,
|
||||||
|
backgroundColor: AppColors.whiteColor,
|
||||||
|
svgIcon: AppAssets.allergy_info_icon,
|
||||||
|
isLargeText: true,
|
||||||
|
iconSize: 36.h,
|
||||||
|
).onPress(() {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
bookAppointmentsViewModel.setLiveCareSelectedCallType(2);
|
||||||
|
}),
|
||||||
|
MedicalFileCard(
|
||||||
|
label: "Phone Call".needTranslation,
|
||||||
|
textColor: AppColors.blackColor,
|
||||||
|
backgroundColor: AppColors.whiteColor,
|
||||||
|
svgIcon: AppAssets.vaccine_info_icon,
|
||||||
|
isLargeText: true,
|
||||||
|
iconSize: 36.h,
|
||||||
|
).onPress(() {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
bookAppointmentsViewModel.setLiveCareSelectedCallType(3);
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,66 @@
|
|||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:hmg_patient_app_new/core/app_assets.dart';
|
||||||
|
import 'package:hmg_patient_app_new/core/app_state.dart';
|
||||||
|
import 'package:hmg_patient_app_new/core/dependencies.dart';
|
||||||
|
import 'package:hmg_patient_app_new/core/utils/size_utils.dart';
|
||||||
|
import 'package:hmg_patient_app_new/core/utils/utils.dart';
|
||||||
|
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
|
||||||
|
import 'package:hmg_patient_app_new/extensions/widget_extensions.dart';
|
||||||
|
import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart';
|
||||||
|
import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_livecare_immediate_clinics_response_model.dart';
|
||||||
|
import 'package:hmg_patient_app_new/generated/locale_keys.g.dart';
|
||||||
|
import 'package:hmg_patient_app_new/theme/colors.dart';
|
||||||
|
|
||||||
|
class LiveCareClinicCard extends StatelessWidget {
|
||||||
|
LiveCareClinicCard({super.key, required this.liveCareClinicListResponseModel, required this.isLoading, required this.bookAppointmentsVM});
|
||||||
|
|
||||||
|
GetLiveCareClinicListResponseModel liveCareClinicListResponseModel;
|
||||||
|
bool isLoading;
|
||||||
|
BookAppointmentsViewModel bookAppointmentsVM;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
AppState appState = getIt.get<AppState>();
|
||||||
|
return Container(
|
||||||
|
padding: EdgeInsets.all(16.h),
|
||||||
|
decoration: RoundedRectangleBorder().toSmoothCornerDecoration(
|
||||||
|
color: AppColors.whiteColor,
|
||||||
|
borderRadius: 24.h,
|
||||||
|
hasShadow: false,
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||||
|
Utils.buildSvgWithAssets(icon: AppAssets.generic_clinic_icon, width: 24.h, height: 24.h, fit: BoxFit.contain).toShimmer2(isShow: isLoading),
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
Utils.buildSvgWithAssets(
|
||||||
|
icon: AppAssets.livecare_online_icon,
|
||||||
|
width: 16.h,
|
||||||
|
height: 16.h,
|
||||||
|
fit: BoxFit.contain,
|
||||||
|
iconColor: liveCareClinicListResponseModel.isOnline == 1 ? AppColors.successColor : AppColors.primaryRedColor)
|
||||||
|
.toShimmer2(isShow: isLoading),
|
||||||
|
SizedBox(height: 4.h),
|
||||||
|
liveCareClinicListResponseModel.isOnline == 1
|
||||||
|
? LocaleKeys.online.tr(context: context).toText10(isBold: true, color: AppColors.successColor).toShimmer2(isShow: isLoading)
|
||||||
|
: "Offline".toText10(isBold: true, color: AppColors.primaryRedColor).toShimmer2(isShow: isLoading),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
SizedBox(height: 8.h),
|
||||||
|
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [
|
||||||
|
Expanded(
|
||||||
|
child: (isLoading ? "Cardiology" : (appState.isArabic() ? liveCareClinicListResponseModel.serviceNameN : liveCareClinicListResponseModel.serviceName))!
|
||||||
|
.toText16(isBold: true)
|
||||||
|
.toShimmer2(isShow: isLoading)),
|
||||||
|
Transform.flip(
|
||||||
|
flipX: appState.isArabic() ? true : false,
|
||||||
|
child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, width: 15.h, height: 15.h, fit: BoxFit.contain, iconColor: AppColors.textColor).toShimmer2(isShow: isLoading)),
|
||||||
|
]),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue