From c7953189e3aea88dfe05f84281ab46497b63e522 Mon Sep 17 00:00:00 2001 From: Faiz Hashmi Date: Thu, 7 Dec 2023 10:48:51 +0300 Subject: [PATCH] refined models --- lib/chat/chat_view.dart | 195 ------------------ lib/config/customer_routes.dart | 4 +- lib/main.dart | 5 +- lib/views/dashboard/dashboard_page.dart | 25 ++- .../fragments/my_requests_fragment.dart | 6 +- .../dashboard/widgets/bottom_nav_bar.dart | 4 +- .../dashboard/widgets/drawer_widget.dart | 2 +- .../provider/sheet/items_list_sheet.dart | 2 +- 8 files changed, 35 insertions(+), 208 deletions(-) delete mode 100644 lib/chat/chat_view.dart 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_routes.dart b/lib/config/customer_routes.dart index 10e2fd8..54565f4 100644 --- a/lib/config/customer_routes.dart +++ b/lib/config/customer_routes.dart @@ -1,4 +1,4 @@ -import 'package:car_customer_app/chat/chat_view.dart'; +import 'package:mc_common_app/models/requests_models/offers_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'; @@ -13,7 +13,6 @@ 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'; @@ -25,6 +24,7 @@ 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 = { diff --git a/lib/main.dart b/lib/main.dart index e4961d5..c5591af 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,9 +1,11 @@ import 'package:car_customer_app/config/customer_dependencies.dart'; import 'package:car_customer_app/config/customer_routes.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'; @@ -11,7 +13,7 @@ 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/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'; @@ -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/views/dashboard/dashboard_page.dart b/lib/views/dashboard/dashboard_page.dart index ebe57cf..bfcfffa 100644 --- a/lib/views/dashboard/dashboard_page.dart +++ b/lib/views/dashboard/dashboard_page.dart @@ -1,6 +1,12 @@ import 'dart:async'; import 'package:car_customer_app/views/dashboard/fragments/my_requests_fragment.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/theme/colors.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/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:car_customer_app/views/dashboard/fragments/ads_fragment.dart'; @@ -10,7 +16,7 @@ import 'package:car_customer_app/views/dashboard/widgets/bottom_nav_bar.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/models/widgets_models.dart'; +import 'package:mc_common_app/models/general/widgets_models.dart'; import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; @@ -45,6 +51,7 @@ class _DashboardPageState extends State { AdVM adVM = Provider.of(context, listen: false); AppointmentsVM appointmentsVM = Provider.of(context, listen: false); RequestsVM requestsVM = Provider.of(context, listen: false); + ChatVM chatVM = Provider.of(context, listen: false); if (appointmentsVM.myAppointments.isEmpty) { await appointmentsVM.getMyAppointments(); } @@ -58,7 +65,7 @@ class _DashboardPageState extends State { await adVM.getExploreAds(); } if (requestsVM.myRequests.isEmpty) { - await requestsVM.getMyRequests(); + await requestsVM.getRequests(appType: AppType.customer); } if (adVM.vehicleTypes.isEmpty) { @@ -68,6 +75,8 @@ class _DashboardPageState extends State { if (adVM.vehicleAdsDurations.isEmpty) { await adVM.getVehicleAdsDuration(); } + + await chatVM.buildHubConnection(); adVM.updateVehicleAdDurationId( SelectionModel( selectedId: adVM.vehicleAdsDurations.first.id ?? 0, @@ -123,7 +132,17 @@ class _DashboardPageState extends State { }, actions: [ (isHomePage - ? MyAssets.notificationsBellIcon.buildSvg().onPress(() {}) + ? Row( + children: [ + "${AppState().currentAppType}".toText(color: MyColors.darkTextColor).onPress(() { + print("myId: ${AppState().getUser.data!.userInfo!.userId}"); + }), + 10.width, + MyAssets.notificationsBellIcon.buildSvg().onPress(() {}), + 15.width, + Icon(Icons.message, color: MyColors.darkTextColor).onPress(() {}), + ], + ) : InkWell( onTap: () async { if (dashboardVM.selectedNavbarBarIndex == 3) { diff --git a/lib/views/dashboard/fragments/my_requests_fragment.dart b/lib/views/dashboard/fragments/my_requests_fragment.dart index e5aa41f..2929f7b 100644 --- a/lib/views/dashboard/fragments/my_requests_fragment.dart +++ b/lib/views/dashboard/fragments/my_requests_fragment.dart @@ -33,7 +33,7 @@ class MyRequestsFragment extends StatelessWidget { 8.height, Expanded( child: RefreshIndicator( - onRefresh: () async => await requestsVM.getMyRequests(isNeedToRebuild: true), + onRefresh: () async => await requestsVM.getRequests(isNeedToRebuild: true, appType: AppType.customer), child: requestsVM.state == ViewState.busy ? const Center(child: CircularProgressIndicator()) : requestsVM.myFilteredRequests.isEmpty @@ -45,12 +45,12 @@ class MyRequestsFragment extends StatelessWidget { ) : ListView.separated( itemBuilder: (context, index) { - return RequestItem(request: requestsVM.myRequests[index]); + return RequestItem(request: requestsVM.myFilteredRequests[index], appType: AppType.customer); }, separatorBuilder: (context, index) { return 16.height; }, - itemCount: requestsVM.myRequests.length, + itemCount: requestsVM.myFilteredRequests.length, padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16, top: 8), ), )) diff --git a/lib/views/dashboard/widgets/bottom_nav_bar.dart b/lib/views/dashboard/widgets/bottom_nav_bar.dart index 9897604..802a004 100644 --- a/lib/views/dashboard/widgets/bottom_nav_bar.dart +++ b/lib/views/dashboard/widgets/bottom_nav_bar.dart @@ -40,8 +40,8 @@ class CustomBottomNavbar extends StatelessWidget { label: LocaleKeys.ads.tr(), ), BottomNavigationBarItem( - icon: SvgPicture.asset(MyAssets.settingsIcon).paddingAll(5), - activeIcon: SvgPicture.asset(MyAssets.settingsIcon, color: MyColors.darkIconColor).paddingAll(5), + icon: SvgPicture.asset(MyAssets.icRequests).paddingAll(5), + activeIcon: SvgPicture.asset(MyAssets.icRequests, color: MyColors.darkIconColor).paddingAll(5), label: LocaleKeys.requests.tr(), ), ], diff --git a/lib/views/dashboard/widgets/drawer_widget.dart b/lib/views/dashboard/widgets/drawer_widget.dart index 36a0cd3..f29082a 100644 --- a/lib/views/dashboard/widgets/drawer_widget.dart +++ b/lib/views/dashboard/widgets/drawer_widget.dart @@ -1,3 +1,4 @@ +import 'package:mc_common_app/models/user_models/image_response.dart'; import 'package:mc_common_app/view_models/dashboard_view_model_customer.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; @@ -8,7 +9,6 @@ import 'package:mc_common_app/config/routes.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/user/image_response.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'; diff --git a/lib/views/provider/sheet/items_list_sheet.dart b/lib/views/provider/sheet/items_list_sheet.dart index 2b6feeb..57ffc11 100644 --- a/lib/views/provider/sheet/items_list_sheet.dart +++ b/lib/views/provider/sheet/items_list_sheet.dart @@ -1,8 +1,8 @@ +import 'package:mc_common_app/models/services_models/item_model.dart'; import 'package:mc_common_app/view_models/appointments_view_model.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; -import 'package:mc_common_app/models/services/item_model.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/widgets/empty_widget.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart';