Issues Fixed
parent
b18b57ca93
commit
c99878f04a
@ -0,0 +1,150 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:mc_common_app/classes/app_state.dart';
|
||||||
|
import 'package:mc_common_app/config/dependency_injection.dart';
|
||||||
|
import 'package:mc_common_app/config/routes.dart';
|
||||||
|
import 'package:mc_common_app/generated/locale_keys.g.dart';
|
||||||
|
import 'package:mc_common_app/main.dart';
|
||||||
|
import 'package:mc_common_app/models/user_models/image_response.dart';
|
||||||
|
import 'package:mc_common_app/repositories/user_repo.dart';
|
||||||
|
import 'package:mc_common_app/services/common_services.dart';
|
||||||
|
import 'package:mc_common_app/utils/enums.dart';
|
||||||
|
import 'package:mc_common_app/utils/navigator.dart';
|
||||||
|
import 'package:mc_common_app/view_models/shipping_management_view_model.dart';
|
||||||
|
import 'package:mc_common_app/widgets/common_widgets/add_phone_num_wiget.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
import 'package:mc_common_app/utils/location/Location.dart';
|
||||||
|
import 'package:mc_common_app/utils/utils.dart';
|
||||||
|
import 'package:mc_common_app/view_models/ad_view_model.dart';
|
||||||
|
import 'package:mc_common_app/view_models/appointments_view_model.dart';
|
||||||
|
import 'package:mc_common_app/view_models/base_view_model.dart';
|
||||||
|
import 'package:mc_common_app/widgets/bottom_sheet.dart';
|
||||||
|
import 'package:mc_common_app/view_models/chat_view_model.dart';
|
||||||
|
import 'package:mc_common_app/view_models/requests_view_model.dart';
|
||||||
|
import 'package:mc_common_app/view_models/service_view_model.dart';
|
||||||
|
import 'package:mc_common_app/view_models/subscriptions_view_model.dart';
|
||||||
|
|
||||||
|
class DashboardVMProvider extends BaseVM {
|
||||||
|
final CommonAppServices commonServices;
|
||||||
|
final UserRepo userRepo;
|
||||||
|
|
||||||
|
DashboardVMProvider({required this.commonServices, required this.userRepo});
|
||||||
|
|
||||||
|
String pickedImage = "";
|
||||||
|
|
||||||
|
int selectedNavbarBarIndex = 2;
|
||||||
|
|
||||||
|
void onNavbarTapped(int index) async {
|
||||||
|
logger.i(AppState().getDeviceToken);
|
||||||
|
selectedNavbarBarIndex = index;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
void pickImageFromPhone(BuildContext context, int sourceFlag) async {
|
||||||
|
final File? pickedImageFile = await commonServices.pickImageFromPhone(sourceFlag);
|
||||||
|
if (pickedImageFile == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int sizeInBytes = pickedImageFile.lengthSync();
|
||||||
|
if (sizeInBytes > 1000000) {
|
||||||
|
Utils.showToast(LocaleKeys.fileLarger.tr());
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
String image64 = Utils.convertFileToBase64(pickedImageFile);
|
||||||
|
|
||||||
|
Utils.showLoading(context);
|
||||||
|
ImageResponse response = await userRepo.updateUserImage(image64);
|
||||||
|
Utils.hideLoading(context);
|
||||||
|
Navigator.pop(context);
|
||||||
|
if (response.messageStatus == 1) {
|
||||||
|
Utils.showToast(LocaleKeys.imageUploaded.tr());
|
||||||
|
AppState().getUser.data!.userInfo!.userImageUrl = response.data;
|
||||||
|
} else {
|
||||||
|
Utils.showToast(response.message ?? "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<ImageResponse> updateUserImage(String image) async {
|
||||||
|
return await userRepo.updateUserImage(image);
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchUsernameAndLocation() async {
|
||||||
|
// String userName = await SharedPrefManager.getPhoneOrEmail();
|
||||||
|
Location.getCurrentLocation(
|
||||||
|
(LatLng? latlng) {
|
||||||
|
AppState().currentLocation = latlng ?? const LatLng(0, 0);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> onRefresh(BuildContext context) async {
|
||||||
|
final requestsVM = context.read<RequestsVM>();
|
||||||
|
final chatVM = context.read<ChatVM>();
|
||||||
|
final appointmentVM = context.read<AppointmentsVM>();
|
||||||
|
final shippingManagementVM = context.read<ShippingManagementVM>();
|
||||||
|
final serviceVM = context.read<ServiceVM>();
|
||||||
|
final adVm = context.read<AdVM>();
|
||||||
|
final subscriptionsVM = context.read<SubscriptionsVM>();
|
||||||
|
requestsVM.populateDataForRequestsFilter();
|
||||||
|
appointmentVM.populateAppointmentsFilterList();
|
||||||
|
shippingManagementVM.populateShippingRequestFilterList();
|
||||||
|
await serviceVM.getBranchAndServices();
|
||||||
|
await appointmentVM.getMyAppointmentsForProvider({"ServiceProviderID": injector.get<AppState>().getUser.data?.userInfo?.providerId.toString() ?? "0"});
|
||||||
|
adVm.populateAdsFilterList();
|
||||||
|
await chatVM.buildHubConnection(context);
|
||||||
|
await adVm.getMyAds();
|
||||||
|
await adVm.getExploreAds();
|
||||||
|
await adVm.getVehicleTypes();
|
||||||
|
await adVm.getVehicleAdsDuration();
|
||||||
|
await requestsVM.getRequests();
|
||||||
|
// await subscriptionsVM.getMySubscriptionsBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? "");
|
||||||
|
await subscriptionsVM.getSubscriptionBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? "", true);
|
||||||
|
// await subscriptionsVM.getMySubscriptionsBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? "");
|
||||||
|
}
|
||||||
|
|
||||||
|
void checkUserSubscription(SubscriptionActionTypeEnum actionType, BuildContext context, {required Function() callback}) async {
|
||||||
|
switch (actionType) {
|
||||||
|
case SubscriptionActionTypeEnum.ads:
|
||||||
|
performCheckOnAds(context);
|
||||||
|
break;
|
||||||
|
case SubscriptionActionTypeEnum.users:
|
||||||
|
performCheckOnUsers(context, callback);
|
||||||
|
break;
|
||||||
|
case SubscriptionActionTypeEnum.branches:
|
||||||
|
performCheckOnBranches(context);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void performCheckOnBranches(BuildContext context) async {
|
||||||
|
if (AppState().getproviderSubscription.isNotEmpty && AppState().getproviderSubscription.first.branchesRemaining! > 0) {
|
||||||
|
logger.d(AppState().getproviderSubscription.first.toJson());
|
||||||
|
await navigateWithName(context, AppRoutes.defineBranch);
|
||||||
|
} else {
|
||||||
|
Utils.showToast("Upgrade your subscription to add more Branches.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void performCheckOnAds(BuildContext context) async {
|
||||||
|
//adsRemaining
|
||||||
|
if (AppState().getproviderSubscription.isNotEmpty && AppState().getproviderSubscription.first.adsRemaining! > 0) {
|
||||||
|
logger.d(AppState().getproviderSubscription.first.toJson());
|
||||||
|
await navigateWithName(context, AppRoutes.defineBranch);
|
||||||
|
} else {
|
||||||
|
Utils.showToast("Upgrade your subscription to add more Ads.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void performCheckOnUsers(BuildContext context, Function() callBack) async {
|
||||||
|
if (AppState().getproviderSubscription.isNotEmpty && AppState().getproviderSubscription.first.subUsersRemaining! > 0) {
|
||||||
|
logger.d(AppState().getproviderSubscription.first.toJson());
|
||||||
|
showMyBottomSheet(context, isDismissible: false, child: const AddPhoneNumWidget(), callBackFunc: callBack);
|
||||||
|
} else {
|
||||||
|
Utils.showToast("Upgrade your subscription to add more Sub Users.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,139 @@
|
|||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:easy_localization/easy_localization.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/generated/locale_keys.g.dart';
|
||||||
|
import 'package:mc_common_app/models/user_models/country.dart';
|
||||||
|
import 'package:mc_common_app/theme/colors.dart';
|
||||||
|
import 'package:mc_common_app/utils/navigator.dart';
|
||||||
|
import 'package:mc_common_app/utils/utils.dart';
|
||||||
|
import 'package:mc_common_app/view_models/user_view_model.dart';
|
||||||
|
import 'package:mc_common_app/widgets/button/show_fill_button.dart';
|
||||||
|
import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart';
|
||||||
|
import 'package:mc_common_app/widgets/txt_field.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
class AddPhoneNumWidget extends StatefulWidget {
|
||||||
|
const AddPhoneNumWidget({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<AddPhoneNumWidget> createState() => _AddPhoneNumWidgetState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _AddPhoneNumWidgetState extends State<AddPhoneNumWidget> {
|
||||||
|
String phoneNum = "", countryCode = "";
|
||||||
|
late UserVM userVM;
|
||||||
|
Country? _country;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
|
||||||
|
scheduleMicrotask(() {
|
||||||
|
userVM = Provider.of(context, listen: false);
|
||||||
|
getCountryList();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
getCountryList() async {
|
||||||
|
_country = await userVM.getAllCountries();
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Padding(
|
||||||
|
padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
|
||||||
|
child: Container(
|
||||||
|
width: double.infinity,
|
||||||
|
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
"Enter Phone Number".toText(fontSize: 16, isBold: true),
|
||||||
|
8.height,
|
||||||
|
getCountry(context),
|
||||||
|
8.height,
|
||||||
|
TxtField(
|
||||||
|
keyboardType: TextInputType.phone,
|
||||||
|
hint: "546758594",
|
||||||
|
value: phoneNum,
|
||||||
|
isSidePaddingZero: true,
|
||||||
|
onChanged: (v) {
|
||||||
|
phoneNum = v;
|
||||||
|
},
|
||||||
|
),
|
||||||
|
16.height,
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: ShowFillButton(
|
||||||
|
title: "Cancel",
|
||||||
|
backgroundColor: MyColors.greyButtonColor,
|
||||||
|
txtColor: Colors.black,
|
||||||
|
onPressed: () {
|
||||||
|
pop(context);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
12.width,
|
||||||
|
Expanded(
|
||||||
|
child: ShowFillButton(
|
||||||
|
title: LocaleKeys.sendOTP.tr(),
|
||||||
|
onPressed: () {
|
||||||
|
//User Role: Dealer|Manager for a branch
|
||||||
|
FocusScope.of(context).unfocus();
|
||||||
|
if (validation()) {
|
||||||
|
userVM.performBasicOtpRegisterPage(context, countryCode: countryCode, phoneNum: phoneNum, role: 7, isNeedToPassToken: true, reloadPage: () {
|
||||||
|
pop(context);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget getCountry(BuildContext context) {
|
||||||
|
if (_country != null) {
|
||||||
|
List<DropValue> dropList = [];
|
||||||
|
_country!.data?.forEach((element) {
|
||||||
|
dropList.add(DropValue(element.id ?? 0, "${element.countryName ?? ""} ${element.countryCode ?? ""}", element.countryCode ?? ""));
|
||||||
|
});
|
||||||
|
return DropdownField(
|
||||||
|
(DropValue value) {
|
||||||
|
countryCode = value.subValue;
|
||||||
|
},
|
||||||
|
list: dropList,
|
||||||
|
hint: countryCode.isNotEmpty ? countryCode.toString() : LocaleKeys.selectCountryCode.tr(),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return const Center(
|
||||||
|
child: CircularProgressIndicator(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool validation() {
|
||||||
|
bool isValid = true;
|
||||||
|
if (countryCode.isEmpty) {
|
||||||
|
Utils.showToast(LocaleKeys.selectCountryCode.tr());
|
||||||
|
//("Please select Country Code");
|
||||||
|
isValid = false;
|
||||||
|
} else if (phoneNum.isEmpty) {
|
||||||
|
Utils.showToast(LocaleKeys.addPhoneNo.tr());
|
||||||
|
//("Please add Phone No");
|
||||||
|
isValid = false;
|
||||||
|
}
|
||||||
|
return isValid;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue