You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
5.0 KiB
Dart
125 lines
5.0 KiB
Dart
// ignore_for_file: use_build_context_synchronously
|
|
|
|
import 'package:easy_localization/easy_localization.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:mc_common_app/classes/app_state.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/requests_models/request_model.dart';
|
|
import 'package:mc_common_app/theme/colors.dart';
|
|
import 'package:mc_common_app/utils/enums.dart';
|
|
import 'package:mc_common_app/utils/utils.dart';
|
|
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
|
|
|
|
class RequestItem extends StatelessWidget {
|
|
final RequestModel request;
|
|
final bool shouldShowStatuses;
|
|
final Function() onTap;
|
|
|
|
const RequestItem({super.key, required this.request, this.shouldShowStatuses = true, required this.onTap});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
String imageUrl = "";
|
|
if (request.requestImages != null && request.requestImages!.isNotEmpty) {
|
|
imageUrl = request.requestImages!.first.imageUrl ?? "";
|
|
}
|
|
return Column(
|
|
children: [
|
|
Row(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
|
children: [
|
|
imageUrl.buildNetworkImage(
|
|
width: 80,
|
|
height: 80,
|
|
fit: BoxFit.cover,
|
|
),
|
|
12.width,
|
|
Expanded(
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
if (shouldShowStatuses) ...[
|
|
Utils.statusContainerChip(
|
|
text: request.requestStatusName.toLowerCase() == "InProgress".toLowerCase() ? "In Progress" : request.requestStatusName,
|
|
chipColor: Utils.getChipColorByRequestStatus(request.requestStatus)),
|
|
],
|
|
6.height,
|
|
"${request.brand} ${request.model} | ${request.id}".toText(fontSize: 16, letterSpacing: -0.64),
|
|
showItem("${LocaleKeys.year.tr()}:", "${request.year}"),
|
|
if (request.customerName.isNotEmpty) ...[
|
|
showItem("${LocaleKeys.customerName.tr()}:", request.customerName),
|
|
],
|
|
showItem("${LocaleKeys.description.tr()}:", request.description),
|
|
],
|
|
),
|
|
),
|
|
Column(
|
|
mainAxisAlignment: MainAxisAlignment.start,
|
|
crossAxisAlignment: CrossAxisAlignment.end,
|
|
children: [
|
|
if (request.offerCount > 0 && AppState().currentAppType == AppType.customer && request.requestStatus == RequestStatusEnum.submitted) ...[
|
|
Center(
|
|
child: "${request.offerCount}".toText(
|
|
color: Colors.white,
|
|
fontSize: 10,
|
|
),
|
|
).toContainer(
|
|
backgroundColor: MyColors.redColor,
|
|
borderRadius: 100,
|
|
paddingAll: 1,
|
|
width: 20,
|
|
height: 20,
|
|
),
|
|
],
|
|
2.height,
|
|
request.cityName.toText(color: MyColors.lightTextColor, letterSpacing: -0.4, fontSize: 10),
|
|
if (request.createdOn != null) ...[
|
|
DateTime.parse(request.createdOn!).getTimeAgo().toText(color: MyColors.lightTextColor, letterSpacing: -0.4, fontSize: 10),
|
|
],
|
|
],
|
|
)
|
|
],
|
|
),
|
|
// showItem("${LocaleKeys.priceRange.tr()}: ", ""),
|
|
// Row(
|
|
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
// crossAxisAlignment: CrossAxisAlignment.end,
|
|
// children: [
|
|
// Row(
|
|
// crossAxisAlignment: CrossAxisAlignment.end,
|
|
// children: [
|
|
// request.price.toInt().toString().toText(fontSize: 19, color: MyColors.darkTextColor, isBold: true, letterSpacing: -1.16),
|
|
// 2.width,
|
|
// LocaleKeys.sar.tr().toText(color: MyColors.lightTextColor, fontSize: 10, letterSpacing: -0.4).paddingOnly(bottom: 3),
|
|
// ],
|
|
// ),
|
|
// request.requestStatus == RequestStatusEnum.submitted
|
|
// ? SvgPicture.asset(
|
|
// MyAssets.arrowRight,
|
|
// height: 9.69,
|
|
// width: 13,
|
|
// )
|
|
// : const SizedBox()
|
|
// ],
|
|
// ),
|
|
],
|
|
).toContainer(isShadowEnabled: true).onPress(() async {
|
|
onTap();
|
|
});
|
|
}
|
|
|
|
Widget showItem(String title, String value) {
|
|
return Row(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
title.toText(color: MyColors.lightTextColor, letterSpacing: -0.48),
|
|
3.width,
|
|
Flexible(child: value.toText(isBold: true, overflow: TextOverflow.ellipsis)),
|
|
],
|
|
);
|
|
}
|
|
}
|