Added Damage Pictures in ad_detail_view and extend edit ad
parent
424942bf58
commit
dfa57dbe55
@ -0,0 +1,36 @@
|
||||
class BranchRatingModel {
|
||||
int? id;
|
||||
String? title;
|
||||
String? review;
|
||||
int? ratNo;
|
||||
int? serviceProviderBranchID;
|
||||
String? serviceProviderBranchName;
|
||||
int? customerID;
|
||||
String? customerName;
|
||||
|
||||
BranchRatingModel({this.id, this.title, this.review, this.ratNo, this.serviceProviderBranchID, this.serviceProviderBranchName, this.customerID, this.customerName});
|
||||
|
||||
BranchRatingModel.fromJson(Map<String, dynamic> json) {
|
||||
id = json['id'];
|
||||
title = json['title'];
|
||||
review = json['review'];
|
||||
ratNo = json['ratNo'];
|
||||
serviceProviderBranchID = json['serviceProviderBranchID'];
|
||||
serviceProviderBranchName = json['serviceProviderBranchName'];
|
||||
customerID = json['customerID'];
|
||||
customerName = json['customerName'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
data['title'] = title;
|
||||
data['review'] = review;
|
||||
data['ratNo'] = ratNo;
|
||||
data['serviceProviderBranchID'] = serviceProviderBranchID;
|
||||
data['serviceProviderBranchName'] = serviceProviderBranchName;
|
||||
data['customerID'] = customerID;
|
||||
data['customerName'] = customerName;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
@ -1,95 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mc_common_app/config/routes.dart';
|
||||
import 'package:mc_common_app/extensions/int_extensions.dart';
|
||||
import 'package:mc_common_app/extensions/string_extensions.dart';
|
||||
import 'package:mc_common_app/generated/locale_keys.g.dart';
|
||||
import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart';
|
||||
import 'package:mc_common_app/models/chat_models/buyers_chat_for_ads_model.dart';
|
||||
import 'package:mc_common_app/theme/colors.dart';
|
||||
import 'package:mc_common_app/utils/enums.dart';
|
||||
import 'package:mc_common_app/utils/navigator.dart';
|
||||
import 'package:mc_common_app/view_models/ad_view_model.dart';
|
||||
import 'package:mc_common_app/view_models/chat_view_model.dart';
|
||||
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
|
||||
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class AdsBuyerChatsListView extends StatelessWidget {
|
||||
final List<BuyersChatForAdsModel> buyersListViewArguments;
|
||||
|
||||
const AdsBuyerChatsListView({super.key, required this.buyersListViewArguments});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: CustomAppBar(title: LocaleKeys.chat.tr()),
|
||||
body: buyersListViewArguments.isEmpty
|
||||
? Center(child: LocaleKeys.noOffersShow.tr().toText(fontSize: 16, color: MyColors.lightTextColor))
|
||||
: ListView.separated(
|
||||
itemCount: buyersListViewArguments.length,
|
||||
padding: const EdgeInsets.all(16),
|
||||
itemBuilder: (context, index) {
|
||||
BuyersChatForAdsModel chatForAdsModel = buyersListViewArguments[index];
|
||||
return Column(
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
(chatForAdsModel.buyerName ?? "").toText(fontSize: 16, isBold: true),
|
||||
if (chatForAdsModel.unReadMessagesCount != null && chatForAdsModel.unReadMessagesCount! > 0) ...[
|
||||
Center(
|
||||
child: "${chatForAdsModel.unReadMessagesCount ?? "1"}".toText(
|
||||
color: Colors.white,
|
||||
isBold: true,
|
||||
fontSize: 10,
|
||||
),
|
||||
).toContainer(
|
||||
backgroundColor: MyColors.redColor,
|
||||
borderRadius: 100,
|
||||
paddingAll: 1,
|
||||
width: 22,
|
||||
height: 22,
|
||||
),
|
||||
]
|
||||
],
|
||||
),
|
||||
8.height,
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
(chatForAdsModel.lastMessage ?? "").toText(color: MyColors.lightTextColor, fontSize: 12),
|
||||
],
|
||||
),
|
||||
|
||||
if (chatForAdsModel.lastMessageDateTime != null) ...[
|
||||
DateTime.parse(chatForAdsModel.lastMessageDateTime!).getTimeAgo().toText(color: MyColors.lightTextColor),
|
||||
],
|
||||
// const Icon(
|
||||
// Icons.arrow_forward,
|
||||
// color: MyColors.darkIconColor,
|
||||
// size: 18,
|
||||
// ),
|
||||
],
|
||||
),
|
||||
],
|
||||
).onPress(() async {
|
||||
ChatViewArgumentsForAd chatViewArgumentsForAd = ChatViewArgumentsForAd(receiverUserID: chatForAdsModel.buyerUserID, adsID: chatForAdsModel.adsID);
|
||||
|
||||
ChatViewArguments chatViewArguments = ChatViewArguments(chatTypeEnum: ChatTypeEnum.ads, chatViewArgumentsForAd: chatViewArgumentsForAd);
|
||||
|
||||
final chatVM = context.read<ChatVM>();
|
||||
await chatVM.getUsersChatMessagesForAd(context: context, isForBuyer: false, adsChatBuyerId: chatForAdsModel.id).whenComplete(
|
||||
() => navigateWithName(context, AppRoutes.chatView, arguments: chatViewArguments),
|
||||
);
|
||||
}).toContainer(isShadowEnabled: true);
|
||||
},
|
||||
separatorBuilder: (context, index) => 16.height,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,118 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:mc_common_app/classes/consts.dart';
|
||||
import 'package:mc_common_app/config/routes.dart';
|
||||
import 'package:mc_common_app/extensions/int_extensions.dart';
|
||||
import 'package:mc_common_app/extensions/string_extensions.dart';
|
||||
import 'package:mc_common_app/generated/locale_keys.g.dart';
|
||||
import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart';
|
||||
import 'package:mc_common_app/models/chat_models/buyers_chat_for_ads_model.dart';
|
||||
import 'package:mc_common_app/theme/colors.dart';
|
||||
import 'package:mc_common_app/utils/enums.dart';
|
||||
import 'package:mc_common_app/utils/navigator.dart';
|
||||
import 'package:mc_common_app/view_models/ad_view_model.dart';
|
||||
import 'package:mc_common_app/view_models/chat_view_model.dart';
|
||||
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
|
||||
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:sizer/sizer.dart';
|
||||
|
||||
class AdsBuyerChatsView extends StatelessWidget {
|
||||
final List<BuyersChatForAdsModel> buyersListViewArguments;
|
||||
|
||||
const AdsBuyerChatsView({super.key, required this.buyersListViewArguments});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: CustomAppBar(title: LocaleKeys.chat.tr()),
|
||||
body: buyersListViewArguments.isEmpty
|
||||
? Center(child: LocaleKeys.noOffersShow.tr().toText(fontSize: 16, color: MyColors.lightTextColor))
|
||||
: ListView.separated(
|
||||
itemCount: buyersListViewArguments.length,
|
||||
padding: const EdgeInsets.all(16),
|
||||
itemBuilder: (context, index) {
|
||||
BuyersChatForAdsModel chatForAdsModel = buyersListViewArguments[index];
|
||||
return Column(
|
||||
children: [
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Image.asset(
|
||||
MyAssets.bnCar,
|
||||
width: 34,
|
||||
height: 34,
|
||||
fit: BoxFit.fill,
|
||||
).toCircle(borderRadius: 100),
|
||||
SizedBox(width: 2.w),
|
||||
Expanded(
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
(chatForAdsModel.buyerName ?? "").toText(fontSize: 16, isBold: true),
|
||||
if (chatForAdsModel.unReadMessagesCount != null && chatForAdsModel.unReadMessagesCount! > 0) ...[
|
||||
Center(
|
||||
child: "${chatForAdsModel.unReadMessagesCount ?? "1"}".toText(
|
||||
color: Colors.white,
|
||||
isBold: true,
|
||||
fontSize: 10,
|
||||
),
|
||||
).toContainer(
|
||||
backgroundColor: MyColors.redColor,
|
||||
borderRadius: 100,
|
||||
paddingAll: 1,
|
||||
width: 22,
|
||||
height: 22,
|
||||
),
|
||||
]
|
||||
],
|
||||
),
|
||||
8.height,
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Flexible(child: ("${chatForAdsModel.lastMessage}").toText(color: MyColors.lightTextColor, fontSize: 12)),
|
||||
SizedBox(width: 5.w),
|
||||
if (chatForAdsModel.lastMessageDateTime != null) ...[
|
||||
DateTime.parse(chatForAdsModel.lastMessageDateTime!).getTimeAgo().toText(color: MyColors.lightTextColor),
|
||||
],
|
||||
],
|
||||
),
|
||||
2.height,
|
||||
const Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Icon(
|
||||
Icons.arrow_forward,
|
||||
color: MyColors.darkIconColor,
|
||||
size: 18,
|
||||
),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
).onPress(() async {
|
||||
ChatViewArgumentsForAd chatViewArgumentsForAd = ChatViewArgumentsForAd(receiverUserID: chatForAdsModel.buyerUserID, adsID: chatForAdsModel.adsID);
|
||||
|
||||
ChatViewArguments chatViewArguments = ChatViewArguments(chatTypeEnum: ChatTypeEnum.ads, chatViewArgumentsForAd: chatViewArgumentsForAd);
|
||||
|
||||
final chatVM = context.read<ChatVM>();
|
||||
await chatVM
|
||||
.getUsersChatMessagesForAd(context: context, isForBuyer: false, adsChatBuyerId: chatForAdsModel.id, senderName: chatForAdsModel.buyerName)
|
||||
.whenComplete(() => navigateWithName(context, AppRoutes.chatView, arguments: chatViewArguments));
|
||||
}).toContainer(isShadowEnabled: true);
|
||||
},
|
||||
separatorBuilder: (context, index) => 16.height,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,143 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mc_common_app/extensions/int_extensions.dart';
|
||||
import 'package:mc_common_app/extensions/string_extensions.dart';
|
||||
import 'package:mc_common_app/generated/locale_keys.g.dart';
|
||||
import 'package:mc_common_app/models/advertisment_models/vehicle_details_models.dart';
|
||||
import 'package:mc_common_app/models/general_models/widgets_models.dart';
|
||||
import 'package:mc_common_app/theme/colors.dart';
|
||||
import 'package:mc_common_app/view_models/ad_view_model.dart';
|
||||
import 'package:mc_common_app/widgets/button/show_fill_button.dart';
|
||||
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
|
||||
import 'package:mc_common_app/widgets/txt_field.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
|
||||
class AdDamagePartsSelectionSheet extends StatefulWidget {
|
||||
const AdDamagePartsSelectionSheet({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<AdDamagePartsSelectionSheet> createState() => _AdDamagePartsSelectionSheetState();
|
||||
}
|
||||
|
||||
class _AdDamagePartsSelectionSheetState extends State<AdDamagePartsSelectionSheet> {
|
||||
bool checkBoxValue = false;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
AdVM adVM = context.watch<AdVM>();
|
||||
return SizedBox(
|
||||
height: MediaQuery.of(context).size.height * 0.85,
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
margin: const EdgeInsets.all(8),
|
||||
height: 8,
|
||||
width: 60,
|
||||
decoration: const BoxDecoration(color: MyColors.lightTextColor, borderRadius: BorderRadius.all(Radius.circular(20))),
|
||||
),
|
||||
12.height,
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
LocaleKeys.damagePartList.tr().toText(fontSize: 24, isBold: true),
|
||||
],
|
||||
),
|
||||
8.height,
|
||||
TxtField(
|
||||
value: adVM.damagePartSearchValue,
|
||||
errorValue: "",
|
||||
hint: LocaleKeys.searchPart.tr(),
|
||||
onChanged: (value) {
|
||||
adVM.onSearchChangedForDamagePart(value);
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
Expanded(
|
||||
child: ListView.builder(
|
||||
shrinkWrap: true,
|
||||
itemCount: adVM.vehiclePartsSearchResults.isEmpty ? adVM.vehicleDamageParts.length : adVM.vehiclePartsSearchResults.length,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
VehiclePartModel vehiclePart = adVM.vehiclePartsSearchResults.isEmpty ? adVM.vehicleDamageParts[index] : adVM.vehiclePartsSearchResults[index];
|
||||
|
||||
return Column(
|
||||
children: [
|
||||
// CheckboxListTile(
|
||||
// value: false,
|
||||
// visualDensity: VisualDensity.compact,
|
||||
// contentPadding: EdgeInsets.zero,
|
||||
// controlAffinity: ListTileControlAffinity.leading,
|
||||
// title: "Rear Break Light".toText(
|
||||
// fontSize: 16,
|
||||
// isBold: true,
|
||||
// ),
|
||||
// onChanged: (value) {},
|
||||
// ),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
if (vehiclePart.isSelected!) {
|
||||
return;
|
||||
}
|
||||
adVM.vehicleDamageParts[index].isChecked = !(adVM.vehicleDamageParts[index].isChecked!);
|
||||
setState(() {});
|
||||
},
|
||||
child: Row(
|
||||
children: [
|
||||
SizedBox(
|
||||
height: 40.0,
|
||||
width: 30.0,
|
||||
child: Transform.scale(
|
||||
scale: 1.3,
|
||||
child: Checkbox(
|
||||
value: vehiclePart.isSelected! ? true : vehiclePart.isChecked,
|
||||
activeColor: vehiclePart.isSelected! ? MyColors.lightTextColor : MyColors.primaryColor,
|
||||
onChanged: (value) {
|
||||
if (vehiclePart.isSelected!) {
|
||||
return;
|
||||
}
|
||||
adVM.vehicleDamageParts[index].isChecked = !(adVM.vehicleDamageParts[index].isChecked!);
|
||||
setState(() {});
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 20),
|
||||
vehiclePart.partName.toString().toText(
|
||||
fontSize: 16,
|
||||
color: vehiclePart.isSelected! ? MyColors.lightTextColor : MyColors.black,
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
const Divider(thickness: 1),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
child: ShowFillButton(
|
||||
title: LocaleKeys.addDamagePart.tr(),
|
||||
onPressed: () {
|
||||
for (var value in adVM.vehicleDamageParts) {
|
||||
if (value.isChecked! && !value.isSelected!) {
|
||||
adVM.addNewDamagePartCard(
|
||||
damageCard: VehicleDamageCard(
|
||||
partImageErrorValue: "",
|
||||
partImages: null,
|
||||
partSelectedId: SelectionModel(selectedOption: value.partName!, selectedId: value.id!, errorValue: ""),
|
||||
),
|
||||
);
|
||||
value.isChecked = false;
|
||||
value.isSelected = true;
|
||||
}
|
||||
}
|
||||
Navigator.pop(context);
|
||||
},
|
||||
).paddingOnly(bottom: 10),
|
||||
),
|
||||
],
|
||||
),
|
||||
).horPaddingMain();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,91 @@
|
||||
import 'dart:async';
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart';
|
||||
import 'package:mc_common_app/models/general_models/widgets_models.dart';
|
||||
import 'package:mc_common_app/view_models/ad_view_model.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mc_common_app/extensions/int_extensions.dart';
|
||||
import 'package:mc_common_app/extensions/string_extensions.dart';
|
||||
import 'package:mc_common_app/theme/colors.dart';
|
||||
import 'package:mc_common_app/views/advertisement/components/picked_images_container_widget.dart';
|
||||
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
|
||||
|
||||
class AdDamagePartPicturesSheet extends StatefulWidget {
|
||||
final List<DamageReport> adDamageReportList;
|
||||
|
||||
const AdDamagePartPicturesSheet({super.key, required this.adDamageReportList});
|
||||
|
||||
@override
|
||||
State<AdDamagePartPicturesSheet> createState() => _AdDamagePartPicturesSheetState();
|
||||
}
|
||||
|
||||
class _AdDamagePartPicturesSheetState extends State<AdDamagePartPicturesSheet> {
|
||||
List<VehicleDamageCard> vehicleDamageCards = [];
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
scheduleMicrotask(() => populateDamagePartPictures());
|
||||
super.initState();
|
||||
}
|
||||
|
||||
void populateDamagePartPictures() {
|
||||
for (var element in widget.adDamageReportList) {
|
||||
ImageModel imageModel = ImageModel(id: element.id!, filePath: element.imageUrl!, isFromNetwork: true);
|
||||
|
||||
VehicleDamageCard vehicleDamageCard = VehicleDamageCard(
|
||||
partSelectedId: SelectionModel(
|
||||
selectedId: element.vehicleDamagePartID!,
|
||||
selectedOption: element.partName ?? "",
|
||||
),
|
||||
partImages: [imageModel],
|
||||
);
|
||||
vehicleDamageCards.add(vehicleDamageCard);
|
||||
}
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SizedBox(
|
||||
height: MediaQuery.of(context).size.height / 1.2,
|
||||
child: ListView.builder(
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
shrinkWrap: true,
|
||||
itemCount: vehicleDamageCards.length,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
VehicleDamageCard vehicleDamageCard = vehicleDamageCards[index];
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
vehicleDamageCard.partSelectedId!.selectedOption.toText(fontSize: 18, color: MyColors.darkTextColor),
|
||||
PickedFilesContainer(
|
||||
pickedFiles: vehicleDamageCard.partImages ?? [],
|
||||
isReview: true,
|
||||
onCrossPressedSecondary: (imageIndex, filePath) {},
|
||||
index: index,
|
||||
onAddFilePressed: () {},
|
||||
),
|
||||
],
|
||||
).toWhiteContainer(
|
||||
width: double.infinity,
|
||||
allPading: 12,
|
||||
margin: const EdgeInsets.symmetric(horizontal: 21, vertical: 4),
|
||||
);
|
||||
},
|
||||
).paddingOnly(top: 10),
|
||||
);
|
||||
}
|
||||
|
||||
Widget showItem(String item, String value, {Color valueColor = Colors.black}) {
|
||||
return Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
item.toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
|
||||
4.width,
|
||||
value.toText(fontSize: 12, color: valueColor, isBold: true),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,110 @@
|
||||
import 'package:mc_common_app/generated/locale_keys.g.dart';
|
||||
import 'package:mc_common_app/models/services_models/item_model.dart';
|
||||
import 'package:mc_common_app/utils/enums.dart';
|
||||
import 'package:mc_common_app/view_models/appointments_view_model.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mc_common_app/extensions/int_extensions.dart';
|
||||
import 'package:mc_common_app/extensions/string_extensions.dart';
|
||||
import 'package:mc_common_app/theme/colors.dart';
|
||||
import 'package:mc_common_app/widgets/empty_widget.dart';
|
||||
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
|
||||
class DamagePicturesList extends StatefulWidget {
|
||||
final int serviceId;
|
||||
|
||||
const DamagePicturesList(this.serviceId, {super.key});
|
||||
|
||||
@override
|
||||
State<DamagePicturesList> createState() => _DamagePicturesListState();
|
||||
}
|
||||
|
||||
class _DamagePicturesListState extends State<DamagePicturesList> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
context.read<AppointmentsVM>().getServiceItems(widget.serviceId);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return SizedBox(
|
||||
height: MediaQuery.of(context).size.height / 1.2,
|
||||
child: Consumer<AppointmentsVM>(
|
||||
builder: (context, appointmentsVM, _) {
|
||||
if (appointmentsVM.state == ViewState.busy) {
|
||||
return Center(child: CircularProgressIndicator());
|
||||
}
|
||||
return appointmentsVM.serviceItemsFromApi.isEmpty
|
||||
? const EmptyWidget()
|
||||
: ListView.separated(
|
||||
itemCount: appointmentsVM.serviceItemsFromApi.length,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
ItemData serviceItemModel = appointmentsVM.serviceItemsFromApi[index];
|
||||
return SizedBox(
|
||||
width: double.infinity,
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
serviceItemModel.name.toString().toText(fontSize: 16, isBold: true),
|
||||
4.height,
|
||||
showItem(LocaleKeys.availableforAppointment.tr() + ":", (serviceItemModel.isAllowAppointment ?? false) ? "Yes" : "No", valueColor: Colors.green),
|
||||
showItem(LocaleKeys.allowingWorkshopService.tr() + ":", (serviceItemModel.isAppointmentCompanyLoc ?? false) ? "Yes" : "No", valueColor: Colors.green),
|
||||
showItem(LocaleKeys.allowingHomeService.tr() + ":", (serviceItemModel.isAppointmentCustomerLoc ?? false) ? "Yes" : "No", valueColor: Colors.green),
|
||||
12.height,
|
||||
LocaleKeys.serviceAmount.tr().toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
serviceItemModel.price!.toText(fontSize: 22, isBold: true),
|
||||
2.width,
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(bottom: 4),
|
||||
child: LocaleKeys.sar.tr().toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
// Padding(
|
||||
// padding: const EdgeInsets.all(4.0),
|
||||
// child: SvgPicture.asset(
|
||||
// MyAssets.icEdit,
|
||||
// width: 16,
|
||||
// height: 16,
|
||||
// ),
|
||||
// )
|
||||
],
|
||||
),
|
||||
).toWhiteContainer(width: double.infinity, allPading: 12);
|
||||
},
|
||||
separatorBuilder: (BuildContext context, int index) {
|
||||
return 12.height;
|
||||
},
|
||||
padding: const EdgeInsets.all(20),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget showItem(String item, String value, {Color valueColor = Colors.black}) {
|
||||
return Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
item.toText(fontSize: 12, color: MyColors.lightTextColor, isBold: true),
|
||||
4.width,
|
||||
value.toText(fontSize: 12, color: valueColor, isBold: true),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue