add services and items 1

mirza_dev
mirza.shafique 2 years ago
parent d6f3c5653a
commit 1a9d61ac62

@ -1,5 +1,5 @@
buildscript {
ext.kotlin_version = '1.6.10'
ext.kotlin_version = '1.8.0'
repositories {
google()
mavenCentral()

@ -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

@ -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<ItemData>? data;
final String? message;
ItemModel({
this.messageStatus,
this.totalItemsCount,
this.data,
this.message,
});
factory ItemModel.fromJson(Map<String, dynamic> json) => ItemModel(
messageStatus: json["messageStatus"],
totalItemsCount: json["totalItemsCount"],
data: json["data"] == null ? [] : List<ItemData>.from(json["data"]!.map((x) => ItemData.fromJson(x))),
message: json["message"],
);
Map<String, dynamic> toJson() => {
"messageStatus": messageStatus,
"totalItemsCount": totalItemsCount,
"data": data == null ? [] : List<dynamic>.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<String, dynamic> 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<String, dynamic> 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,
};
}

@ -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<ScheduleData>? data;
final String? message;
Schedule({
this.messageStatus,
this.totalItemsCount,
this.data,
this.message,
});
factory Schedule.fromJson(Map<String, dynamic> json) => Schedule(
messageStatus: json["messageStatus"],
totalItemsCount: json["totalItemsCount"],
data: json["data"] == null ? [] : List<ScheduleData>.from(json["data"]!.map((x) => ScheduleData.fromJson(x))),
message: json["message"],
);
Map<String, dynamic> toJson() => {
"messageStatus": messageStatus,
"totalItemsCount": totalItemsCount,
"data": data == null ? [] : List<dynamic>.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<String, dynamic> 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<String, dynamic> toJson() => {
"id": id,
"branchID": branchId,
"fromDate": fromDate?.toIso8601String(),
"toDate": toDate?.toIso8601String(),
"startTime": startTime,
"endTime": endTime,
"slotDurationMinute": slotDurationMinute,
"perSlotAppointment": perSlotAppointment,
};
}

@ -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<Subscription>? data;
String? message;
factory SubscriptionModel.fromJson(Map<String, dynamic> json) => SubscriptionModel(
messageStatus: json["messageStatus"],
totalItemsCount: json["totalItemsCount"],
data: json["data"] == null ? [] : List<Subscription>.from(json["data"]!.map((x) => Subscription.fromJson(x))),
message: json["message"],
);
Map<String, dynamic> toJson() => {
"messageStatus": messageStatus,
"totalItemsCount": totalItemsCount,
"data": data == null ? [] : List<dynamic>.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<String, dynamic> 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<String, dynamic> 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,
};
}

@ -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),
],
),
),
],
),
);
}
}

@ -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());
}
}

@ -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() {

@ -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<String, WidgetBuilder> 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(),
};
}

@ -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<void> main() async {
ChangeNotifierProvider<DashboardVM>(
create: (_) => DashboardVM(
userRepo: injector.get<UserRepo>(),
commonServices: injector.get<CommonServices>(),
commonServices: injector.get<CommonAppServices>(),
),
),
ChangeNotifierProvider<UserVM>(
@ -59,7 +61,7 @@ Future<void> main() async {
ChangeNotifierProvider<ServiceVM>(
create: (_) => ServiceVM(
branchRepo: injector.get<BranchRepo>(),
commonServices: injector.get<CommonServices>(),
commonServices: injector.get<CommonAppServices>(),
commonRepo: injector.get<CommonRepo>(),
),
),
@ -69,11 +71,19 @@ Future<void> main() async {
ChangeNotifierProvider<ItemsVM>(
create: (_) => ItemsVM(
itemsRepo: injector.get<ItemsRepo>(),
commonServices: injector.get<CommonServices>(),
commonServices: injector.get<CommonAppServices>(),
),
),
ChangeNotifierProvider<ScheduleVM>(
create: (_) => ScheduleVM(scheduleRepo: injector.get<ScheduleRepo>(),
create: (_) => ScheduleVM(
scheduleRepo: injector.get<ScheduleRepo>(),
),
),
ChangeNotifierProvider<AdVM>(
create: (_) => AdVM(
commonServices: injector.get<CommonAppServices>(),
adsRepo: injector.get<AdsRepo>(),
commonRepo: injector.get<CommonRepo>(),
),
),
],

@ -121,7 +121,6 @@ class BranchRepoImp implements BranchRepo {
return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.ServiceProviderDocument_Update, map, token: t);
}
@override
Future<Branch2> getBranchAndServices() async {
var postParams = {"serviceProviderID": AppState().getUser.data?.userInfo?.providerId.toString() ?? ""};

@ -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<MResponse> createServiceItems(Map map);

@ -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<Services> getAllServices();
Future<Services> getAllServices(String branchId);
Future<MResponse> createSchedule(Map map);
Future<MResponse> addServicesInSchedule(Map map);
Future<Schedule> getSchedules();
Future<MResponse> updateSchedule(Map map);
Future<Schedule> getSchedules(String branchId);
Future<MResponse> updateServicesInSchedule(Map map);
}
class ScheduleRepoImp implements ScheduleRepo {
@override
Future<Services> getAllServices() async {
Future<Services> getAllServices(String branchId) async {
print("braanchId $branchId");
Map<String, dynamic> map = {"ProviderBranchID": branchId};
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().getJsonForObject((json) => Services.fromJson(json), ApiConsts.Services_Get, token: t);
return await injector.get<ApiClient>().getJsonForObject((json) => Services.fromJson(json), ApiConsts.getServicesOfBranch, token: t, queryParameters: map);
}
@override
@ -36,8 +42,21 @@ class ScheduleRepoImp implements ScheduleRepo {
}
@override
Future<Schedule> getSchedules() async {
Future<Schedule> getSchedules(String branchId) async {
Map<String, dynamic> map = {"ServiceProviderBranchID": branchId};
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().getJsonForObject((json) => Schedule.fromJson(json), ApiConsts.getSchedule, token: t, queryParameters: map);
}
@override
Future<MResponse> updateSchedule(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateSchedule, map, token: t);
}
@override
Future<MResponse> updateServicesInSchedule(Map map) async {
String t = AppState().getUser.data!.accessToken ?? "";
return await injector.get<ApiClient>().getJsonForObject((json) => Schedule.fromJson(json), ApiConsts.getSchedule, token: t);
return await injector.get<ApiClient>().postJsonForObject((json) => MResponse.fromJson(json), ApiConsts.updateGroup, map, token: t);
}
}

@ -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<SubscriptionModel> getAllSubscriptions(String? serviceProviderID);

@ -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});

@ -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});

