aamir_dev
Faiz Hashmi 1 year ago
parent 2ac8099825
commit 6235fd2a09

@ -1,4 +1,5 @@
import 'package:car_customer_app/views/branches/branch_detail_view.dart';
import 'package:car_customer_app/views/branches/favourite_list_view.dart';
import 'package:car_customer_app/views/branches/provider_profile_view.dart';
import 'package:mc_common_app/views/appointments/appointment_detail_view.dart';
import 'package:mc_common_app/views/appointments/book_appointment_schedules_view.dart';
@ -29,5 +30,6 @@ class CustomerAppRoutes {
AppRoutes.branchSearchFilterPage: (context) => BranchesFilterView(),
AppRoutes.appoinmentSearchFilterPage: (context) => AppointmentsFilterView(),
AppRoutes.providerProfileView: (context) => ProviderProfileView(providerId: ModalRoute.of(context)!.settings.arguments as int),
AppRoutes.favoriteListView: (context) => FavoriteListView(),
};
}

@ -46,7 +46,7 @@ Future<void> main() async {
appId: '1:294636898500:android:e93b7e5d1cc15ae6b0e191',
messagingSenderId: '294636898500',
projectId: 'mowater-2c81a',
));
));
CustomerDependencies.addDependencies();
injector.get<FirebaseMessagingService>().initializeNotifications();

@ -14,6 +14,7 @@ import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/views/advertisement/components/ads_images_corousel_widget.dart';
import 'package:mc_common_app/widgets/bottom_sheet.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
@ -55,7 +56,19 @@ class _BranchDetailViewState extends State<BranchDetailView> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CustomAppBar(title: LocaleKeys.branchDetail.tr()),
appBar: CustomAppBar(
title: LocaleKeys.branchDetail.tr(),
actions: [
Padding(
padding: EdgeInsets.only(top: 8, bottom: 8, right: 21),
child: const Icon(Icons.messenger_outline_rounded, color: Colors.black, size: 18).toContainer(
borderRadius: 100,
borderColor: MyColors.lightGreyEFColor,
isEnabledBorder: true,
),
).onPress(() {})
],
),
body: Column(
children: [
Expanded(
@ -68,7 +81,7 @@ class _BranchDetailViewState extends State<BranchDetailView> {
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.asset(MyAssets.bnCar),
ImagesCorouselWidget(imagesList: widget.branchDetailModel.branchImages ?? []),
12.height,
"${widget.branchDetailModel.branchName} | ${widget.branchDetailModel.serviceProviderName}".toString().toText(
fontSize: 16,

@ -38,7 +38,7 @@ class BranchReviewsWidget extends StatelessWidget {
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
"This branch has no reviews.".toText(fontSize: 14, color: MyColors.lightTextColor),
LocaleKeys.noReviewsBranch.tr().toText(fontSize: 14, color: MyColors.lightTextColor),
],
),
] else ...[
@ -89,11 +89,11 @@ class BranchReviewsWidget extends StatelessWidget {
},
),
if (appointmentsVM.isReadMoreEnabled) ...[
("Read Less").toText(fontSize: 13, color: MyColors.darkPrimaryColor, isUnderLine: true).onPress(() {
LocaleKeys.readLess.tr().toText(fontSize: 13, color: MyColors.darkPrimaryColor, isUnderLine: true).onPress(() {
appointmentsVM.updateIsReadMoreEnabled(false);
}),
] else ...[
("Read More Reviews").toText(fontSize: 13, color: MyColors.darkPrimaryColor, isUnderLine: true).onPress(() {
LocaleKeys.readMoreReviews.tr().toText(fontSize: 13, color: MyColors.darkPrimaryColor, isUnderLine: true).onPress(() {
appointmentsVM.updateIsReadMoreEnabled(true);
}),
]

@ -0,0 +1,87 @@
import 'dart:async';
import 'package:mc_common_app/extensions/string_extensions.dart';
import 'package:mc_common_app/models/provider_branches_models/provider_profile_model.dart';
import 'package:mc_common_app/utils/date_helper.dart';
import 'package:mc_common_app/view_models/appointments_view_model.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.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/generated/locale_keys.g.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/widgets/common_widgets/app_bar.dart';
import 'package:mc_common_app/widgets/common_widgets/provider_details_card.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
class FavoriteListView extends StatefulWidget {
const FavoriteListView({Key? key}) : super(key: key);
@override
State<FavoriteListView> createState() => _FavoriteListViewState();
}
class _FavoriteListViewState extends State<FavoriteListView> {
@override
void initState() {
scheduleMicrotask(() async => context.read<AppointmentsVM>().getMyFavoriteProviders());
super.initState();
}
@override
Widget build(BuildContext context) {
return Consumer(
builder: (BuildContext context, AppointmentsVM appointmentsVM, Widget? child) {
return Scaffold(
appBar: CustomAppBar(
title: LocaleKeys.favoriteList.tr(),
isRemoveBackButton: false,
),
body: SizedBox(
width: double.infinity,
height: double.infinity,
child: Column(
children: [
Expanded(
child: Container(
width: double.infinity,
child: appointmentsVM.state == ViewState.busy
? const Center(child: CircularProgressIndicator())
: appointmentsVM.myFavProvidersList.isEmpty
? Center(
child: (LocaleKeys.noProvidersInFav.tr()).toText(
fontSize: 16,
color: MyColors.lightTextColor,
),
)
: ListView.separated(
itemCount: appointmentsVM.myFavProvidersList.length,
itemBuilder: (context, index) {
ProviderProfileModel providerProfileModel = appointmentsVM.myFavProvidersList[index];
return ProviderDetailCard(
onCardTapped: () => navigateWithName(context, AppRoutes.providerProfileView, arguments: providerProfileModel.providerID),
providerImageUrl: MyAssets.bnCar,
title: providerProfileModel.name ?? "",
description: providerProfileModel.companyDescription ?? "",
startedSince: DateHelper.formatAsMonthYear(DateHelper.parseStringToDate(DateHelper.formatDateT(providerProfileModel.memberSince ?? ""))),
branches: providerProfileModel.serviceProviderBranch ?? [],
totalBranches: (providerProfileModel.noOfBranches ?? 0).toString(),
);
},
separatorBuilder: (context, index) => 12.height,
padding: const EdgeInsets.all(12),
),
).paddingOnly(left: 10, right: 10),
),
],
),
),
);
},
);
}
}

@ -1,6 +1,4 @@
import 'dart:async';
import 'dart:developer';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/view_models/appointments_view_model.dart';
@ -14,7 +12,7 @@ import 'package:mc_common_app/generated/locale_keys.g.dart';
import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/navigator.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
import 'package:mc_common_app/widgets/common_widgets/provider_details_card.dart';
import 'package:mc_common_app/widgets/common_widgets/branch_details_card.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
@ -88,49 +86,56 @@ class _ProviderProfileViewState extends State<ProviderProfileView> {
//TODO: company logo/banner not added form provider app yet
Image.asset(MyAssets.bnCar),
12.height,
appointmentsVM.providerProfileModel!.companyName.toString().toText(
fontSize: 16,
isBold: true,
),
Row(
children: [
("Mowater Member Since:").toText(color: MyColors.lightTextColor, fontSize: 12),
4.width,
//TODO: date is missing from API side
"2023".toText(fontSize: 12, isBold: true),
],
(appointmentsVM.providerProfileModel!.name ?? appointmentsVM.providerProfileModel!.companyName).toString().toText(
fontSize: 16,
isBold: true,
),
if (appointmentsVM.providerProfileModel!.memberSince!.isNotEmpty ) ...[
Row(
children: [
("Member Since:").toText(color: MyColors.lightTextColor, fontSize: 12),
4.width,
"${appointmentsVM.providerProfileModel!.memberSince ?? ""}".toText(fontSize: 12, isBold: true),
],
),
],
4.height,
appointmentsVM.providerProfileModel!.companyDescription!.toText(color: MyColors.lightTextColor, fontSize: 12),
],
).toWhiteContainer(width: double.infinity, allPading: 12),
12.height,
appointmentsVM.providerProfileModel!.serviceProviderBranch == null
? Center(child: Text(LocaleKeys.noBranchFound))
? Center(
child: (LocaleKeys.noBranchFound.tr()).toText(
fontSize: 16,
color: MyColors.lightTextColor,
),
)
: appointmentsVM.providerProfileModel!.serviceProviderBranch!.isEmpty
? Center(child: Text(LocaleKeys.no_branch.tr()))
: ListView.separated(
itemBuilder: (context, index) {
BranchDetailModel branchModel = appointmentsVM.providerProfileModel!.serviceProviderBranch![index];
return ProviderDetailsCard(
onCardTapped: () {
navigateWithName(context, AppRoutes.branchDetailView, arguments: branchModel);
},
providerImageUrl: MyAssets.bnCar,
title: branchModel.branchName ?? "",
providerLocation: branchModel.distanceKm.toString() + " KM",
providerName: branchModel.serviceProviderName ?? "",
providerRatings: (branchModel.branchRateAvg ?? 0.0),
services: branchModel.branchServices,
);
},
separatorBuilder: (context, index) {
return 12.height;
},
itemCount: appointmentsVM.providerProfileModel!.serviceProviderBranch!.length,
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
)
? Center(child: Text(LocaleKeys.no_branch.tr()))
: ListView.separated(
itemBuilder: (context, index) {
BranchDetailModel branchModel = appointmentsVM.providerProfileModel!.serviceProviderBranch![index];
return BranchDetailCard(
onCardTapped: () {
navigateWithName(context, AppRoutes.branchDetailView, arguments: branchModel);
},
providerImageUrl: MyAssets.bnCar,
title: branchModel.branchName ?? "",
providerLocation: branchModel.distanceKm.toString() + " KM",
providerName: branchModel.serviceProviderName ?? "",
providerRatings: (branchModel.branchRateAvg ?? 0.0),
services: branchModel.branchServices,
);
},
separatorBuilder: (context, index) {
return 12.height;
},
itemCount: appointmentsVM.providerProfileModel!.serviceProviderBranch!.length,
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
)
],
),
),

@ -11,8 +11,8 @@ 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/widgets/common_widgets/app_bar.dart';
import 'package:mc_common_app/widgets/common_widgets/branch_details_card.dart';
import 'package:mc_common_app/widgets/common_widgets/categories_list.dart';
import 'package:mc_common_app/widgets/common_widgets/provider_details_card.dart';
import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart';
@ -78,12 +78,9 @@ class BranchesFragment extends StatelessWidget {
itemCount: appointmentsVM.nearbyBranches.length,
itemBuilder: (context, index) {
BranchDetailModel branchDetailModel = appointmentsVM.nearbyBranches[index];
return ProviderDetailsCard(
onCardTapped: () {
navigateWithName(context, AppRoutes.branchDetailView, arguments: branchDetailModel);
},
providerImageUrl: MyAssets.bnCar,
return BranchDetailCard(
onCardTapped: () => navigateWithName(context, AppRoutes.branchDetailView, arguments: branchDetailModel),
providerImageUrl: branchDetailModel.branchProfileImage ?? "",
title: branchDetailModel.branchName ?? "",
providerLocation: branchDetailModel.distanceKm.toString() + " KM",
providerName: branchDetailModel.serviceProviderName ?? "",

@ -27,17 +27,27 @@ class MyRecentBranchesWidget extends StatelessWidget {
width: 90,
child: Column(
children: [
Image.asset(
MyAssets.bnCar,
width: 80,
height: 80,
fit: BoxFit.cover,
).toCircle(borderRadius: 100),
branchDetailModel.branchProfileImage
.buildNetworkImage(
height: 80,
width: 80,
)
.toCircle(borderRadius: 100),
8.height,
"${branchDetailModel.branchName}".toText(fontSize: 14, isBold: true, textAlign: TextAlign.center),
Flexible(
child: "${branchDetailModel.branchName}".toText(
fontSize: 14,
isBold: true,
textAlign: TextAlign.center,
),
),
],
),
).onPress(() => navigateWithName(context, AppRoutes.branchDetailView, arguments: branchDetailModel));
).onPress(() => navigateWithName(
context,
AppRoutes.branchDetailView,
arguments: branchDetailModel,
));
},
),
);

Loading…
Cancel
Save