Added few updations

merge-requests/12/head
FaizHashmiCS22 2 years ago
parent c35e810be0
commit 75fd726027

@ -36,6 +36,12 @@ class MyColors {
static const Color borderColor = Color(0xffE8E8E8);
static const Color greyAddBorderColor = Color(0xffEEEEEE);
//AdStatusColors:
static const Color adActiveStatusColor = Color(0xff5FC16A);
static const Color adCancelledStatusColor = Color(0xffDD0505);
static const Color adSoldStatusColor = Color(0xff22742B);
static const Color adPendingStatusColor = Color(0xffEDB947);
static Decoration gradient = BoxDecoration(
gradient: const LinearGradient(colors: [
darkPrimaryColor,
@ -75,4 +81,3 @@ Color? borderLightColor = Colors.blueGrey[50];
const Color iconColor = Colors.blueGrey;
Color? headingColor = Colors.blueGrey[800];
Color? txtColor = Colors.blueGrey[500];

@ -19,6 +19,22 @@ enum AdPostStatus {
reserveCancel,
}
enum PaymentMethodsEnum {
mada,
visa,
applePay,
masterCard,
tamara,
}
enum PaymentTypesEnum {
subscription,
appointment,
ads,
adReserve,
request,
}
enum AdCreationStepsEnum {
vehicleDetails,
damageParts,

@ -4,12 +4,13 @@ import 'dart:typed_data';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:path/path.dart' as p;
import 'package:fluttertoast/fluttertoast.dart';
import 'package:mc_common_app/exceptions/api_exception.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/widgets/loading_dialog.dart';
import 'package:path/path.dart' as p;
class Utils {
static bool _isLoadingVisible = false;
@ -24,8 +25,6 @@ class Utils {
static Future<String> pickDateFromDatePicker(BuildContext context) async {
DateTime? pickedDate = await showDatePicker(
context: context,
initialDate: DateTime.now(), //get today's date
firstDate: DateTime.now(), //DateTime.now() - not to allow to choose before today.
lastDate: DateTime(2101));
@ -156,6 +155,50 @@ class Utils {
);
}
static Color getChipColorByAdStatus(AdPostStatus adPostStatus) {
switch (adPostStatus) {
case AdPostStatus.pendingForReview:
return MyColors.adPendingStatusColor;
case AdPostStatus.pendingForPayment:
return MyColors.adPendingStatusColor;
case AdPostStatus.rejected:
return MyColors.adCancelledStatusColor;
case AdPostStatus.cancelled:
return MyColors.adCancelledStatusColor;
case AdPostStatus.pendingForPost:
return MyColors.adPendingStatusColor;
case AdPostStatus.active:
return MyColors.adActiveStatusColor;
case AdPostStatus.expired:
return MyColors.adCancelledStatusColor;
case AdPostStatus.sold:
return MyColors.adSoldStatusColor;
case AdPostStatus.reserved:
return MyColors.primaryColor;
case AdPostStatus.buyingService:
case AdPostStatus.reserveCancel:
return MyColors.greenColor;
}
}
static statusContainerChip({required String text, EdgeInsetsGeometry padding = const EdgeInsets.symmetric(vertical: 3, horizontal: 6), Color chipColor = MyColors.greenColor}) {
return Container(
decoration: BoxDecoration(
color: chipColor,
borderRadius: const BorderRadius.all(Radius.circular(200)),
),
padding: padding,
child: text.toText(fontSize: 10, color: MyColors.white));
}
static InputDecoration txtField(String label) {
return InputDecoration(

@ -69,6 +69,7 @@ class AdVM extends BaseVM {
List<AdDetailsModel> exploreAdsFilteredList = [];
List<AdDetailsModel> myAdsFilteredList = [];
List<AdDetailsModel> myAds = [];
List<AdDetailsModel> myActiveAdsForHome = [];
List<VehicleDamageCard> vehicleDamageCards = [];
@ -95,7 +96,10 @@ class AdVM extends BaseVM {
}
void removeSpecialServiceCard(int index) {
String option = specialServiceCards.elementAt(index).serviceSelectedId!.selectedOption;
String option = specialServiceCards
.elementAt(index)
.serviceSelectedId!
.selectedOption;
for (var value in vehicleAdsSpecialServices) {
if (value.name == option) {
@ -202,12 +206,16 @@ class AdVM extends BaseVM {
Future<void> getMyAds() async {
isFetchingLists = true;
myAds = await adsRepo.getAllAds(isMyAds: true);
final myActiveAds = myAds.where((element) => element.adPostStatus == AdPostStatus.active).toList();
myActiveAdsForHome = myActiveAds.length >= 3 ? myActiveAds.take(3).toList() : myActiveAds;
isFetchingLists = true;
notifyListeners();
}
Future<void> getExploreAds() async {
exploreAds = await adsRepo.getAllAds(isMyAds: false);
myAdsFilteredList = exploreAds;
notifyListeners();
}
@ -860,7 +868,10 @@ class AdVM extends BaseVM {
}
void removeDamagePartCard(int index) {
String option = vehicleDamageCards.elementAt(index).partSelectedId!.selectedOption;
String option = vehicleDamageCards
.elementAt(index)
.partSelectedId!
.selectedOption;
for (var value in vehicleDamageParts) {
if (value.partName == option) {
@ -992,7 +1003,9 @@ class AdVM extends BaseVM {
Future<VehiclePostingImages> convertFileToVehiclePostingImages({required File file}) async {
List<int> imageBytes = await file.readAsBytes();
String image = base64Encode(imageBytes);
String fileName = file.path.split('/').last;
String fileName = file.path
.split('/')
.last;
VehiclePostingImages vehiclePostingImages = VehiclePostingImages(
imageName: fileName,
imageStr: image,

@ -5,6 +5,7 @@ import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/advertisment_models/ad_details_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/views/advertisement/ads_images_slider.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart';
@ -104,27 +105,7 @@ class AdsDetailView extends StatelessWidget {
],
),
14.height,
Row(
children: [
Expanded(
child: ShowFillButton(
maxHeight: 55,
title: "Reserve Ad",
onPressed: () {
navigateWithName(context, AppRoutes.paymentMethodsView);
},
),
),
12.width,
Container(
height: 55,
width: 55,
alignment: Alignment.center,
decoration: BoxDecoration(border: Border.all(color: MyColors.black, width: 3)),
child: const Icon(Icons.phone, color: MyColors.black),
).onPress(() {}),
],
),
BuildAdDetailsActionButton(adPostStatus: adDetails.adPostStatus!),
],
),
)),
@ -134,3 +115,117 @@ class AdsDetailView extends StatelessWidget {
);
}
}
class BuildAdDetailsActionButton extends StatelessWidget {
final AdPostStatus adPostStatus;
const BuildAdDetailsActionButton({Key? key, required this.adPostStatus}) : super(key: key);
Widget pendingForPaymentAction(BuildContext context) {
return Column(
children: [
Row(
children: [
Expanded(
child: ShowFillButton(
maxHeight: 55,
title: "Reserve Ad",
onPressed: () {
navigateWithName(context, AppRoutes.paymentMethodsView);
},
),
),
],
),
Row(
children: [
Expanded(
child: ShowFillButton(
maxHeight: 55,
title: "Reserve Ad",
onPressed: () {
navigateWithName(context, AppRoutes.paymentMethodsView);
},
),
),
],
)
],
);
}
Widget markAsSoldAction(BuildContext context) {
return Row(
children: [
Expanded(
child: ShowFillButton(
maxHeight: 55,
title: "Mark As Sold",
onPressed: () {},
),
),
],
);
}
Widget cancelReservationAction(BuildContext context) {
return Row(
children: [
Expanded(
child: ShowFillButton(
maxHeight: 55,
title: "Cancel Reservation",
onPressed: () {},
),
),
],
);
}
Widget defaultAction(BuildContext context) {
return Row(
children: [
Expanded(
child: ShowFillButton(
maxHeight: 55,
title: "Reserve Ad",
onPressed: () {
navigateWithName(context, AppRoutes.paymentMethodsView);
},
),
),
12.width,
Container(
height: 55,
width: 55,
alignment: Alignment.center,
decoration: BoxDecoration(border: Border.all(color: MyColors.black, width: 3)),
child: const Icon(Icons.phone, color: MyColors.black),
).onPress(() {}),
],
);
}
@override
Widget build(BuildContext context) {
switch (adPostStatus) {
case AdPostStatus.pendingForPayment:
return pendingForPaymentAction(context);
case AdPostStatus.active:
return markAsSoldAction(context);
case AdPostStatus.reserved:
return cancelReservationAction(context);
case AdPostStatus.buyingService:
case AdPostStatus.reserveCancel:
case AdPostStatus.rejected:
case AdPostStatus.cancelled:
case AdPostStatus.pendingForPost:
case AdPostStatus.pendingForReview:
case AdPostStatus.sold:
case AdPostStatus.expired:
break;
}
return defaultAction(context);
}
}

@ -6,14 +6,24 @@ import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/utils/utils.dart';
import 'package:mc_common_app/view_models/ad_view_model.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
class BuildAdsList extends StatelessWidget {
final List<AdDetailsModel> adsList;
final ScrollPhysics? scrollPhysics;
final bool isAdsFragment;
final bool shouldShowAdStatus;
const BuildAdsList({Key? key, required this.adsList, this.scrollPhysics, this.isAdsFragment = false}) : super(key: key);
const BuildAdsList({
Key? key,
required this.adsList,
this.scrollPhysics,
required this.shouldShowAdStatus,
this.isAdsFragment = false,
}) : super(key: key);
@override
Widget build(BuildContext context) {
@ -32,7 +42,11 @@ class BuildAdsList extends StatelessWidget {
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: const EdgeInsets.only(bottom: 8),
child: AdCard(adDetails: adsList[index]),
child: AdCard(
adDetails: adsList[index],
isAdsFragment: isAdsFragment,
shouldShowAdStatus: shouldShowAdStatus,
),
).onPress(() {
navigateWithName(context, AppRoutes.adsDetailView, arguments: adsList[index]);
});
@ -42,8 +56,10 @@ class BuildAdsList extends StatelessWidget {
class AdCard extends StatelessWidget {
final AdDetailsModel adDetails;
final bool isAdsFragment;
final bool shouldShowAdStatus;
const AdCard({Key? key, required this.adDetails}) : super(key: key);
const AdCard({Key? key, required this.adDetails, required this.isAdsFragment, required this.shouldShowAdStatus}) : super(key: key);
@override
Widget build(BuildContext context) {
@ -79,6 +95,12 @@ class AdCard extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
if (isAdsFragment && context.read<AdVM>().isExploreAdsTapped) ...[
Utils.statusContainerChip(text: adDetails.statuslabel!, chipColor: Utils.getChipColorByAdStatus(adDetails.adPostStatus!)),
],
if (shouldShowAdStatus) ...[
Utils.statusContainerChip(text: adDetails.statuslabel!, chipColor: Utils.getChipColorByAdStatus(adDetails.adPostStatus!)),
],
(adDetails.vehicle!.vehicleTitle ?? "").toText(fontSize: 16, isBold: true),
Row(
children: [

Loading…
Cancel
Save