@ -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<PickerItem> 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<PickerItem> intiDays() {
List<PickerItem> 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<PickerItem> 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<MResponse> updateSchedule(Map map) async {
MResponse response = await scheduleRepo.updateSchedule(map);
return response;
}
Future<MResponse> updateServicesInSchedule(Map map) async {
MResponse response = await scheduleRepo.updateServicesInSchedule(map);
return response;
}
}

@ -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});

@ -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';

@ -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<DashboardPage> {
void initState() {
super.initState();
dashboardVM = Provider.of<DashboardVM>(context, listen: false);
scheduleMicrotask(() {
_onRefresh();
});
}
Future<void> _onRefresh() async {
context.read<AdVM>().populateAdsFilterList();
context.read<ServiceVM>().getBranchAndServices();
AdVM adVm = Provider.of<AdVM>(context, listen: false);
if (adVm.myAds.isEmpty) {
await adVm.getMyAds();
}
if (adVm.exploreAds.isEmpty) {
await adVm.getExploreAds();
}
}
@override
Widget build(BuildContext context) {
List<Widget> 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<DashboardVM>(builder: (context, model, _) {
return fragments[dashboardVM.selectedNavbarBarIndex];
}),
// body: Consumer<DashboardVM>(builder: (context, model, _) {
// return fragments[dashboardVM.selectedNavbarBarIndex];
// }),
body: fragments[context.watch<DashboardVM>().selectedNavbarBarIndex],
bottomNavigationBar: CustomBottomNavbar(
onSelected: (i) {
dashboardVM.updateIndex(i);
},
isProvider: true,
selectedNavbarBarIndex: dashboardVM.selectedNavbarBarIndex,
),
);

@ -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<void> onRefreshAds(BuildContext context) async {
AdVM adVM = context.read<AdVM>();
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<AdVM>().getVehicleTypes();
navigateWithName(context, AppRoutes.createAdView);
},
backgroundColor: MyColors.darkPrimaryColor,
child: const Icon(
Icons.add,
color: MyColors.white,
),
),
);
}
}

@ -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: () {},

@ -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<DashboardVM>().onNavbarTapped(3);
// context.read<AdVM>().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<DashboardVM>().onNavbarTapped(3);
// context.read<AdVM>().updateIsExploreAds(true);
// context.read<AdVM>().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,
// ),

@ -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: () {},

@ -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<CustomDrawer> {
],
),
),
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<CustomDrawer> {
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,

@ -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]);
},
);
},
);
}
},
),
);
}
}

@ -280,3 +280,6 @@ class BranchDetailPage extends StatelessWidget {
);
}
}

@ -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<ServiceVM>();
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()))

@ -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),

@ -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<ScheduleVM>();
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<int> 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<int> 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");
}
}
}

@ -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<SchedulesListPage> createState() => _SchedulesListPageState();
}
class _SchedulesListPageState extends State<SchedulesListPage> {
@override
void initState() {
// TODO: implement initState
super.initState();
print("fffffffffkk");
print(widget.branchId);
context.read<ScheduleVM>().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<ScheduleVM>(
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),
],
);
}
}

@ -16,7 +16,6 @@ class SelectServicesSheet extends StatelessWidget {
@override
Widget build(BuildContext context) {
context.read<ScheduleVM>().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,

@ -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';

@ -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';

@ -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';

@ -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';

@ -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';

@ -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"

Loading…
Cancel
Save