diff --git a/android/build.gradle b/android/build.gradle index 1c8bb53..543cb25 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.8.0' repositories { google() mavenCentral() diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index bc6a58a..f371643 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip diff --git a/lib/common/item_model.dart b/lib/common/item_model.dart deleted file mode 100644 index 6bfd075..0000000 --- a/lib/common/item_model.dart +++ /dev/null @@ -1,100 +0,0 @@ -// To parse this JSON data, do -// -// final itemModel = itemModelFromJson(jsonString); - -import 'dart:convert'; - -ItemModel itemModelFromJson(String str) => ItemModel.fromJson(json.decode(str)); - -String itemModelToJson(ItemModel data) => json.encode(data.toJson()); - -class ItemModel { - final int? messageStatus; - final int? totalItemsCount; - final List? data; - final String? message; - - ItemModel({ - this.messageStatus, - this.totalItemsCount, - this.data, - this.message, - }); - - factory ItemModel.fromJson(Map json) => ItemModel( - messageStatus: json["messageStatus"], - totalItemsCount: json["totalItemsCount"], - data: json["data"] == null ? [] : List.from(json["data"]!.map((x) => ItemData.fromJson(x))), - message: json["message"], - ); - - Map toJson() => { - "messageStatus": messageStatus, - "totalItemsCount": totalItemsCount, - "data": data == null ? [] : List.from(data!.map((x) => x.toJson())), - "message": message, - }; -} - -class ItemData { - final int? id; - final String? name; - final String? price; - final String? manufactureDate; - final String? description; - final dynamic pictureUrl; - final int? companyId; - final int? serviceProviderServiceId; - final bool? isActive; - final bool? isAllowAppointment; - final bool? isAppointmentCompanyLoc; - final bool? isAppointmentCustomerLoc; - bool? isUpdate; - - ItemData({ - this.id, - this.name, - this.price, - this.manufactureDate, - this.description, - this.pictureUrl, - this.companyId, - this.serviceProviderServiceId, - this.isActive, - this.isAllowAppointment, - this.isAppointmentCompanyLoc, - this.isAppointmentCustomerLoc, - this.isUpdate, - }); - - factory ItemData.fromJson(Map json) => ItemData( - id: json["id"], - name: json["name"], - price: json["price"].toString(), - manufactureDate: json["manufactureDate"], - description: json["description"], - pictureUrl: json["pictureUrl"], - companyId: json["companyID"], - serviceProviderServiceId: json["serviceProviderServiceID"], - isActive: json["isActive"], - isAllowAppointment: json["isAllowAppointment"], - isAppointmentCompanyLoc: json["isAppointmentCompanyLoc"], - isAppointmentCustomerLoc: json["isAppointmentCustomerLoc"], - isUpdate: false, - ); - - Map toJson() => { - "id": id, - "name": name, - "price": price, - "manufactureDate": manufactureDate, - "description": description, - "pictureUrl": pictureUrl, - "companyID": companyId, - "serviceProviderServiceID": serviceProviderServiceId, - "isActive": isActive, - "isAllowAppointment": isAllowAppointment, - "isAppointmentCompanyLoc": isAppointmentCompanyLoc, - "isAppointmentCustomerLoc": isAppointmentCustomerLoc, - }; -} diff --git a/lib/common/schedule_model.dart b/lib/common/schedule_model.dart deleted file mode 100644 index 8d4f423..0000000 --- a/lib/common/schedule_model.dart +++ /dev/null @@ -1,81 +0,0 @@ -// To parse this JSON data, do -// -// final schedule = scheduleFromJson(jsonString); - -import 'dart:convert'; - -Schedule scheduleFromJson(String str) => Schedule.fromJson(json.decode(str)); - -String scheduleToJson(Schedule data) => json.encode(data.toJson()); - -class Schedule { - final int? messageStatus; - final int? totalItemsCount; - final List? data; - final String? message; - - Schedule({ - this.messageStatus, - this.totalItemsCount, - this.data, - this.message, - }); - - factory Schedule.fromJson(Map json) => Schedule( - messageStatus: json["messageStatus"], - totalItemsCount: json["totalItemsCount"], - data: json["data"] == null ? [] : List.from(json["data"]!.map((x) => ScheduleData.fromJson(x))), - message: json["message"], - ); - - Map toJson() => { - "messageStatus": messageStatus, - "totalItemsCount": totalItemsCount, - "data": data == null ? [] : List.from(data!.map((x) => x.toJson())), - "message": message, - }; -} - -class ScheduleData { - final int? id; - final int? branchId; - final DateTime? fromDate; - final DateTime? toDate; - final String? startTime; - final String? endTime; - final int? slotDurationMinute; - final int? perSlotAppointment; - - ScheduleData({ - this.id, - this.branchId, - this.fromDate, - this.toDate, - this.startTime, - this.endTime, - this.slotDurationMinute, - this.perSlotAppointment, - }); - - factory ScheduleData.fromJson(Map json) => ScheduleData( - id: json["id"], - branchId: json["branchID"], - fromDate: json["fromDate"] == null ? null : DateTime.parse(json["fromDate"]), - toDate: json["toDate"] == null ? null : DateTime.parse(json["toDate"]), - startTime: json["startTime"], - endTime: json["endTime"], - slotDurationMinute: json["slotDurationMinute"], - perSlotAppointment: json["perSlotAppointment"], - ); - - Map toJson() => { - "id": id, - "branchID": branchId, - "fromDate": fromDate?.toIso8601String(), - "toDate": toDate?.toIso8601String(), - "startTime": startTime, - "endTime": endTime, - "slotDurationMinute": slotDurationMinute, - "perSlotAppointment": perSlotAppointment, - }; -} diff --git a/lib/common/subscription_model.dart b/lib/common/subscription_model.dart deleted file mode 100644 index d192566..0000000 --- a/lib/common/subscription_model.dart +++ /dev/null @@ -1,125 +0,0 @@ -// To parse this JSON data, do -// -// final subscription = subscriptionFromJson(jsonString); - -import 'dart:convert'; - -Subscription subscriptionFromJson(String str) => Subscription.fromJson(json.decode(str)); - -String subscriptionToJson(Subscription data) => json.encode(data.toJson()); - -class SubscriptionModel { - SubscriptionModel({ - this.messageStatus, - this.totalItemsCount, - this.data, - this.message, - }); - - int? messageStatus; - int? totalItemsCount; - List? data; - String? message; - - factory SubscriptionModel.fromJson(Map json) => SubscriptionModel( - messageStatus: json["messageStatus"], - totalItemsCount: json["totalItemsCount"], - data: json["data"] == null ? [] : List.from(json["data"]!.map((x) => Subscription.fromJson(x))), - message: json["message"], - ); - - Map toJson() => { - "messageStatus": messageStatus, - "totalItemsCount": totalItemsCount, - "data": data == null ? [] : List.from(data!.map((x) => x.toJson())), - "message": message, - }; -} - -class Subscription { - Subscription({ - this.id, - this.name, - this.description, - this.durationName, - this.durationDays, - this.price, - this.currency, - this.numberOfBranches, - this.numberOfSubUsers, - this.numberOfAds, - this.countryId, - this.countryName, - this.isSubscribed, - this.subscriptionAppliedId, - this.serviceProviderId, - this.dateStart, - this.dateEnd, - this.isExpired, - this.isActive, - }); - - int? id; - String? name; - String? description; - String? durationName; - int? durationDays; - double? price; - String? currency; - int? numberOfBranches; - int? numberOfSubUsers; - int? numberOfAds; - int? countryId; - String? countryName; - bool? isSubscribed; - int? subscriptionAppliedId; - int? serviceProviderId; - DateTime? dateStart; - DateTime? dateEnd; - bool? isExpired; - bool? isActive; - - factory Subscription.fromJson(Map json) => Subscription( - id: json["id"], - name: json["name"], - description: json["description"], - durationName: json["durationName"], - durationDays: json["durationDays"], - price: json["price"]?.toDouble(), - currency: json["currency"], - numberOfBranches: json["numberOfBranches"], - numberOfSubUsers: json["numberOfSubUsers"], - numberOfAds: json["numberOfAds"], - countryId: json["countryID"], - countryName: json["countryName"]!, - isSubscribed: json["isSubscribed"], - subscriptionAppliedId: json["subscriptionAppliedID"], - serviceProviderId: json["serviceProviderID"], - dateStart: json["dateStart"] == null ? null : DateTime.parse(json["dateStart"]), - dateEnd: json["dateEnd"] == null ? null : DateTime.parse(json["dateEnd"]), - isExpired: json["isExpired"], - isActive: json["isActive"], - ); - - Map toJson() => { - "id": id, - "name": name, - "description": description, - "durationName": durationName, - "durationDays": durationDays, - "price": price, - "currency": currency, - "numberOfBranches": numberOfBranches, - "numberOfSubUsers": numberOfSubUsers, - "numberOfAds": numberOfAds, - "countryID": countryId, - "countryName": countryName, - "isSubscribed": isSubscribed, - "subscriptionAppliedID": subscriptionAppliedId, - "serviceProviderID": serviceProviderId, - "dateStart": dateStart?.toIso8601String(), - "dateEnd": dateEnd?.toIso8601String(), - "isExpired": isExpired, - "isActive": isActive, - }; -} diff --git a/lib/common/widget/checkbox_with_title_desc.dart b/lib/common/widget/checkbox_with_title_desc.dart deleted file mode 100644 index 99088aa..0000000 --- a/lib/common/widget/checkbox_with_title_desc.dart +++ /dev/null @@ -1,40 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:mc_common_app/extensions/string_extensions.dart'; -import 'package:mc_common_app/theme/colors.dart'; - -class CheckBoxWithTitleDescription extends StatelessWidget { - bool isSelected; - String title, description; - Function(bool) onSelection; - - CheckBoxWithTitleDescription({required this.isSelected, required this.title, required this.description, required this.onSelection, Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return SizedBox( - width: double.infinity, - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Checkbox( - value: isSelected, - onChanged: (bool? v) { - onSelection(v ?? false); - }, - ), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - title.toText(fontSize: 14, isBold: true), - description.toText(fontSize: 12, color: MyColors.lightTextColor), - ], - ), - ), - ], - ), - ); - } -} diff --git a/lib/common/widget/empty_widget.dart b/lib/common/widget/empty_widget.dart deleted file mode 100644 index 3e4cac0..0000000 --- a/lib/common/widget/empty_widget.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:mc_common_app/extensions/string_extensions.dart'; - -class EmptyWidget extends StatelessWidget { - const EmptyWidget({Key? key}) : super(key: key); - - @override - Widget build(BuildContext context) { - return Center(child: "No Data Found".toText()); - } -} diff --git a/lib/config/provider_dependencies.dart b/lib/config/provider_dependencies.dart index 09030bd..7b370af 100644 --- a/lib/config/provider_dependencies.dart +++ b/lib/config/provider_dependencies.dart @@ -2,11 +2,8 @@ import 'package:car_provider_app/repositories/branch_repo.dart'; import 'package:car_provider_app/repositories/items_repo.dart'; import 'package:car_provider_app/repositories/schedule_repo.dart'; import 'package:car_provider_app/repositories/subscription_repo.dart'; -import 'package:mc_common_app/api/api_client.dart'; import 'package:mc_common_app/config/dependencies.dart'; -import 'package:mc_common_app/repositories/common_repo.dart'; -import 'package:mc_common_app/services/services.dart'; class ProviderAppDependencies { static void addDependencies() { diff --git a/lib/config/provider_routes.dart b/lib/config/provider_routes.dart index bcd3f82..b6c1765 100644 --- a/lib/config/provider_routes.dart +++ b/lib/config/provider_routes.dart @@ -18,9 +18,12 @@ import 'package:car_provider_app/views/settings/services/services_list_page.dart import 'package:car_provider_app/views/subscriptions/my_subscritions_page.dart'; import 'package:car_provider_app/views/subscriptions/subscriptions_page.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/model/branch2.dart'; import 'package:flutter/material.dart'; +import 'package:mc_common_app/views/advertisement/ads_detail_view.dart'; +import 'package:mc_common_app/views/advertisement/create_ad_view.dart'; import '../views/dashboard/dashboard_page.dart'; @@ -55,11 +58,14 @@ class ProviderAppRoutes { static final Map routes = { //Home page AppRoutes.dashboard: (context) => const DashboardPage(), + AppRoutes.adsDetailView: (context) => AdsDetailView(adDetails: ModalRoute.of(context)!.settings.arguments as AdDetailsModel), + AppRoutes.createAdView: (context) => const CreateAdView(), + //setting defineLicense: (context) => DefineLicensePage(), dealershipSetting: (context) => DealershipPage(), - branchList: (context) => BranchListPage(), + // branchList: (context) => BranchListPage(), defineBranch: (context) => DefineBranchPage((ModalRoute.of(context)!.settings.arguments) == null ? null : (ModalRoute.of(context)!.settings.arguments as ServiceProviderBranch)), branchDetail: (context) => BranchDetailPage(ModalRoute.of(context)!.settings.arguments as ServiceProviderBranch), @@ -84,7 +90,7 @@ class ProviderAppRoutes { createServices3: (context) => CreateServicesPage3((ModalRoute.of(context)!.settings.arguments) == null ? null : (ModalRoute.of(context)!.settings.arguments as CreateBranchModel)), //Schedules - schedulesList: (context) => const SchedulesListPage(), + schedulesList: (context) => SchedulesListPage((ModalRoute.of(context)!.settings.arguments) == null ? null : (ModalRoute.of(context)!.settings.arguments as String)), addSchedule: (context) => AddSchedulesPage(), }; } diff --git a/lib/main.dart b/lib/main.dart index 9617e09..57b2b67 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -16,11 +16,13 @@ import 'package:mc_common_app/classes/consts.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/repositories/ads_repo.dart'; import 'package:mc_common_app/repositories/common_repo.dart'; import 'package:mc_common_app/repositories/user_repo.dart'; -import 'package:mc_common_app/services/services.dart'; +import 'package:mc_common_app/services/common_services.dart'; import 'package:mc_common_app/theme/app_theme.dart'; import 'package:mc_common_app/utils/enums.dart'; +import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/view_models/base_view_model.dart'; import 'package:mc_common_app/view_models/user_view_model.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; @@ -43,7 +45,7 @@ Future main() async { ChangeNotifierProvider( create: (_) => DashboardVM( userRepo: injector.get(), - commonServices: injector.get(), + commonServices: injector.get(), ), ), ChangeNotifierProvider( @@ -59,7 +61,7 @@ Future main() async { ChangeNotifierProvider( create: (_) => ServiceVM( branchRepo: injector.get(), - commonServices: injector.get(), + commonServices: injector.get(), commonRepo: injector.get(), ), ), @@ -69,11 +71,19 @@ Future main() async { ChangeNotifierProvider( create: (_) => ItemsVM( itemsRepo: injector.get(), - commonServices: injector.get(), + commonServices: injector.get(), ), ), ChangeNotifierProvider( - create: (_) => ScheduleVM(scheduleRepo: injector.get(), + create: (_) => ScheduleVM( + scheduleRepo: injector.get(), + ), + ), + ChangeNotifierProvider( + create: (_) => AdVM( + commonServices: injector.get(), + adsRepo: injector.get(), + commonRepo: injector.get(), ), ), ], diff --git a/lib/repositories/branch_repo.dart b/lib/repositories/branch_repo.dart index 9405733..99714b5 100644 --- a/lib/repositories/branch_repo.dart +++ b/lib/repositories/branch_repo.dart @@ -121,7 +121,6 @@ class BranchRepoImp implements BranchRepo { return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ServiceProviderDocument_Update, map, token: t); } - @override Future getBranchAndServices() async { var postParams = {"serviceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""}; diff --git a/lib/repositories/items_repo.dart b/lib/repositories/items_repo.dart index 7063974..7e05df1 100644 --- a/lib/repositories/items_repo.dart +++ b/lib/repositories/items_repo.dart @@ -1,10 +1,11 @@ -import 'package:car_provider_app/common/item_model.dart'; + import 'package:flutter/material.dart'; 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/m_response.dart'; +import 'package:mc_common_app/models/services/item_model.dart'; abstract class ItemsRepo { Future createServiceItems(Map map); diff --git a/lib/repositories/schedule_repo.dart b/lib/repositories/schedule_repo.dart index ff6e034..247ce4b 100644 --- a/lib/repositories/schedule_repo.dart +++ b/lib/repositories/schedule_repo.dart @@ -1,4 +1,4 @@ -import 'package:car_provider_app/common/schedule_model.dart'; +import 'package:mc_common_app/models/schedule_model.dart'; 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'; @@ -7,20 +7,26 @@ import 'package:mc_common_app/models/m_response.dart'; import 'package:mc_common_app/models/profile/services.dart'; abstract class ScheduleRepo { - Future getAllServices(); + Future getAllServices(String branchId); Future createSchedule(Map map); Future addServicesInSchedule(Map map); - Future getSchedules(); + Future updateSchedule(Map map); + + Future getSchedules(String branchId); + + Future updateServicesInSchedule(Map map); } class ScheduleRepoImp implements ScheduleRepo { @override - Future getAllServices() async { + Future getAllServices(String branchId) async { + print("braanchId $branchId"); + Map map = {"ProviderBranchID": branchId}; String t = AppState().getUser.data!.accessToken ?? ""; - return await injector.get().getJsonForObject((json) => Services.fromJson(json), ApiConsts.Services_Get, token: t); + return await injector.get().getJsonForObject((json) => Services.fromJson(json), ApiConsts.getServicesOfBranch, token: t, queryParameters: map); } @override @@ -36,8 +42,21 @@ class ScheduleRepoImp implements ScheduleRepo { } @override - Future getSchedules() async { + Future getSchedules(String branchId) async { + Map map = {"ServiceProviderBranchID": branchId}; + String t = AppState().getUser.data!.accessToken ?? ""; + return await injector.get().getJsonForObject((json) => Schedule.fromJson(json), ApiConsts.getSchedule, token: t, queryParameters: map); + } + + @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().getJsonForObject((json) => Schedule.fromJson(json), ApiConsts.getSchedule, token: t); + return await injector.get().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateGroup, map, token: t); } } diff --git a/lib/repositories/subscription_repo.dart b/lib/repositories/subscription_repo.dart index d685127..7750b39 100644 --- a/lib/repositories/subscription_repo.dart +++ b/lib/repositories/subscription_repo.dart @@ -1,9 +1,10 @@ -import 'package:car_provider_app/common/subscription_model.dart'; + 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/m_response.dart'; +import 'package:mc_common_app/models/subscription_model.dart'; abstract class SubscriptionRepo { Future getAllSubscriptions(String? serviceProviderID); diff --git a/lib/view_models/dashboard_view_model.dart b/lib/view_models/dashboard_view_model.dart index 98b7881..c81ba2f 100644 --- a/lib/view_models/dashboard_view_model.dart +++ b/lib/view_models/dashboard_view_model.dart @@ -7,14 +7,14 @@ import 'package:mc_common_app/classes/app_state.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/repositories/user_repo.dart'; -import 'package:mc_common_app/services/services.dart'; +import 'package:mc_common_app/services/common_services.dart'; import 'package:mc_common_app/utils/location/Location.dart'; import 'package:mc_common_app/utils/shared_prefrence.dart'; import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/view_models/base_view_model.dart'; class DashboardVM extends BaseVM { - final CommonServices commonServices; + final CommonAppServices commonServices; final UserRepo userRepo; DashboardVM({required this.commonServices, required this.userRepo}); diff --git a/lib/view_models/items_view_model.dart b/lib/view_models/items_view_model.dart index 29bacfc..0fe5ada 100644 --- a/lib/view_models/items_view_model.dart +++ b/lib/view_models/items_view_model.dart @@ -1,9 +1,9 @@ import 'dart:io'; -import 'package:car_provider_app/common/item_model.dart'; import 'package:car_provider_app/repositories/items_repo.dart'; import 'package:mc_common_app/models/m_response.dart'; -import 'package:mc_common_app/services/services.dart'; +import 'package:mc_common_app/models/services/item_model.dart'; +import 'package:mc_common_app/services/common_services.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/view_models/base_view_model.dart'; @@ -11,7 +11,7 @@ import 'package:file_picker/file_picker.dart'; class ItemsVM extends BaseVM { final ItemsRepo itemsRepo; - final CommonServices commonServices; + final CommonAppServices commonServices; ItemsVM({required this.itemsRepo, required this.commonServices}); diff --git a/lib/view_models/schedule_view_model.dart b/lib/view_models/schedule_view_model.dart index 3e05e7d..037ae61 100644 --- a/lib/view_models/schedule_view_model.dart +++ b/lib/view_models/schedule_view_model.dart @@ -1,4 +1,4 @@ -import 'package:car_provider_app/common/schedule_model.dart'; +import 'package:mc_common_app/models/schedule_model.dart'; import 'package:car_provider_app/repositories/schedule_repo.dart'; import 'package:car_provider_app/views/settings/schedule/widgets/chips_picker_item.dart'; import 'package:mc_common_app/models/m_response.dart'; @@ -6,6 +6,16 @@ import 'package:mc_common_app/models/profile/services.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/view_models/base_view_model.dart'; +List initDaysList = [ + PickerItem(id: 1, title: "Monday", isSelected: false), + PickerItem(id: 2, title: "Tuesday", isSelected: false), + PickerItem(id: 3, title: "Wednesday", isSelected: false), + PickerItem(id: 4, title: "Thursday", isSelected: false), + PickerItem(id: 5, title: "Friday", isSelected: false), + PickerItem(id: 6, title: "Saturday", isSelected: false), + PickerItem(id: 7, title: "Sunday", isSelected: false), +]; + class ScheduleVM extends BaseVM { ScheduleRepo scheduleRepo; @@ -20,14 +30,24 @@ class ScheduleVM extends BaseVM { setState(ViewState.idle); } - getAllServices() async { - if (servicesList == null) { - Services services = await scheduleRepo.getAllServices(); - if (services.messageStatus == 1) { - servicesList = services.data; + getAllServices(String branchId, ScheduleData selectedSchedule) async { + // if (servicesList == null) { + servicesList = null; + Services services = await scheduleRepo.getAllServices(branchId); + if (services.messageStatus == 1) { + servicesList = services.data; + if (selectedSchedule.id != null) { + for (var element in servicesList!) { + for (var innerElement in selectedSchedule.scheduleServices!) { + if (element.id == innerElement.providerServiceId) { + element.isSelected = true; + } + } + } } - setState(ViewState.idle); } + setState(ViewState.idle); + // } } filterSelectedServices() { @@ -44,27 +64,15 @@ class ScheduleVM extends BaseVM { //Days List intiDays() { - List initDays = [ - PickerItem(id: 1, title: "Monday", isSelected: false), - PickerItem(id: 2, title: "Tuesday", isSelected: false), - PickerItem(id: 3, title: "Wednesday", isSelected: false), - PickerItem(id: 4, title: "Thursday", isSelected: false), - PickerItem(id: 5, title: "Friday", isSelected: false), - PickerItem(id: 6, title: "Saturday", isSelected: false), - PickerItem(id: 7, title: "Sunday", isSelected: false), - ]; - if (selectedDaysItems.isNotEmpty) { - for (var element in selectedDaysItems) { - if (element.isSelected ?? false) { - for (var innerElement in initDays) { - if (element.id == innerElement.id) { - innerElement.isSelected = true; - } - } + for (var element in initDaysList) { + element.isSelected = false; + for (var innerElement in selectedDaysItems) { + if (element.id == innerElement.id) { + element.isSelected = true; } } } - return initDays; + return initDaysList; } filterDays(List picked) { @@ -87,8 +95,19 @@ class ScheduleVM extends BaseVM { return response; } - getSchedules() async { - schedule = await scheduleRepo.getSchedules(); + getSchedules(String branchId) async { + schedule = null; + schedule = await scheduleRepo.getSchedules(branchId); setState(ViewState.idle); } + + Future updateSchedule(Map map) async { + MResponse response = await scheduleRepo.updateSchedule(map); + return response; + } + + Future updateServicesInSchedule(Map map) async { + MResponse response = await scheduleRepo.updateServicesInSchedule(map); + return response; + } } diff --git a/lib/view_models/service_view_model.dart b/lib/view_models/service_view_model.dart index 67644e7..f23885e 100644 --- a/lib/view_models/service_view_model.dart +++ b/lib/view_models/service_view_model.dart @@ -9,7 +9,7 @@ import 'package:mc_common_app/models/profile/services.dart'; import 'package:mc_common_app/models/user/cities.dart'; import 'package:mc_common_app/models/user/country.dart'; import 'package:mc_common_app/repositories/common_repo.dart'; -import 'package:mc_common_app/services/services.dart'; +import 'package:mc_common_app/services/common_services.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/view_models/base_view_model.dart'; @@ -18,7 +18,7 @@ import 'package:file_picker/file_picker.dart'; class ServiceVM extends BaseVM { final BranchRepo branchRepo; - final CommonServices commonServices; + final CommonAppServices commonServices; final CommonRepo commonRepo; ServiceVM({required this.branchRepo, required this.commonServices, required this.commonRepo}); diff --git a/lib/view_models/subscriptions_view_model.dart b/lib/view_models/subscriptions_view_model.dart index 3609798..6992490 100644 --- a/lib/view_models/subscriptions_view_model.dart +++ b/lib/view_models/subscriptions_view_model.dart @@ -1,5 +1,6 @@ -import 'package:car_provider_app/common/subscription_model.dart'; + import 'package:car_provider_app/repositories/subscription_repo.dart'; +import 'package:mc_common_app/models/subscription_model.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/view_models/base_view_model.dart'; import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; diff --git a/lib/views/dashboard/dashboard_page.dart b/lib/views/dashboard/dashboard_page.dart index 9f2d7a7..0f15a96 100644 --- a/lib/views/dashboard/dashboard_page.dart +++ b/lib/views/dashboard/dashboard_page.dart @@ -1,14 +1,20 @@ +import 'dart:async'; + import 'package:badges/badges.dart' as b; import 'package:car_provider_app/view_models/dashboard_view_model.dart'; +import 'package:car_provider_app/view_models/service_view_model.dart'; +import 'package:car_provider_app/views/dashboard/fragments/ads_fragment.dart'; import 'package:car_provider_app/views/dashboard/fragments/appoinment_fragment.dart'; import 'package:car_provider_app/views/dashboard/widget/drawer_widget.dart'; +import 'package:car_provider_app/views/settings/branch/branch_list_page.dart'; 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/theme/colors.dart'; +import 'package:mc_common_app/view_models/ad_view_model.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/common_widgets/bottom_nav_bar.dart'; import 'package:provider/provider.dart'; @@ -30,40 +36,68 @@ class _DashboardPageState extends State { void initState() { super.initState(); dashboardVM = Provider.of(context, listen: false); + scheduleMicrotask(() { + _onRefresh(); + }); + } + + Future _onRefresh() async { + context.read().populateAdsFilterList(); + context.read().getBranchAndServices(); + AdVM adVm = Provider.of(context, listen: false); + if (adVm.myAds.isEmpty) { + await adVm.getMyAds(); + } + if (adVm.exploreAds.isEmpty) { + await adVm.getExploreAds(); + } } @override Widget build(BuildContext context) { List fragments = [ - HomeFragment( - onTap: () { - _scaffoldKey.currentState!.openDrawer(); + BranchListPage( + onBackButtonTapped: () { + dashboardVM.updateIndex(2); }, ), - const AppointmentFragment(), - HomeFragment( - onTap: () { - _scaffoldKey.currentState!.openDrawer(); + AppointmentFragment( + onBackButtonTapped: () { + dashboardVM.updateIndex(2); }, ), HomeFragment( onTap: () { _scaffoldKey.currentState!.openDrawer(); }, + onRefresh: () async { + _onRefresh(); + }, + ), + AdsFragment( + onBackButtonTapped: () { + dashboardVM.updateIndex(2); + }, + ), + RequestListFragment( + onBackButtonTapped: () { + dashboardVM.updateIndex(2); + }, ), - RequestListFragment(), ]; return Scaffold( key: _scaffoldKey, drawer: CustomDrawer(dashboardVM: dashboardVM), - body: Consumer(builder: (context, model, _) { - return fragments[dashboardVM.selectedNavbarBarIndex]; - }), + // body: Consumer(builder: (context, model, _) { + // return fragments[dashboardVM.selectedNavbarBarIndex]; + // }), + body: fragments[context.watch().selectedNavbarBarIndex], bottomNavigationBar: CustomBottomNavbar( onSelected: (i) { dashboardVM.updateIndex(i); }, + isProvider: true, selectedNavbarBarIndex: dashboardVM.selectedNavbarBarIndex, ), ); diff --git a/lib/views/dashboard/fragments/ads_fragment.dart b/lib/views/dashboard/fragments/ads_fragment.dart new file mode 100644 index 0000000..a12a619 --- /dev/null +++ b/lib/views/dashboard/fragments/ads_fragment.dart @@ -0,0 +1,130 @@ +import 'package:flutter/material.dart'; +import 'package:mc_common_app/classes/app_state.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/navigator.dart'; +import 'package:mc_common_app/view_models/ad_view_model.dart'; +import 'package:mc_common_app/views/advertisement/ads_list.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/categories_list.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; +import 'package:provider/provider.dart'; +import 'package:easy_localization/easy_localization.dart'; + +class AdsFragment extends StatelessWidget { + bool isNeedAppBar; + VoidCallback onBackButtonTapped; + + AdsFragment({Key? key, this.isNeedAppBar = true, required this.onBackButtonTapped}) : super(key: key); + + Future onRefreshAds(BuildContext context) async { + AdVM adVM = context.read(); + await adVM.getExploreAds(); + await adVM.getMyAds(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: !isNeedAppBar + ? null + : CustomAppBar( + title: LocaleKeys.myServiceBranches.tr(), + onBackButtonTapped: onBackButtonTapped, + ), + body: Container( + color: MyColors.backgroundColor, + width: double.infinity, + height: double.infinity, + child: Column( + children: [ + 16.height, + Consumer( + builder: (BuildContext context, AdVM adVM, Widget? child) { + return Column( + children: [ + Row( + children: [ + Expanded( + child: ShowFillButton( + isFilled: adVM.isExploreAdsTapped, + maxHeight: 55, + title: "Explore Ads", + txtColor: adVM.isExploreAdsTapped ? MyColors.white : MyColors.darkTextColor, + onPressed: () { + print("ads: ${AppState().getUser.data!.accessToken}"); + adVM.updateIsExploreAds(true); + }, + ), + ), + 12.width, + Expanded( + child: ShowFillButton( + isFilled: !adVM.isExploreAdsTapped, + txtColor: !adVM.isExploreAdsTapped ? MyColors.white : MyColors.darkTextColor, + maxHeight: 55, + title: "My Ads", + onPressed: () { + adVM.updateIsExploreAds(false); + }, + ), + ), + ], + ).horPaddingMain(), + if (adVM.isExploreAdsTapped && adVM.exploreAds.isNotEmpty) ...[ + 16.height, + FiltersList(filterList: adVM.exploreAdsFilterOptions, onFilterTapped: (index, selectedFilterId) => adVM.applyFilterOnExploreAds(index: index), needLeftPadding: false) + .paddingOnly(left: 21), + ], + if (!adVM.isExploreAdsTapped && adVM.myAds.isNotEmpty) ...[ + 16.height, + FiltersList( + filterList: adVM.myAdsFilterOptions, + onFilterTapped: (index, selectedFilterId) => adVM.applyFilterOnMyAds(index: index, selectedFilterId: selectedFilterId), + needLeftPadding: false) + .paddingOnly(left: 21), + ], + ], + ); + }, + ), + 16.height, + Expanded( + child: RefreshIndicator( + onRefresh: () => onRefreshAds(context), + child: Consumer( + builder: (BuildContext context, AdVM adVM, Widget? child) { + return BuildAdsList( + isAdsFragment: true, + shouldShowAdStatus: !adVM.isExploreAdsTapped, + adsList: adVM.isExploreAdsTapped && adVM.exploreAdsFilteredList.isNotEmpty + ? adVM.exploreAdsFilteredList + : !adVM.isExploreAdsTapped && adVM.myAdsFilteredList.isNotEmpty + ? adVM.myAdsFilteredList + : [], + ); + }, + ), + ), + ) + ], + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: () { + context.read().getVehicleTypes(); + + navigateWithName(context, AppRoutes.createAdView); + }, + backgroundColor: MyColors.darkPrimaryColor, + child: const Icon( + Icons.add, + color: MyColors.white, + ), + ), + ); + } +} diff --git a/lib/views/dashboard/fragments/appoinment_fragment.dart b/lib/views/dashboard/fragments/appoinment_fragment.dart index d1b0ca5..5367af5 100644 --- a/lib/views/dashboard/fragments/appoinment_fragment.dart +++ b/lib/views/dashboard/fragments/appoinment_fragment.dart @@ -7,7 +7,9 @@ import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; class AppointmentFragment extends StatelessWidget { - const AppointmentFragment({Key? key}) : super(key: key); + VoidCallback onBackButtonTapped; + + AppointmentFragment({required this.onBackButtonTapped}); @override Widget build(BuildContext context) { @@ -15,7 +17,7 @@ class AppointmentFragment extends StatelessWidget { appBar: CustomAppBar( profileImageUrl: MyAssets.carBanner, title: "Appointments", - onTap: () {}, + onBackButtonTapped: onBackButtonTapped, actions: [ IconButton( onPressed: () {}, diff --git a/lib/views/dashboard/fragments/home_fragment.dart b/lib/views/dashboard/fragments/home_fragment.dart index 2552527..a043076 100644 --- a/lib/views/dashboard/fragments/home_fragment.dart +++ b/lib/views/dashboard/fragments/home_fragment.dart @@ -1,20 +1,26 @@ +import 'package:car_provider_app/views/dashboard/widget/my_service_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/extensions/int_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/ad_view_model.dart'; +import 'package:mc_common_app/views/advertisement/ads_list.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; -import 'package:mc_common_app/widgets/common_widgets/my_service_provider.dart'; import 'package:mc_common_app/widgets/common_widgets/view_all_widget.dart'; import 'package:badges/badges.dart' as b; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; +import 'package:provider/provider.dart'; import '../widget/appointment_slider_widget.dart'; class HomeFragment extends StatelessWidget { VoidCallback onTap; + RefreshCallback onRefresh; - HomeFragment({required this.onTap, Key? key}) : super(key: key); + HomeFragment({required this.onTap, required this.onRefresh, Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -48,30 +54,80 @@ class HomeFragment extends StatelessWidget { body: SizedBox( width: double.infinity, height: double.infinity, - child: SingleChildScrollView( - child: Padding( - padding: const EdgeInsets.only(top: 8, left: 21, right: 21, bottom: 21), + child: RefreshIndicator( + onRefresh: onRefresh, + child: SingleChildScrollView( child: Column( children: [ ViewAllWidget( title: 'Upcoming Appointment', subTitle: 'View All', onSubtitleTapped: () {}, - ), - const AppointmentSliderWidget(), + ).horPaddingMain(), + const AppointmentSliderWidget().horPaddingMain(), 21.height, ViewAllWidget( title: 'My Branches', subTitle: 'View All', onSubtitleTapped: () {}, + ).horPaddingMain(), + const ServiceProviderWidget().horPaddingMain(), + Consumer( + builder: (BuildContext context, AdVM adVM, Widget? child) { + if (adVM.state == ViewState.busy) { + return const Center(child: CircularProgressIndicator()); + } else { + return Column( + children: [ + if (adVM.myActiveAdsForHome.isNotEmpty) ...[ + Column( + children: [ + 15.height, + ViewAllWidget( + title: "My Active Ads", + subTitle: "View All", + onSubtitleTapped: () { + // context.read().onNavbarTapped(3); + // context.read().updateIsExploreAds(false); + }, + ).horPaddingMain(), + BuildAdsList( + shouldShowAdStatus: true, + isAdsFragment: false, + adsList: adVM.myActiveAdsForHome, + scrollPhysics: const NeverScrollableScrollPhysics(), + ), + ], + ) + ], + if (adVM.exploreAds.isNotEmpty) ...[ + Column( + children: [ + 15.height, + ViewAllWidget( + title: "My Recommended Ads", + subTitle: "View All", + onSubtitleTapped: () { + // context.read().onNavbarTapped(3); + // context.read().updateIsExploreAds(true); + // context.read().applyFilterOnExploreAds(index: 0); + }, + ).horPaddingMain(), + BuildAdsList( + shouldShowAdStatus: false, + adsList: adVM.exploreAds.length >= 3 ? adVM.exploreAds.take(3).toList() : adVM.exploreAds, + isAdsFragment: false, + scrollPhysics: const NeverScrollableScrollPhysics(), + ), + ], + ) + ] + ], + ); + } + }, ), - const ServiceProviderWidget(), 21.height, - ViewAllWidget( - title: 'Recommended Ads', - subTitle: 'View All', - onSubtitleTapped: () {}, - ), // const AdWidget( // count: 4, // ), diff --git a/lib/views/dashboard/fragments/request_list_fragment.dart b/lib/views/dashboard/fragments/request_list_fragment.dart index 66927d5..e296c76 100644 --- a/lib/views/dashboard/fragments/request_list_fragment.dart +++ b/lib/views/dashboard/fragments/request_list_fragment.dart @@ -14,7 +14,9 @@ import 'package:mc_common_app/widgets/tab/role_type_tab.dart'; import '../widget/request_list_card_widget.dart'; class RequestListFragment extends StatelessWidget { - RequestListFragment({Key? key}) : super(key: key); + VoidCallback onBackButtonTapped; + + RequestListFragment({required this.onBackButtonTapped, Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -22,7 +24,7 @@ class RequestListFragment extends StatelessWidget { appBar: CustomAppBar( profileImageUrl: MyAssets.carBanner, title: "Requests", - onTap: () {}, + onBackButtonTapped: onBackButtonTapped, actions: [ IconButton( onPressed: () {}, diff --git a/lib/views/dashboard/widget/drawer_widget.dart b/lib/views/dashboard/widget/drawer_widget.dart index cf64b42..a6388b5 100644 --- a/lib/views/dashboard/widget/drawer_widget.dart +++ b/lib/views/dashboard/widget/drawer_widget.dart @@ -19,7 +19,6 @@ import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; - class CustomDrawer extends StatefulWidget { final DashboardVM dashboardVM; @@ -144,14 +143,6 @@ class _CustomDrawerState extends State { ], ), ), - ListTile( - leading: SvgPicture.asset(MyAssets.icNotification, color: MyColors.darkPrimaryColor), - title: LocaleKeys.notifications.tr().toText(fontSize: 12), - ), - ListTile( - leading: SvgPicture.asset(MyAssets.icSettings, color: MyColors.darkPrimaryColor), - title: LocaleKeys.general.tr().toText(fontSize: 12), - ), ListTile( leading: SvgPicture.asset(MyAssets.nextIcon, color: MyColors.darkPrimaryColor), title: LocaleKeys.defineLicences.tr().toText(fontSize: 12), @@ -159,16 +150,9 @@ class _CustomDrawerState extends State { navigateWithName(context, ProviderAppRoutes.defineLicense); }, ), - ListTile( - leading: SvgPicture.asset(MyAssets.icCar, color: MyColors.darkPrimaryColor), - title: LocaleKeys.dealershipSettings.tr().toText(fontSize: 12), - onTap: () { - navigateWithName(context, ProviderAppRoutes.dealershipSetting); - }, - ), ListTile( leading: Image.asset( - MyAssets.icWorldPng, + MyAssets.icWorldPng, width: 20, height: 20, color: MyColors.darkPrimaryColor, diff --git a/lib/views/dashboard/widget/my_service_provider.dart b/lib/views/dashboard/widget/my_service_provider.dart new file mode 100644 index 0000000..8fdce1d --- /dev/null +++ b/lib/views/dashboard/widget/my_service_provider.dart @@ -0,0 +1,68 @@ +import 'package:car_provider_app/config/provider_routes.dart'; +import 'package:car_provider_app/generated/locale_keys.g.dart'; +import 'package:car_provider_app/view_models/service_view_model.dart'; +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/utils/enums.dart'; +import 'package:mc_common_app/utils/navigator.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; +import 'package:provider/provider.dart'; +import 'package:easy_localization/easy_localization.dart'; + +class ServiceProviderWidget extends StatelessWidget { + const ServiceProviderWidget({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return SizedBox( + width: double.infinity, + height: 140, + child: Consumer( + builder: (BuildContext context, ServiceVM model, Widget? child) { + if (model.state == ViewState.busy) { + return const Center(child: CircularProgressIndicator()); + } else { + return model.branchs!.data! == null + ? const Center(child: Text("No Branch Found")) + : model.branchs!.data!.serviceProviderBranch!.isEmpty + ? Center(child: Text(LocaleKeys.no_branch.tr())) + : ListView.builder( + itemCount: model.branchs!.data!.serviceProviderBranch!.length, + scrollDirection: Axis.horizontal, + shrinkWrap: true, + itemBuilder: (BuildContext context, int index) { + return SizedBox( + width: 90, + child: Column( + children: [ + Image.asset( + MyAssets.bnCar, + width: 80, + height: 80, + fit: BoxFit.cover, + ).toCircle(borderRadius: 100), + 8.height, + model.branchs!.data!.serviceProviderBranch![index].branchName!.toText( + fontSize: 14, + isBold: true, + textAlign: TextAlign.center, + ), + ], + ), + ).onPress( + () { + model.branchs!.data!.serviceProviderBranch![index].countryID = model.branchs!.data!.countryID; + model.branchs!.data!.serviceProviderBranch![index].countryName = model.branchs!.data!.countryName; + navigateWithName(context, ProviderAppRoutes.branchDetail, arguments: model.branchs!.data!.serviceProviderBranch![index]); + }, + ); + }, + ); + } + }, + ), + ); + } +} diff --git a/lib/views/settings/branch/branch_detail_page.dart b/lib/views/settings/branch/branch_detail_page.dart index 959abe9..6f87967 100644 --- a/lib/views/settings/branch/branch_detail_page.dart +++ b/lib/views/settings/branch/branch_detail_page.dart @@ -280,3 +280,6 @@ class BranchDetailPage extends StatelessWidget { ); } } + + + diff --git a/lib/views/settings/branch/branch_list_page.dart b/lib/views/settings/branch/branch_list_page.dart index 00ae035..c84f803 100644 --- a/lib/views/settings/branch/branch_list_page.dart +++ b/lib/views/settings/branch/branch_list_page.dart @@ -25,18 +25,18 @@ import 'package:provider/provider.dart'; class BranchListPage extends StatelessWidget { bool isNeedAppBar; + VoidCallback onBackButtonTapped; - BranchListPage({Key? key, this.isNeedAppBar = true}) : super(key: key); + BranchListPage({Key? key, this.isNeedAppBar = true, required this.onBackButtonTapped}) : super(key: key); @override Widget build(BuildContext context) { - ServiceVM branchVM = context.read(); - branchVM.getBranchAndServices(); return Scaffold( appBar: !isNeedAppBar ? null : CustomAppBar( title: LocaleKeys.myServiceBranches.tr(), + onBackButtonTapped: onBackButtonTapped, ), floatingActionButton: FloatingActionButton( child: const Icon( @@ -55,7 +55,7 @@ class BranchListPage extends StatelessWidget { if (model.state == ViewState.busy) { return const Center(child: CircularProgressIndicator()); } else { - return model.branchs!.data! == null + return model.branchs?.data == null ? const Center(child: Text("No Branch Found")) : model.branchs!.data!.serviceProviderBranch!.isEmpty ? Center(child: Text(LocaleKeys.no_branch.tr())) diff --git a/lib/views/settings/dealership_page.dart b/lib/views/settings/dealership_page.dart index 359fb82..374b1c5 100644 --- a/lib/views/settings/dealership_page.dart +++ b/lib/views/settings/dealership_page.dart @@ -29,7 +29,7 @@ class DealershipPage extends StatelessWidget { ), ListTile( leading: SvgPicture.asset( - MyAssets.icBranches, + MyAssets.requestsIcon, color: MyColors.darkPrimaryColor, ), title: LocaleKeys.defineBranches.tr().toText(fontSize: 12), diff --git a/lib/views/settings/schedule/add_schedules_page.dart b/lib/views/settings/schedule/add_schedules_page.dart index 11659cb..24a7fb7 100644 --- a/lib/views/settings/schedule/add_schedules_page.dart +++ b/lib/views/settings/schedule/add_schedules_page.dart @@ -8,7 +8,9 @@ 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/models/m_response.dart'; +import 'package:mc_common_app/models/schedule_model.dart'; import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/date_helper.dart'; import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; @@ -17,14 +19,46 @@ import 'package:provider/provider.dart'; import 'package:mc_common_app/widgets/bottom_sheet.dart'; class AddSchedulesPage extends StatelessWidget { - ScheduleVM? mModel; - String branchId = "", name = "", startDate = "", endDate = "", startTime = "", endTime = "", slotsTime = "", appointmentPerSlot = ""; + late ScheduleVM mModel; + String name = "", startDate = "", endDate = "", startTime = "", endTime = "", slotsTime = "", appointmentPerSlot = "", servicesGroupID = ""; + late ScheduleData scheduleData; AddSchedulesPage({Key? key}) : super(key: key); + setEditData() { + name = scheduleData.scheduleName ?? ""; + startDate = DateHelper.formatAsYearMonthDay(scheduleData.fromDate ?? DateTime.now()); + endDate = DateHelper.formatAsYearMonthDay(scheduleData.toDate ?? DateTime.now()); + startTime = scheduleData.startTime ?? ""; + endTime = scheduleData.endTime ?? ""; + slotsTime = scheduleData.slotDurationMinute.toString(); + appointmentPerSlot = scheduleData.perSlotAppointment.toString(); + + // mModel.selectedServicesItems.clear(); + scheduleData.scheduleServices?.forEach((element) { + mModel.selectedServicesItems.add(PickerItem(id: element.providerServiceId ?? 0, title: element.providerServiceName ?? "")); + }); + mModel.selectedDaysItems.clear(); + scheduleData.weeklyOffDays?.forEach((element) { + for (var daysElement in initDaysList) { + if (element.dayNumber == daysElement.id) { + daysElement.isSelected = true; + mModel.selectedDaysItems.add(daysElement); + } + } + }); + } + @override Widget build(BuildContext context) { - branchId = ModalRoute.of(context)!.settings.arguments as String; + mModel = context.read(); + scheduleData = ModalRoute.of(context)!.settings.arguments as ScheduleData; + mModel.getAllServices(scheduleData.branchId, scheduleData); + mModel.selectedServicesItems = []; + mModel.selectedDaysItems = []; + if (scheduleData.id != null) { + setEditData(); + } return Scaffold( appBar: const CustomAppBar( title: "Create Schedules", @@ -194,7 +228,11 @@ class AddSchedulesPage extends StatelessWidget { margin: const EdgeInsets.all(20), onPressed: () { if (validation(model)) { - createSchedule(context, model); + if (scheduleData.id != null) { + updateSchedule(context, model); + } else { + createSchedule(context, model); + } } }, ), @@ -212,28 +250,28 @@ class AddSchedulesPage extends StatelessWidget { Utils.showToast("Please enter valid schedule Name"); valid = false; } else if (model.selectedServicesItems.isEmpty) { - Utils.showToast(""); + Utils.showToast("Please select Services"); valid = false; } else if (startDate.isEmpty) { - Utils.showToast(""); + Utils.showToast("Please select start date"); valid = false; } else if (endDate.isEmpty) { - Utils.showToast(""); + Utils.showToast("Please select end date"); valid = false; } else if (model.selectedDaysItems.isEmpty) { - Utils.showToast(""); + Utils.showToast("Please off Days"); valid = false; } else if (startTime.isEmpty) { - Utils.showToast(""); + Utils.showToast("Please select start time"); valid = false; } else if (endTime.isEmpty) { - Utils.showToast(""); + Utils.showToast("Please select end time"); valid = false; } else if (slotsTime.isEmpty) { - Utils.showToast(""); + Utils.showToast("Please select slot time"); valid = false; } else if (appointmentPerSlot.isEmpty) { - Utils.showToast(""); + Utils.showToast("Please select appointment per slot"); valid = false; } return valid; @@ -246,7 +284,8 @@ class AddSchedulesPage extends StatelessWidget { } var map = { - "branchID": branchId, + "scheduleName": name, + "serviceProviderBranchID": scheduleData.branchId, "fromDate": startDate, "toDate": endDate, "startTime": startTime, @@ -266,7 +305,7 @@ class AddSchedulesPage extends StatelessWidget { } var map1 = { // "id": 0, - "branchAppointmentScheduleID": scheduleResponse.data["id"], + "branchAppointmentScheduleID": scheduleResponse.data, "serviceProviderServiceID": services, "serviceGroupDescription": "string" }; @@ -283,4 +322,51 @@ class AddSchedulesPage extends StatelessWidget { Utils.showToast("Something went wrong"); } } + + updateSchedule(BuildContext context, ScheduleVM model) async { + List days = []; + for (var element in model.selectedDaysItems) { + days.add(element.id); + } + + var map = { + "id": scheduleData.id, + "scheduleName": name, + "serviceProviderBranchID": scheduleData.branchId, + "fromDate": startDate, + "toDate": endDate, + "startTime": startTime, + "endTime": endDate, + "slotDurationMinute": slotsTime, + "perSlotAppointment": appointmentPerSlot, + "deliveryServiceType": 1, + "weeklyOffDays": days + }; + + Utils.showLoading(context); + MResponse scheduleResponse = await model.updateSchedule(map); + if (scheduleResponse.messageStatus == 1) { + List services = []; + for (var element in model.selectedServicesItems) { + services.add(element.id); + } + var map1 = { + // "id": scheduleData, + "branchAppointmentScheduleID": scheduleData.id, + "serviceProviderServiceID": services, + "serviceGroupDescription": "string", + }; + + MResponse servicesResponse = await model.updateServicesInSchedule(map1); + Utils.hideLoading(context); + if (servicesResponse.messageStatus == 1) { + Utils.showToast("Successfully schedule updated"); + } else { + Utils.showToast("Something went wrong while adding services in schedule"); + } + } else { + Utils.hideLoading(context); + Utils.showToast("Something went wrong"); + } + } } diff --git a/lib/views/settings/schedule/schedules_list_page.dart b/lib/views/settings/schedule/schedules_list_page.dart index 03a887d..7e36258 100644 --- a/lib/views/settings/schedule/schedules_list_page.dart +++ b/lib/views/settings/schedule/schedules_list_page.dart @@ -1,15 +1,40 @@ import 'package:car_provider_app/config/provider_routes.dart'; +import 'package:car_provider_app/view_models/schedule_view_model.dart'; 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/models/schedule_model.dart'; +import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/date_helper.dart'; import 'package:mc_common_app/utils/navigator.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:provider/provider.dart'; +import 'package:flutter_svg/flutter_svg.dart'; -class SchedulesListPage extends StatelessWidget { - const SchedulesListPage({Key? key}) : super(key: key); +class SchedulesListPage extends StatefulWidget { + String? branchId; + + SchedulesListPage(this.branchId, {Key? key}) : super(key: key); + + @override + State createState() => _SchedulesListPageState(); +} + +class _SchedulesListPageState extends State { + @override + void initState() { + // TODO: implement initState + super.initState(); + print("fffffffffkk"); + print(widget.branchId); + context.read().getSchedules(widget.branchId ?? ""); + } @override Widget build(BuildContext context) { - String branchId = ModalRoute.of(context)!.settings.arguments as String; return Scaffold( appBar: const CustomAppBar( title: "Schedules", @@ -18,18 +43,103 @@ class SchedulesListPage extends StatelessWidget { width: double.infinity, child: Column( children: [ - Expanded(child: Container()), + Expanded( + child: Consumer( + builder: (BuildContext context, value, Widget? child) { + return value.schedule == null + ? const Center( + child: CircularProgressIndicator(), + ) + : value.schedule!.data!.isEmpty + ? "No Schedule Found".toText() + : ListView.separated( + itemBuilder: (BuildContext context, int index) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: value.schedule!.data![index].scheduleName.toString().toText( + fontSize: 16, + isBold: true, + ), + ), + Padding( + padding: const EdgeInsets.all(4.0), + child: SvgPicture.asset( + MyAssets.icEdit, + width: 16, + height: 16, + ), + ).onPress(() { + value.schedule!.data![index].branchId = widget.branchId ?? ""; + navigateWithName(context, ProviderAppRoutes.addSchedule, arguments: value.schedule!.data![index]); + }), + ], + crossAxisAlignment: CrossAxisAlignment.center, + ), + 12.height, + showItem("Start Date:", DateHelper.formatAsDayMonthYear(value.schedule!.data![index].fromDate)), + showItem("End Date:", DateHelper.formatAsDayMonthYear(value.schedule!.data![index].toDate)), + showItem("Off Days:", DateHelper.formatAsDayMonthYear(value.schedule!.data![index].fromDate)), + showItem("Shift Start Time:", value.schedule!.data![index].startTime ?? ""), + showItem("Shift End Time:", value.schedule!.data![index].startTime ?? ""), + showItem("Slots Time:", value.schedule!.data![index].slotDurationMinute.toString() + " Mins"), + showItem("Appointments Per Slot:", value.schedule!.data![index].perSlotAppointment.toString()), + showItem("Off Days", offDays(value.schedule!.data![index])), + 12.height, + "Services:".toText(fontSize: 12, isBold: true, color: MyColors.lightTextColor), + Column( + children: value.schedule!.data![index].scheduleServices! + .map((element) => Container(child: element.providerServiceName.toString().toText(fontSize: 12, isBold: true))) + .toList(), + crossAxisAlignment: CrossAxisAlignment.start, + ) + ], + ).toWhiteContainer(width: double.infinity, allPading: 12); + }, + separatorBuilder: (BuildContext context, int index) { + return 12.height; + }, + padding: const EdgeInsets.all(20), + itemCount: value.schedule!.data!.length, + ); + }, + ), + ), ShowFillButton( title: "Create Schedule", maxWidth: double.infinity, margin: const EdgeInsets.all(20), onPressed: () { - navigateWithName(context, ProviderAppRoutes.addSchedule, arguments: branchId); + navigateWithName(context, ProviderAppRoutes.addSchedule, arguments: ScheduleData(branchId: widget.branchId ?? "")); }, - ) + ), ], ), ), ); } + + String offDays(ScheduleData scheduleData) { + String offDays = ""; + for (int i = 0; i < scheduleData.weeklyOffDays!.length; i++) { + offDays = offDays + initDaysList[scheduleData.weeklyOffDays![i].dayNumber! - 1].title; + if (i != scheduleData.weeklyOffDays!.length - 1) { + offDays = offDays + " , "; + } + } + return offDays; + } + + Widget showItem(String title, String value) { + return Row( + children: [ + title.toText(fontSize: 12, isBold: true, color: MyColors.lightTextColor), + 4.width, + value.toText(fontSize: 12, isBold: true), + ], + ); + } } diff --git a/lib/views/settings/schedule/widgets/select_services_sheet.dart b/lib/views/settings/schedule/widgets/select_services_sheet.dart index a49fa27..c1031f9 100644 --- a/lib/views/settings/schedule/widgets/select_services_sheet.dart +++ b/lib/views/settings/schedule/widgets/select_services_sheet.dart @@ -16,7 +16,6 @@ class SelectServicesSheet extends StatelessWidget { @override Widget build(BuildContext context) { - context.read().getAllServices(); return SizedBox( width: double.infinity, height: MediaQuery.of(context).size.height / 1.4, @@ -35,11 +34,11 @@ class SelectServicesSheet extends StatelessWidget { child: "Select Services".toText(fontSize: 24, isBold: true), ), Center( - child: model.servicesList!.where((element) => element.isSelected == true).toList().length.toString().toText( - fontSize: 10, - isBold: true, - color: Colors.white, - ), + child: (model.servicesList == null ? "0" : model.servicesList!.where((element) => element.isSelected == true).toList().length.toString()).toText( + fontSize: 10, + isBold: true, + color: Colors.white, + ), ).toContainer( borderRadius: 100, width: 24, diff --git a/lib/views/settings/services/create_item_page.dart b/lib/views/settings/services/create_item_page.dart index ed3e3b0..ed505f7 100644 --- a/lib/views/settings/services/create_item_page.dart +++ b/lib/views/settings/services/create_item_page.dart @@ -1,19 +1,19 @@ import 'dart:convert'; -import 'package:car_provider_app/common/item_model.dart'; -import 'package:car_provider_app/common/widget/checkbox_with_title_desc.dart'; import 'package:car_provider_app/view_models/items_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/m_response.dart'; import 'package:mc_common_app/models/model/branch2.dart'; +import 'package:mc_common_app/models/services/item_model.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/AppPermissionHandler.dart'; import 'package:mc_common_app/utils/date_helper.dart'; import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart'; +import 'package:mc_common_app/widgets/checkbox_with_title_desc.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'; diff --git a/lib/views/settings/services/create_services_page3.dart b/lib/views/settings/services/create_services_page3.dart index 5aa7ccf..39025e4 100644 --- a/lib/views/settings/services/create_services_page3.dart +++ b/lib/views/settings/services/create_services_page3.dart @@ -1,4 +1,4 @@ -import 'package:car_provider_app/common/widget/checkbox_with_title_desc.dart'; + import 'package:car_provider_app/generated/locale_keys.g.dart'; import 'package:car_provider_app/view_models/service_view_model.dart'; import 'package:car_provider_app/views/settings/services/services_list_page.dart'; @@ -10,6 +10,7 @@ import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart'; +import 'package:mc_common_app/widgets/checkbox_with_title_desc.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; diff --git a/lib/views/settings/services/items_list_page.dart b/lib/views/settings/services/items_list_page.dart index d30ce21..51faa0b 100644 --- a/lib/views/settings/services/items_list_page.dart +++ b/lib/views/settings/services/items_list_page.dart @@ -1,5 +1,4 @@ -import 'package:car_provider_app/common/item_model.dart'; -import 'package:car_provider_app/common/widget/empty_widget.dart'; + import 'package:car_provider_app/config/provider_routes.dart'; import 'package:car_provider_app/view_models/items_view_model.dart'; import 'package:flutter/material.dart'; @@ -7,11 +6,13 @@ 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/models/model/branch2.dart'; +import 'package:mc_common_app/models/services/item_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/widgets/button/show_fill_button.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; +import 'package:mc_common_app/widgets/empty_widget.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:provider/provider.dart'; import 'package:flutter_svg/svg.dart'; diff --git a/lib/views/settings/services/services_list_page.dart b/lib/views/settings/services/services_list_page.dart index 750e362..0ac6122 100644 --- a/lib/views/settings/services/services_list_page.dart +++ b/lib/views/settings/services/services_list_page.dart @@ -1,4 +1,4 @@ -import 'package:car_provider_app/common/widget/empty_widget.dart'; + import 'package:car_provider_app/config/provider_routes.dart'; import 'package:flutter/material.dart'; import 'package:mc_common_app/classes/consts.dart'; @@ -11,6 +11,7 @@ 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/dropdown/dropdow_field.dart'; +import 'package:mc_common_app/widgets/empty_widget.dart'; import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:mc_common_app/widgets/tab/menu_tabs.dart'; import 'package:flutter_svg/svg.dart'; diff --git a/lib/views/subscriptions/widget/subscriptions_card.dart b/lib/views/subscriptions/widget/subscriptions_card.dart index 95564d3..ad47e99 100644 --- a/lib/views/subscriptions/widget/subscriptions_card.dart +++ b/lib/views/subscriptions/widget/subscriptions_card.dart @@ -1,7 +1,8 @@ -import 'package:car_provider_app/common/subscription_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/subscription_model.dart'; import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/utils/date_helper.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; diff --git a/pubspec.lock b/pubspec.lock index e781b07..a54288d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,10 +5,10 @@ packages: dependency: transitive description: name: args - sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" + sha256: c372bb384f273f0c2a8aaaa226dad84dc27c8519a691b888725dec59518ad53a url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.1" async: dependency: transitive description: @@ -29,10 +29,10 @@ packages: dependency: transitive description: name: badges - sha256: "461031a60efbb95276f52107f63d5d45008b5ca1eb7f8ca440cadda9ec2143b0" + sha256: "6e7f3ec561ec08f47f912cfe349d4a1707afdc8dda271e17b046aa6d42c89e77" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.1.1" boolean_selector: dependency: transitive description: @@ -125,18 +125,18 @@ packages: dependency: transitive description: name: dropdown_button2 - sha256: "193e97bfe9fd3d89317bddb6129653781fa9b62d99811d49f633e67ea449a62c" + sha256: "374f2390161bf782b4896f0b1b24cbb2b5daaa1cfb11047c3307461dcdf44e07" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.3" easy_localization: dependency: transitive description: name: easy_localization - sha256: f30e9b20ed4d1b890171c30241d9b9c43efe21fee55dee7bd68f94daf269ea75 + sha256: "30ebf25448ffe169e0bd9bc4b5da94faa8398967a2ad2ca09f438be8b6953645" url: "https://pub.dev" source: hosted - version: "3.0.2-dev.2" + version: "3.0.2" easy_logger: dependency: transitive description: @@ -206,6 +206,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.3.0" + flutter_inappwebview: + dependency: transitive + description: + name: flutter_inappwebview + sha256: f73505c792cf083d5566e1a94002311be497d984b5607f25be36d685cf6361cf + url: "https://pub.dev" + source: hosted + version: "5.7.2+3" flutter_lints: dependency: "direct dev" description: @@ -223,10 +231,10 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: c224ac897bed083dabf11f238dd11a239809b446740be0c2044608c50029ffdf + sha256: "950e77c2bbe1692bc0874fc7fb491b96a4dc340457f4ea1641443d0a6c1ea360" url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.15" flutter_svg: dependency: transitive description: @@ -249,10 +257,10 @@ packages: dependency: transitive description: name: fluttertoast - sha256: "2f9c4d3f4836421f7067a28f8939814597b27614e021da9d63e5d3fb6e212d25" + sha256: "474f7d506230897a3cd28c965ec21c5328ae5605fc9c400cd330e9e9d6ac175c" url: "https://pub.dev" source: hosted - version: "8.2.1" + version: "8.2.2" geocoding: dependency: transitive description: @@ -297,10 +305,10 @@ packages: dependency: transitive description: name: geolocator_android - sha256: "2ba24690aee0a3e1b6b7bd47c2711a50c874e95e4c758346589d35194adf6d6a" + sha256: "6cd3c622df085a79fd61f5c14fa024c3ba593aa6b1df2ee809ac59f45e6a9861" url: "https://pub.dev" source: hosted - version: "4.1.7" + version: "4.1.8" geolocator_apple: dependency: transitive description: @@ -337,34 +345,34 @@ packages: dependency: transitive description: name: google_maps_flutter - sha256: "24392ef192f3b00bcd93151375676805a9933574423a5bd5509a0ead2e8a4215" + sha256: abefcb1e5e5c96bdd8084939dda555257af272c7972902ca46d5631092c1df68 url: "https://pub.dev" source: hosted - version: "2.2.5" + version: "2.2.8" google_maps_flutter_android: dependency: transitive description: name: google_maps_flutter_android - sha256: a8ee18649a67750cbd477a6867a1bf9c4154c5e9f69d722c8b53a627a6d58303 + sha256: "9512c862df77c1f0fa5f445513dd3c57f5996f0a809dccb74e54b690ee4e3a0f" url: "https://pub.dev" source: hosted - version: "2.4.9" + version: "2.4.15" google_maps_flutter_ios: dependency: transitive description: name: google_maps_flutter_ios - sha256: e9ad74415a222573625a2c1717adc1e375b18e8ce660fc12db734d1bda1132d4 + sha256: a9462a433bf3ebe60aadcf4906d2d6341a270d69d3e0fcaa8eb2b64699fcfb4f url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.2.3" google_maps_flutter_platform_interface: dependency: transitive description: name: google_maps_flutter_platform_interface - sha256: a07811d2b82055815ede75e1fe4b7b76f71a0b4820b26f71bdaddd157d6a3e20 + sha256: "308f0af138fa78e8224d598d46ca182673874d0ef4d754b7157c073b5b4b8e0d" url: "https://pub.dev" source: hosted - version: "2.2.6" + version: "2.2.7" hexcolor: dependency: transitive description: @@ -393,18 +401,18 @@ packages: dependency: transitive description: name: image_picker - sha256: "64b21d9f0e065f9ab0e4dde458076226c97382cc0c6949144cb874c62bf8e9f8" + sha256: "9978d3510af4e6a902e545ce19229b926e6de6a1828d6134d3aab2e129a4d270" url: "https://pub.dev" source: hosted - version: "0.8.7" + version: "0.8.7+5" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: b81db5f5ed8a69d54d5f0932c2af8120e8c0518a037d8beee494eec671da4d4c + sha256: c2f3c66400649bd132f721c88218945d6406f693092b2f741b79ae9cdb046e59 url: "https://pub.dev" source: hosted - version: "0.8.6+5" + version: "0.8.6+16" image_picker_for_web: dependency: transitive description: @@ -417,10 +425,10 @@ packages: dependency: transitive description: name: image_picker_ios - sha256: "50e882fe0a06bf0c8f7f5bce78d30975f279213293afc9471dc35f05617c50ff" + sha256: d779210bda268a03b57e923fb1e410f32f5c5e708ad256348bcbf1f44f558fd0 url: "https://pub.dev" source: hosted - version: "0.8.7+1" + version: "0.8.7+4" image_picker_platform_interface: dependency: transitive description: @@ -481,10 +489,10 @@ packages: dependency: transitive description: name: local_auth_ios - sha256: "503a938c4edde6b244c6ee3b1e2e675ddb7e37e79d5056658dbed1997cf04785" + sha256: edc2977c5145492f3451db9507a2f2f284ee4f408950b3e16670838726761940 url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.1.3" local_auth_platform_interface: dependency: transitive description: @@ -584,34 +592,34 @@ packages: dependency: transitive description: name: path_provider - sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9" + sha256: "3087813781ab814e4157b172f1a11c46be20179fcc9bea043e0fba36bc0acaa2" url: "https://pub.dev" source: hosted - version: "2.0.13" + version: "2.0.15" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "019f18c9c10ae370b08dce1f3e3b73bc9f58e7f087bb5e921f06529438ac0ae7" + sha256: "2cec049d282c7f13c594b4a73976b0b4f2d7a1838a6dd5aaf7bd9719196bee86" url: "https://pub.dev" source: hosted - version: "2.0.24" + version: "2.0.27" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "12eee51abdf4d34c590f043f45073adbb45514a108bd9db4491547a2fd891059" + sha256: "1995d88ec2948dac43edf8fe58eb434d35d22a2940ecee1a9fefcd62beee6eb3" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.3" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1" + sha256: ffbb8cc9ed2c9ec0e4b7a541e56fd79b138e8f47d2fb86815f15358a349b3b57 url: "https://pub.dev" source: hosted - version: "2.1.10" + version: "2.1.11" path_provider_platform_interface: dependency: transitive description: @@ -648,18 +656,18 @@ packages: dependency: transitive description: name: permission_handler_android - sha256: "8028362b40c4a45298f1cbfccd227c8dd6caf0e27088a69f2ba2ab15464159e2" + sha256: d8cc6a62ded6d0f49c6eac337e080b066ee3bce4d405bd9439a61e1f1927bfe8 url: "https://pub.dev" source: hosted - version: "10.2.0" + version: "10.2.1" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - sha256: "9c370ef6a18b1c4b2f7f35944d644a56aa23576f23abee654cf73968de93f163" + sha256: ee96ac32f5a8e6f80756e25b25b9f8e535816c8e6665a96b6d70681f8c4f7e85 url: "https://pub.dev" source: hosted - version: "9.0.7" + version: "9.0.8" permission_handler_platform_interface: dependency: transitive description: @@ -728,58 +736,58 @@ packages: dependency: transitive description: name: shared_preferences - sha256: ee6257848f822b8481691f20c3e6d2bfee2e9eccb2a3d249907fcfb198c55b41 + sha256: "16d3fb6b3692ad244a695c0183fca18cf81fd4b821664394a781de42386bf022" url: "https://pub.dev" source: hosted - version: "2.0.18" + version: "2.1.1" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: ad423a80fe7b4e48b50d6111b3ea1027af0e959e49d485712e134863d9c1c521 + sha256: "6478c6bbbecfe9aced34c483171e90d7c078f5883558b30ec3163cf18402c749" url: "https://pub.dev" source: hosted - version: "2.0.17" + version: "2.1.4" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "1e755f8583229f185cfca61b1d80fb2344c9d660e1c69ede5450d8f478fa5310" + sha256: e014107bb79d6d3297196f4f2d0db54b5d1f85b8ea8ff63b8e8b391a02700feb url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.2.2" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "3a59ed10890a8409ad0faad7bb2957dab4b92b8fbe553257b05d30ed8af2c707" + sha256: "9d387433ca65717bbf1be88f4d5bb18f10508917a8fa2fb02e0fd0d7479a9afa" url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.2.0" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "824bfd02713e37603b2bdade0842e47d56e7db32b1dcdd1cae533fb88e2913fc" + sha256: fb5cf25c0235df2d0640ac1b1174f6466bd311f621574997ac59018a6664548d url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.2.0" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "0dc2633f215a3d4aa3184c9b2c5766f4711e4e5a6b256e62aafee41f89f1bfb8" + sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5" url: "https://pub.dev" source: hosted - version: "2.0.6" + version: "2.1.0" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "71bcd669bb9cdb6b39f22c4a7728b6d49e934f6cba73157ffa5a54f1eed67436" + sha256: "5e588e2efef56916a3b229c3bfe81e6a525665a454519ca51dbcc4236a274173" url: "https://pub.dev" source: hosted - version: "2.1.5" + version: "2.2.0" shimmer: dependency: transitive description: @@ -813,18 +821,18 @@ packages: dependency: transitive description: name: sqflite - sha256: "500d6fec583d2c021f2d25a056d96654f910662c64f836cd2063167b8f1fa758" + sha256: b4d6710e1200e96845747e37338ea8a819a12b51689a3bcf31eff0003b37a0b9 url: "https://pub.dev" source: hosted - version: "2.2.6" + version: "2.2.8+4" sqflite_common: dependency: transitive description: name: sqflite_common - sha256: "963dad8c4aa2f814ce7d2d5b1da2f36f31bd1a439d8f27e3dc189bb9d26bc684" + sha256: e77abf6ff961d69dfef41daccbb66b51e9983cdd5cb35bf30733598057401555 url: "https://pub.dev" source: hosted - version: "2.4.3" + version: "2.4.5" stack_trace: dependency: transitive description: @@ -861,10 +869,10 @@ packages: dependency: transitive description: name: synchronized - sha256: "33b31b6beb98100bf9add464a36a8dd03eb10c7a8cf15aeec535e9b054aaf04b" + sha256: "5fcbd27688af6082f5abd611af56ee575342c30e87541d0245f7ff99faa02c60" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.1.0" term_glyph: dependency: transitive description: @@ -885,10 +893,10 @@ packages: dependency: transitive description: name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" universal_io: dependency: transitive description: @@ -901,42 +909,42 @@ packages: dependency: transitive description: name: url_launcher - sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e" + sha256: eb1e00ab44303d50dd487aab67ebc575456c146c6af44422f9c13889984c00f3 url: "https://pub.dev" source: hosted - version: "6.1.10" + version: "6.1.11" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: dd729390aa936bf1bdf5cd1bc7468ff340263f80a2c4f569416507667de8e3c8 + sha256: eed4e6a1164aa9794409325c3b707ff424d4d1c2a785e7db67f8bbda00e36e51 url: "https://pub.dev" source: hosted - version: "6.0.26" + version: "6.0.35" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "3dedc66ca3c0bef9e6a93c0999aee102556a450afcc1b7bcfeace7a424927d92" + sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2" url: "https://pub.dev" source: hosted - version: "6.1.3" + version: "6.1.4" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "206fb8334a700ef7754d6a9ed119e7349bc830448098f21a69bf1b4ed038cabc" + sha256: "207f4ddda99b95b4d4868320a352d374b0b7e05eefad95a4a26f57da413443f5" url: "https://pub.dev" source: hosted - version: "3.0.4" + version: "3.0.5" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "0ef2b4f97942a16523e51256b799e9aa1843da6c60c55eefbfa9dbc2dcb8331a" + sha256: "91ee3e75ea9dadf38036200c5d3743518f4a5eb77a8d13fda1ee5764373f185e" url: "https://pub.dev" source: hosted - version: "3.0.4" + version: "3.0.5" url_launcher_platform_interface: dependency: transitive description: @@ -949,18 +957,18 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa" + sha256: "6bb1e5d7fe53daf02a8fee85352432a40b1f868a81880e99ec7440113d5cfcab" url: "https://pub.dev" source: hosted - version: "2.0.16" + version: "2.0.17" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: a83ba3607a507758669cfafb03f9de09bf6e6280c14d9b9cb18f013e406dcacd + sha256: "254708f17f7c20a9c8c471f67d86d76d4a3f9c1591aad1e15292008aceb82771" url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.0.6" uuid: dependency: transitive description: @@ -997,10 +1005,10 @@ packages: dependency: transitive description: name: xml - sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" + sha256: ac0e3f4bf00ba2708c33fbabbbe766300e509f8c82dbd4ab6525039813f7e2fb url: "https://pub.dev" source: hosted - version: "6.2.2" + version: "6.1.0" sdks: dart: ">=3.0.0-0 <4.0.0" flutter: ">=3.3.0"