aamir_dev
Faiz Hashmi 2 years 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/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: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/appointment_detail_view.dart';
import 'package:mc_common_app/views/appointments/book_appointment_schedules_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.branchSearchFilterPage: (context) => BranchesFilterView(),
AppRoutes.appoinmentSearchFilterPage: (context) => AppointmentsFilterView(), AppRoutes.appoinmentSearchFilterPage: (context) => AppointmentsFilterView(),
AppRoutes.providerProfileView: (context) => ProviderProfileView(providerId: ModalRoute.of(context)!.settings.arguments as int), AppRoutes.providerProfileView: (context) => ProviderProfileView(providerId: ModalRoute.of(context)!.settings.arguments as int),
AppRoutes.favoriteListView: (context) => FavoriteListView(),
}; };
} }

@ -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/models/provider_branches_models/branch_detail_model.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/navigator.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/bottom_sheet.dart';
import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
@ -55,7 +56,19 @@ class _BranchDetailViewState extends State<BranchDetailView> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( 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( body: Column(
children: [ children: [
Expanded( Expanded(
@ -68,7 +81,7 @@ class _BranchDetailViewState extends State<BranchDetailView> {
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Image.asset(MyAssets.bnCar), ImagesCorouselWidget(imagesList: widget.branchDetailModel.branchImages ?? []),
12.height, 12.height,
"${widget.branchDetailModel.branchName} | ${widget.branchDetailModel.serviceProviderName}".toString().toText( "${widget.branchDetailModel.branchName} | ${widget.branchDetailModel.serviceProviderName}".toString().toText(
fontSize: 16, fontSize: 16,

@ -38,7 +38,7 @@ class BranchReviewsWidget extends StatelessWidget {
Row( Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
"This branch has no reviews.".toText(fontSize: 14, color: MyColors.lightTextColor), LocaleKeys.noReviewsBranch.tr().toText(fontSize: 14, color: MyColors.lightTextColor),
], ],
), ),
] else ...[ ] else ...[
@ -89,11 +89,11 @@ class BranchReviewsWidget extends StatelessWidget {
}, },
), ),
if (appointmentsVM.isReadMoreEnabled) ...[ 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); appointmentsVM.updateIsReadMoreEnabled(false);
}), }),
] else ...[ ] 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); 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:async';
import 'dart:developer';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart'; 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/utils/enums.dart';
import 'package:mc_common_app/view_models/appointments_view_model.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/theme/colors.dart';
import 'package:mc_common_app/utils/navigator.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/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:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.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 //TODO: company logo/banner not added form provider app yet
Image.asset(MyAssets.bnCar), Image.asset(MyAssets.bnCar),
12.height, 12.height,
appointmentsVM.providerProfileModel!.companyName.toString().toText( (appointmentsVM.providerProfileModel!.name ?? appointmentsVM.providerProfileModel!.companyName).toString().toText(
fontSize: 16, fontSize: 16,
isBold: true, 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),
],
), ),
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, 4.height,
appointmentsVM.providerProfileModel!.companyDescription!.toText(color: MyColors.lightTextColor, fontSize: 12), appointmentsVM.providerProfileModel!.companyDescription!.toText(color: MyColors.lightTextColor, fontSize: 12),
], ],
).toWhiteContainer(width: double.infinity, allPading: 12), ).toWhiteContainer(width: double.infinity, allPading: 12),
12.height, 12.height,
appointmentsVM.providerProfileModel!.serviceProviderBranch == null appointmentsVM.providerProfileModel!.serviceProviderBranch == null
? Center(child: Text(LocaleKeys.noBranchFound)) ? Center(
child: (LocaleKeys.noBranchFound.tr()).toText(
fontSize: 16,
color: MyColors.lightTextColor,
),
)
: appointmentsVM.providerProfileModel!.serviceProviderBranch!.isEmpty : appointmentsVM.providerProfileModel!.serviceProviderBranch!.isEmpty
? Center(child: Text(LocaleKeys.no_branch.tr())) ? Center(child: Text(LocaleKeys.no_branch.tr()))
: ListView.separated( : ListView.separated(
itemBuilder: (context, index) { itemBuilder: (context, index) {
BranchDetailModel branchModel = appointmentsVM.providerProfileModel!.serviceProviderBranch![index]; BranchDetailModel branchModel = appointmentsVM.providerProfileModel!.serviceProviderBranch![index];
return ProviderDetailsCard( return BranchDetailCard(
onCardTapped: () { onCardTapped: () {
navigateWithName(context, AppRoutes.branchDetailView, arguments: branchModel); navigateWithName(context, AppRoutes.branchDetailView, arguments: branchModel);
}, },
providerImageUrl: MyAssets.bnCar, providerImageUrl: MyAssets.bnCar,
title: branchModel.branchName ?? "", title: branchModel.branchName ?? "",
providerLocation: branchModel.distanceKm.toString() + " KM", providerLocation: branchModel.distanceKm.toString() + " KM",
providerName: branchModel.serviceProviderName ?? "", providerName: branchModel.serviceProviderName ?? "",
providerRatings: (branchModel.branchRateAvg ?? 0.0), providerRatings: (branchModel.branchRateAvg ?? 0.0),
services: branchModel.branchServices, services: branchModel.branchServices,
); );
}, },
separatorBuilder: (context, index) { separatorBuilder: (context, index) {
return 12.height; return 12.height;
}, },
itemCount: appointmentsVM.providerProfileModel!.serviceProviderBranch!.length, itemCount: appointmentsVM.providerProfileModel!.serviceProviderBranch!.length,
physics: NeverScrollableScrollPhysics(), physics: NeverScrollableScrollPhysics(),
shrinkWrap: true, 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/enums.dart';
import 'package:mc_common_app/utils/navigator.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/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/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:mc_common_app/widgets/extensions/extensions_widget.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
@ -78,12 +78,9 @@ class BranchesFragment extends StatelessWidget {
itemCount: appointmentsVM.nearbyBranches.length, itemCount: appointmentsVM.nearbyBranches.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
BranchDetailModel branchDetailModel = appointmentsVM.nearbyBranches[index]; BranchDetailModel branchDetailModel = appointmentsVM.nearbyBranches[index];
return BranchDetailCard(
return ProviderDetailsCard( onCardTapped: () => navigateWithName(context, AppRoutes.branchDetailView, arguments: branchDetailModel),
onCardTapped: () { providerImageUrl: branchDetailModel.branchProfileImage ?? "",
navigateWithName(context, AppRoutes.branchDetailView, arguments: branchDetailModel);
},
providerImageUrl: MyAssets.bnCar,
title: branchDetailModel.branchName ?? "", title: branchDetailModel.branchName ?? "",
providerLocation: branchDetailModel.distanceKm.toString() + " KM", providerLocation: branchDetailModel.distanceKm.toString() + " KM",
providerName: branchDetailModel.serviceProviderName ?? "", providerName: branchDetailModel.serviceProviderName ?? "",

@ -27,17 +27,27 @@ class MyRecentBranchesWidget extends StatelessWidget {
width: 90, width: 90,
child: Column( child: Column(
children: [ children: [
Image.asset( branchDetailModel.branchProfileImage
MyAssets.bnCar, .buildNetworkImage(
width: 80, height: 80,
height: 80, width: 80,
fit: BoxFit.cover, )
).toCircle(borderRadius: 100), .toCircle(borderRadius: 100),
8.height, 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