diff --git a/assets/icons/anouncement_icon.svg b/assets/icons/anouncement_icon.svg
new file mode 100644
index 0000000..dad55fd
--- /dev/null
+++ b/assets/icons/anouncement_icon.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/appointments_icon.svg b/assets/icons/appointments_icon.svg
new file mode 100644
index 0000000..ebf91e9
--- /dev/null
+++ b/assets/icons/appointments_icon.svg
@@ -0,0 +1,5 @@
+
diff --git a/assets/icons/close_icon.svg b/assets/icons/close_icon.svg
new file mode 100644
index 0000000..0230942
--- /dev/null
+++ b/assets/icons/close_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/drawer_icon.svg b/assets/icons/drawer_icon.svg
new file mode 100644
index 0000000..363d413
--- /dev/null
+++ b/assets/icons/drawer_icon.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/home_icon.svg b/assets/icons/home_icon.svg
new file mode 100644
index 0000000..758dd1b
--- /dev/null
+++ b/assets/icons/home_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/mini_clock.svg b/assets/icons/mini_clock.svg
new file mode 100644
index 0000000..d59971c
--- /dev/null
+++ b/assets/icons/mini_clock.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/next_icon.svg b/assets/icons/next_icon.svg
new file mode 100644
index 0000000..0a3dc04
--- /dev/null
+++ b/assets/icons/next_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/notification_bell.svg b/assets/icons/notification_bell.svg
new file mode 100644
index 0000000..dd32254
--- /dev/null
+++ b/assets/icons/notification_bell.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/providers_icon.svg b/assets/icons/providers_icon.svg
new file mode 100644
index 0000000..f4cc334
--- /dev/null
+++ b/assets/icons/providers_icon.svg
@@ -0,0 +1,7 @@
+
diff --git a/assets/icons/settings_icon.svg b/assets/icons/settings_icon.svg
new file mode 100644
index 0000000..6fe8da9
--- /dev/null
+++ b/assets/icons/settings_icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/lib/chat/chat_view.dart b/lib/chat/chat_view.dart
deleted file mode 100644
index 70609aa..0000000
--- a/lib/chat/chat_view.dart
+++ /dev/null
@@ -1,195 +0,0 @@
-import 'package:flutter/material.dart';
-import 'package:mc_common_app/classes/consts.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/button/show_fill_button.dart';
-import 'package:mc_common_app/widgets/common_widgets/app_bar.dart';
-import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';
-import 'package:mc_common_app/widgets/txt_field.dart';
-
-class ChatView extends StatelessWidget {
- const ChatView({super.key});
-
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- appBar: CustomAppBar(title: "Chat"),
- body: Column(
- children: [
- Expanded(
- child: ListView.separated(
- itemCount: 15,
- separatorBuilder: (BuildContext context, int index) => 20.height,
- itemBuilder: (BuildContext context, int index) {
- return ChatMessageCustomWidget(
- isSent: index.isOdd,
- profileUrl: MyAssets.bnCar,
- messageText: "Hi, How Are you? I can help you out with the desired request.",
- messageTypeEnum: index == 10
- ? (MessageTypeEnum.newOfferRequired)
- : index == 12
- ? (MessageTypeEnum.offerProvided)
- : (MessageTypeEnum.text),
- senderName: "Al Abdullah Cars",
- );
- }).horPaddingMain(),
- ),
- 10.width,
- Row(
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Expanded(
- flex: 7,
- child: TxtField(
- // value: adVM.vehicleDemandAmount,
- // errorValue: adVM.demandAmountError,
- hint: "Type your message here..",
- keyboardType: TextInputType.text,
- isNeedBorder: false,
- onChanged: (v) => null,
- ),
- ),
- Expanded(
- flex: 1,
- child: Icon(
- Icons.send_rounded,
- color: MyColors.darkPrimaryColor,
- size: 30,
- ).onPress(() {}))
- ],
- ).toContainer(isShadowEnabled: true),
- ],
- ),
- // body:
- );
- }
-}
-
-class ChatMessageCustomWidget extends StatelessWidget {
- final String profileUrl;
- final String senderName;
- final String messageText;
- final MessageTypeEnum messageTypeEnum;
- final bool isSent;
-
- const ChatMessageCustomWidget({
- super.key,
- required this.profileUrl,
- required this.senderName,
- required this.messageText,
- required this.messageTypeEnum,
- required this.isSent,
- });
-
- @override
- Widget build(BuildContext context) {
- return Directionality(
- textDirection: isSent ? TextDirection.rtl : TextDirection.ltr,
- child: Row(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Expanded(
- flex: 1,
- child: Image.asset(
- profileUrl,
- width: 34,
- height: 34,
- fit: BoxFit.fill,
- ).toCircle(borderRadius: 100),
- ),
- 10.width,
- Expanded(
- flex: 10,
- child: Column(
- children: [
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- "${isSent ? "You" : senderName}".toText(fontSize: 16, isBold: true),
- ],
- ),
- 5.height,
- Column(
- children: [
- Row(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Expanded(
- child: "${messageText}".toText(
- color: isSent ? MyColors.white : MyColors.lightTextColor,
- fontSize: 12,
- // isBold: true,
- ),
- ),
- ],
- ),
- if (messageTypeEnum == MessageTypeEnum.offerProvided || messageTypeEnum == MessageTypeEnum.newOfferRequired) ...[
- 5.height,
- Row(
- crossAxisAlignment: CrossAxisAlignment.end,
- children: [
- "40000".toText(fontSize: 19, isBold: true),
- 2.width,
- "SAR".toText(color: MyColors.lightTextColor, height: 2.2, fontSize: 10, isBold: true),
- ],
- ),
- 10.height,
- if (messageTypeEnum == MessageTypeEnum.newOfferRequired) ...[
- Center(
- child: "You asked for the new offer.".toText(
- color: MyColors.adPendingStatusColor,
- fontSize: 12,
- isItalic: true,
- ),
- ).toContainer(borderRadius: 40, width: double.infinity, backgroundColor: MyColors.adPendingStatusColor.withOpacity(0.16)),
- ] else ...[
- Row(
- children: [
- Expanded(
- child: ShowFillButton(
- maxHeight: 27,
- title: "Accept",
- fontSize: 9,
- borderColor: MyColors.greenColor,
- isFilled: false,
- onPressed: () {},
- backgroundColor: MyColors.white,
- txtColor: MyColors.greenColor,
- ),
- ),
- 20.width,
- Expanded(
- child: ShowFillButton(
- maxHeight: 27,
- title: "Reject",
- borderColor: MyColors.redColor,
- isFilled: false,
- onPressed: () {},
- backgroundColor: MyColors.white,
- txtColor: MyColors.redColor,
- fontSize: 9,
- ),
- )
- ],
- ),
- ],
- ],
- ],
- ).toContainer(
- isShadowEnabled: !isSent,
- backgroundColor: isSent ? MyColors.darkIconColor : MyColors.white,
- borderRadius: 0,
- margin: EdgeInsets.fromLTRB(isSent ? 25 : 0, 0, !isSent ? 25 : 0, 0),
- ),
- ],
- ),
- )
- ],
- ),
- );
- }
-}
-
-enum MessageTypeEnum { text, picture, offerProvided, recording, video, newOfferRequired }
diff --git a/lib/config/customer_dependencies.dart b/lib/config/customer_dependencies.dart
index 6fd51e7..252b4f9 100644
--- a/lib/config/customer_dependencies.dart
+++ b/lib/config/customer_dependencies.dart
@@ -1,13 +1,8 @@
-import 'package:car_customer_app/repositories/provider_repo.dart';
-import 'package:car_customer_app/repositories/appointment_repo.dart';
-import 'package:car_customer_app/repositories/request_repo.dart';
+
import 'package:mc_common_app/config/dependencies.dart';
class CustomerDependencies {
static void addDependencies() {
AppDependencies.addDependencies();
- injector.registerSingleton(() => ProviderRepoImp());
- injector.registerSingleton(() => ScheduleRepoImp());
- injector.registerSingleton(() => RequestRepoImp());
}
}
diff --git a/lib/config/customer_routes.dart b/lib/config/customer_routes.dart
index 8f85512..609ab7d 100644
--- a/lib/config/customer_routes.dart
+++ b/lib/config/customer_routes.dart
@@ -1,28 +1,31 @@
-import 'package:car_customer_app/chat/chat_view.dart';
-import 'package:car_customer_app/views/appointments/appointment_detail_view.dart';
-import 'package:car_customer_app/views/appointments/book_appointment_schedules_view.dart';
-import 'package:car_customer_app/views/appointments/book_appointment_services_view.dart';
-import 'package:car_customer_app/views/appointments/book_appointments_item_view.dart';
-import 'package:car_customer_app/views/appointments/pick_items_view.dart';
-import 'package:car_customer_app/views/appointments/review_appointment_view.dart';
+import 'package:mc_common_app/models/requests_models/offers_model.dart';
+import 'package:mc_common_app/models/requests_models/request_model.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_services_view.dart';
+import 'package:mc_common_app/views/appointments/book_appointments_item_view.dart';
+import 'package:mc_common_app/views/appointments/pick_items_view.dart';
+import 'package:mc_common_app/views/appointments/review_appointment_view.dart';
import 'package:car_customer_app/views/dashboard/dashboard_page.dart';
import 'package:car_customer_app/views/provider/branch_detail_page.dart';
import 'package:car_customer_app/views/provider/provider_profile_page.dart';
-import 'package:car_customer_app/views/requests/create_request_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/models/advertisment_models/ad_details_model.dart';
import 'package:mc_common_app/models/appointments_models/appointment_list_model.dart';
import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart';
-import 'package:mc_common_app/models/requests/offers_model.dart';
import 'package:mc_common_app/utils/enums.dart';
import 'package:mc_common_app/views/advertisement/ads_detail_view.dart';
import 'package:mc_common_app/views/advertisement/create_ad_view.dart';
import 'package:mc_common_app/views/advertisement/select_ad_type_view.dart';
import 'package:mc_common_app/views/payments/payment_methods_view.dart';
import 'package:mc_common_app/views/advertisement/ads_filter_view.dart';
-
-import '../views/requests/offer_list_page.dart';
+import 'package:mc_common_app/views/requests/create_request_page.dart';
+import 'package:mc_common_app/views/requests/offer_list_page.dart';
+import 'package:mc_common_app/views/setting_options/setting_options_faqs.dart';
+import 'package:mc_common_app/views/setting_options/setting_options_invite_friends.dart';
+import 'package:mc_common_app/views/setting_options/setting_options_language.dart';
+import 'package:mc_common_app/views/chat/chat_view.dart';
class CustomerAppRoutes {
static final Map routes = {
@@ -42,8 +45,13 @@ class CustomerAppRoutes {
AppRoutes.paymentMethodsView: (context) => PaymentMethodsView(paymentType: ModalRoute.of(context)!.settings.arguments as PaymentTypes),
AppRoutes.branchDetailPage: (context) => BranchDetailPage(branchDetailModel: ModalRoute.of(context)!.settings.arguments as BranchDetailModel),
AppRoutes.providerProfilePage: (context) => ProviderProfilePage(providerId: ModalRoute.of(context)!.settings.arguments as int),
- AppRoutes.offersListPage: (context) => OfferListPage(offersList: ModalRoute.of(context)!.settings.arguments as List),
+ AppRoutes.offersListPage: (context) => OfferListPage(offerListPageArguments: ModalRoute.of(context)!.settings.arguments as OfferListPageArguments),
AppRoutes.createRequestPage: (context) => CreateRequestPage(),
- AppRoutes.chatView: (context) => ChatView(),
+ AppRoutes.chatView: (context) => ChatView(
+ chatViewArguments: ModalRoute.of(context)!.settings.arguments as ChatViewArguments,
+ ),
+ AppRoutes.settingOptionsFaqs: (context) => SettingOptionsFAQs(),
+ AppRoutes.settingOptionsLanguages: (context) => SettingOptionsLanguage(),
+ AppRoutes.settingOptionsInviteFriends: (context) => SettingOptionsInviteFriends(),
};
}
diff --git a/lib/main.dart b/lib/main.dart
index 79209f2..5f0143b 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,17 +1,19 @@
import 'package:car_customer_app/config/customer_dependencies.dart';
import 'package:car_customer_app/config/customer_routes.dart';
-import 'package:car_customer_app/repositories/provider_repo.dart';
-import 'package:car_customer_app/repositories/appointment_repo.dart';
-import 'package:car_customer_app/repositories/request_repo.dart';
-import 'package:car_customer_app/view_models/appointments_view_model.dart';
-import 'package:car_customer_app/view_models/dashboard_view_model.dart';
-import 'package:car_customer_app/view_models/requests_view_model.dart';
+import 'package:mc_common_app/repositories/chat_repo.dart';
+import 'package:mc_common_app/repositories/provider_repo.dart';
+import 'package:mc_common_app/repositories/appointment_repo.dart';
+import 'package:mc_common_app/repositories/request_repo.dart';
+import 'package:mc_common_app/view_models/appointments_view_model.dart';
+import 'package:mc_common_app/view_models/chat_view_model.dart';
+import 'package:mc_common_app/view_models/dashboard_view_model_customer.dart';
+import 'package:mc_common_app/view_models/requests_view_model.dart';
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/config/dependencies.dart';
import 'package:mc_common_app/config/routes.dart';
-import 'package:mc_common_app/models/post_params_model.dart';
+import 'package:mc_common_app/models/general_models/post_params_model.dart';
import 'package:mc_common_app/repositories/ads_repo.dart';
import 'package:mc_common_app/repositories/common_repo.dart';
import 'package:mc_common_app/repositories/payments_repo.dart';
@@ -40,8 +42,8 @@ Future main() async {
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => BaseVM()),
- ChangeNotifierProvider(
- create: (_) => DashboardVM(
+ ChangeNotifierProvider(
+ create: (_) => DashboardVmCustomer(
commonServices: injector.get(),
userRepo: injector.get(),
),
@@ -67,6 +69,7 @@ Future main() async {
ChangeNotifierProvider(
create: (_) => PaymentVM(paymentService: injector.get(), paymentRepo: injector.get()),
),
+ ChangeNotifierProvider(create: (_) => ChatVM(chatRepo: injector.get())),
ChangeNotifierProvider(
create: (_) => RequestsVM(
requestRepo: injector.get(),
diff --git a/lib/repositories/appointment_repo.dart b/lib/repositories/appointment_repo.dart
deleted file mode 100644
index dc25367..0000000
--- a/lib/repositories/appointment_repo.dart
+++ /dev/null
@@ -1,159 +0,0 @@
-import 'dart:developer';
-
-import 'package:mc_common_app/api/api_client.dart';
-import 'package:mc_common_app/classes/app_state.dart';
-import 'package:mc_common_app/classes/consts.dart';
-import 'package:mc_common_app/config/dependencies.dart';
-import 'package:mc_common_app/models/generic_resp_model.dart';
-import 'package:mc_common_app/models/m_response.dart';
-import 'package:mc_common_app/models/provider_branches_models/profile/services.dart';
-import 'package:mc_common_app/models/schedule_model.dart';
-import 'package:mc_common_app/models/service_schedule_model.dart';
-import 'package:mc_common_app/utils/enums.dart';
-
-abstract class AppointmentRepo {
- Future getAllServices(String branchId);
-
- Future createSchedule(Map map);
-
- Future addServicesInSchedule(Map map);
-
- Future updateSchedule(Map map);
-
- Future> getSchedules(String branchId);
-
- Future updateServicesInSchedule(Map map);
-
- Future> mergeServiceIntoAvailableSchedules({
- required List serviceItemIdsForHome,
- required List serviceItemIdsForWorkshop,
- });
-
- Future createServiceAppointment({required List schedules, required int serviceProviderID});
-
- Future cancelOrRescheduleServiceAppointment({required int serviceAppointmentID, required int serviceSlotID, required int appointmentScheduleAction});
-}
-
-class ScheduleRepoImp implements AppointmentRepo {
- @override
- Future getAllServices(String branchId) async {
- Map map = {"ProviderBranchID": branchId};
- String t = AppState().getUser.data!.accessToken ?? "";
- return await injector.get().getJsonForObject((json) => Services.fromJson(json), ApiConsts.getServicesOfBranch, token: t, queryParameters: map);
- }
-
- @override
- Future createSchedule(Map map) async {
- String t = AppState().getUser.data!.accessToken ?? "";
- return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.createSchedule, map, token: t);
- }
-
- @override
- Future addServicesInSchedule(Map map) async {
- String t = AppState().getUser.data!.accessToken ?? "";
- return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.createGroup, map, token: t);
- }
-
- @override
- Future> getSchedules(String branchId) async {
- Map map = {"ServiceProviderBranchID": branchId};
- String t = AppState().getUser.data!.accessToken ?? "";
-
- GenericRespModel adsGenericModel = await injector.get().getJsonForObject(
- (json) => GenericRespModel.fromJson(json),
- ApiConsts.getSchedule,
- token: t,
- queryParameters: map,
- );
-
- return List.generate(adsGenericModel.data.length, (index) => ScheduleData.fromJson(adsGenericModel.data[index]));
- }
-
- @override
- Future updateSchedule(Map map) async {
- String t = AppState().getUser.data!.accessToken ?? "";
- return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateSchedule, map, token: t);
- }
-
- @override
- Future updateServicesInSchedule(Map map) async {
- String t = AppState().getUser.data!.accessToken ?? "";
- return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateGroup, map, token: t);
- }
-
- Future> mergeServiceIntoAvailableSchedules({
- required List serviceItemIdsForHome,
- required List serviceItemIdsForWorkshop,
- }) async {
- String t = AppState().getUser.data!.accessToken ?? "";
- var queryParameters = [
- {
- "appointmentType": 2,
- "ServiceItemIDs": serviceItemIdsForHome,
- },
- {
- "appointmentType": 1,
- "ServiceItemIDs": serviceItemIdsForWorkshop,
- }
- ];
- GenericRespModel adsGenericModel = await injector.get().postJsonForObject(
- (json) => GenericRespModel.fromJson(json),
- ApiConsts.GetServiceItemAppointmentScheduleSlots,
- queryParameters,
- token: t,
- );
- List serviceAppointmentScheduleModel =
- List.generate(adsGenericModel.data.length, (index) => ServiceAppointmentScheduleModel.fromJson(adsGenericModel.data[index], isForAppointment: true));
- return serviceAppointmentScheduleModel;
- }
-
- Future createServiceAppointment({required List schedules, required int serviceProviderID}) async {
- String t = AppState().getUser.data!.accessToken ?? "";
- int customerId = AppState().getUser.data!.userInfo!.customerId ?? 0;
-
- List