diff --git a/lib/classes/app_state.dart b/lib/classes/app_state.dart index d8e4dce..ee491de 100644 --- a/lib/classes/app_state.dart +++ b/lib/classes/app_state.dart @@ -65,7 +65,7 @@ class AppState { List? _providerSubscription; - List get getproviderSubscription => _providerSubscription!; + List get getproviderSubscription => _providerSubscription ?? [new Subscription(name: "")]; set setproviderSubscription(List value) { _providerSubscription = value; diff --git a/lib/models/subscriptions_models/subscription_model.dart b/lib/models/subscriptions_models/subscription_model.dart index fc77955..9697266 100644 --- a/lib/models/subscriptions_models/subscription_model.dart +++ b/lib/models/subscriptions_models/subscription_model.dart @@ -69,6 +69,7 @@ class Subscription { this.totalAds, this.branchesRemaining, this.subUsersRemaining, + this.subscriptionType, this.adsRemaining}); int? id; @@ -90,6 +91,7 @@ class Subscription { SubscriptionTypeEnum? subscriptionTypeEnum; bool? isMyCurrentPackage; bool? isRenewable; + int? subscriptionType; int? subscriptionBranches; int? subscriptionSubUsers; @@ -130,6 +132,7 @@ class Subscription { branchesRemaining: json["branchesRemaining"], subUsersRemaining: json["subUsersRemaining"], adsRemaining: json["adsRemaining"], + subscriptionType: json["subscriptionType"], ); Map toJson() => { @@ -159,5 +162,6 @@ class Subscription { "branchesRemaining": branchesRemaining, "subUsersRemaining": subUsersRemaining, "adsRemaining": adsRemaining, + "subscriptionType": subscriptionType, }; } diff --git a/lib/services/common_auth_service.dart b/lib/services/common_auth_service.dart index 1f52e02..c1b5969 100644 --- a/lib/services/common_auth_service.dart +++ b/lib/services/common_auth_service.dart @@ -2,7 +2,6 @@ import 'dart:io'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/services.dart'; -import 'package:huawei_fido/huawei_fido.dart'; import 'package:local_auth/local_auth.dart'; import 'package:local_auth_android/local_auth_android.dart'; import 'package:local_auth_darwin/types/auth_messages_ios.dart'; @@ -61,11 +60,11 @@ class CommonAuthImp implements CommonAuthServices { return await localAuth.getAvailableBiometrics(); } - Future getHuaweiAuth() async { - DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); - AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; - // if (androidInfo.brand == "HUAWEI") { - // huawei.canAuth(); - // } - } +// Future getHuaweiAuth() async { +// DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); +// AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; +// // if (androidInfo.brand == "HUAWEI") { +// // huawei.canAuth(); +// // } +// } } diff --git a/lib/services/payments_service.dart b/lib/services/payments_service.dart index aed50b8..51df85a 100644 --- a/lib/services/payments_service.dart +++ b/lib/services/payments_service.dart @@ -26,13 +26,25 @@ abstract class PaymentService { class PaymentServiceImp implements PaymentService { MyInAppBrowser? myInAppBrowser; - var inAppBrowserOptions = InAppBrowserClassOptions( - inAppWebViewGroupOptions: - InAppWebViewGroupOptions(crossPlatform: InAppWebViewOptions(useShouldOverrideUrlLoading: true, transparentBackground: false), ios: IOSInAppWebViewOptions(applePayAPIEnabled: true)), - crossPlatform: InAppBrowserOptions(hideUrlBar: true, toolbarTopBackgroundColor: Colors.black), - android: AndroidInAppBrowserOptions(), - ios: - IOSInAppBrowserOptions(hideToolbarBottom: true, toolbarBottomBackgroundColor: Colors.white, closeButtonColor: Colors.white, presentationStyle: IOSUIModalPresentationStyle.OVER_FULL_SCREEN)); + + var inAppBrowserOptions = InAppBrowserClassSettings( + webViewSettings: InAppWebViewSettings( + useShouldOverrideUrlLoading: false, + transparentBackground: false, + isInspectable: false, + applePayAPIEnabled: true, + cacheEnabled: false, + ), + browserSettings: InAppBrowserSettings( + hideUrlBar: true, + hideTitleBar: true, + hideDefaultMenuItems: false, + toolbarBottomBackgroundColor: Colors.black, + closeButtonColor: Colors.white, + presentationStyle: ModalPresentationStyle.OVER_FULL_SCREEN, + // toolbarTopBackgroundColor: Colors.black + ), + ); @override Future placePayment({ @@ -75,15 +87,23 @@ class PaymentServiceImp implements PaymentService { break; } log("PaymentUrl: $urlRequest"); - myInAppBrowser = MyInAppBrowser(onExitCallback: () { - log("Browser Exited"); - }, onLoadStartCallback: (String url) { - log("Browser LoadStart for : $url"); - onBrowserLoadStart(onFailure: onFailure, onSuccess: onSuccess, url: url); - }); + myInAppBrowser = MyInAppBrowser( + onExitCallback: () { + log("Browser Exited"); + }, + onLoadStartCallback: (String url) { + log("Browser LoadStart for : $url"); + onBrowserLoadStart(onFailure: onFailure, onSuccess: onSuccess, url: url); + }, + ); await myInAppBrowser!.openUrlRequest( - urlRequest: URLRequest(url: Uri.parse(urlRequest)), - options: inAppBrowserOptions, + urlRequest: URLRequest( + url: WebUri('${Uri.parse(urlRequest)}', forceToStringRawValue: true), + allowsCellularAccess: true, + allowsConstrainedNetworkAccess: true, + allowsExpensiveNetworkAccess: true, + ), + settings: inAppBrowserOptions, ); } diff --git a/lib/utils/enums.dart b/lib/utils/enums.dart index b214b10..980ae1b 100644 --- a/lib/utils/enums.dart +++ b/lib/utils/enums.dart @@ -187,9 +187,9 @@ enum ChatTypeEnum { } enum SubscriptionTypeEnum { - current, - upgrade, - downgrade, + current, //1 + upgrade, //2 + downgrade, //3 } enum SubscriptionActionTypeEnum { diff --git a/lib/view_models/payment_view_model.dart b/lib/view_models/payment_view_model.dart index 89fba48..af993fd 100644 --- a/lib/view_models/payment_view_model.dart +++ b/lib/view_models/payment_view_model.dart @@ -213,9 +213,8 @@ class PaymentVM extends ChangeNotifier { onSubscriptionPaymentSuccess(BuildContext context) { pop(context); - // context.read().getMySubscriptions(AppState().getUser.data?.userInfo?.providerId.toString() ?? ""); - context.read().getSubscriptionBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? "", true); + // context.read().getSubscriptionBySP(AppState().getUser.data?.userInfo?.providerId.toString() ?? "", true); // context.read().mySubscriptionsBySp = []; // context.read().getMySubscriptionsBySP(); navigateReplaceWithNameUntilRoute(context, AppRoutes.dashboard); diff --git a/lib/view_models/service_view_model.dart b/lib/view_models/service_view_model.dart index a7e9715..11ba597 100644 --- a/lib/view_models/service_view_model.dart +++ b/lib/view_models/service_view_model.dart @@ -272,7 +272,8 @@ class ServiceVM extends BaseVM { Future getBranchAndServices() async { setState(ViewState.busy); branches = await branchRepo.getBranchAndServices(); - homePageBranches = branches!.data!.serviceProviderBranch!.where((element) => element.branchStatus == BranchStatusEnum.approvedOrActive).toList(); + if (branches!.data != null) + homePageBranches = branches!.data!.serviceProviderBranch!.where((element) => element.branchStatus == BranchStatusEnum.approvedOrActive).toList(); setState(ViewState.idle); } diff --git a/lib/views/setting_options/setting_options_language.dart b/lib/views/setting_options/setting_options_language.dart index d58628a..34f9053 100644 --- a/lib/views/setting_options/setting_options_language.dart +++ b/lib/views/setting_options/setting_options_language.dart @@ -40,141 +40,141 @@ class _SettingOptionsLanguageState extends State { // ? Expanded( child: ListView( - shrinkWrap: true, - padding: EdgeInsets.zero, - children: [ - Column( + shrinkWrap: true, + padding: EdgeInsets.zero, children: [ - CustomSettingOptionsTile( - leadingWidget: const Icon(Icons.quickreply_outlined, size: 20), - titleText: LocaleKeys.requests.tr(), - needBorderBelow: true, - onTap: () { - context.read().onNavbarTapped(4); - Navigator.pop(context); - }), - if (AppState().currentAppType == AppType.customer) ...[ - CustomSettingOptionsTile( - leadingWidget: const Icon(Icons.favorite, size: 20), - titleText: LocaleKeys.favoriteList.tr(), - needBorderBelow: true, - onTap: () => navigateWithName(context, AppRoutes.favoriteListView), - ), - ], - CustomSettingOptionsTile( - leadingWidget: const Icon(Icons.settings, size: 20), - titleText: LocaleKeys.settings.tr(), - needBorderBelow: true, - onTap: () {}, - //navigateWithName(context, AppRoutes.settingOptionsInviteFriends), - ), - CustomSettingOptionsTile( - leadingWidget: const Icon(Icons.question_mark_outlined, size: 20), - titleText: LocaleKeys.help.tr(), - needBorderBelow: true, - onTap: () => navigateWithName(context, AppRoutes.settingOptionsHelp), - ), - CustomSettingOptionsTile( - leadingWidget: const Icon(Icons.person, size: 20), - titleText: LocaleKeys.account.tr(), - needBorderBelow: false, - onTap: () { - navigateWithName(context, AppRoutes.profileView); - // context.read().onNavbarTapped(4); - // Navigator.pop(context); - }), - ], - ).toWhiteContainer(width: double.infinity, pading: const EdgeInsets.all(12), borderRadius: 0), - 10.height, - CustomSettingOptionsTile( - leadingWidget: const Icon(Icons.translate, size: 20), - titleText: LocaleKeys.language.tr(), - isForLanguage: true, - onTap: () { - context.read().changeLanguage(context); - Future.delayed(Duration(seconds: 1), () { - setState(() {}); - }); - }, - ).toWhiteContainer(width: double.infinity, pading: const EdgeInsets.all(12), borderRadius: 0), - 10.height, - (AppState().currentAppType == AppType.provider) - ? Column( - children: [ - CustomSettingOptionsTile( - leadingWidget: SizedBox( - width: 16, - height: 16, - child: SvgPicture.asset( - MyAssets.icStar, - color: MyColors.primaryColor, - ), - ), - titleText: LocaleKeys.mySubscription.tr(), - subTitle: AppState().getproviderSubscription.first.name ?? "Silver", - isForLanguage: false, + Column( + children: [ + CustomSettingOptionsTile( + leadingWidget: const Icon(Icons.quickreply_outlined, size: 20), + titleText: LocaleKeys.requests.tr(), needBorderBelow: true, onTap: () { - navigateWithName(context, AppRoutes.mySubscriptionsPage); - }, - ), + context.read().onNavbarTapped(4); + Navigator.pop(context); + }), + if (AppState().currentAppType == AppType.customer) ...[ CustomSettingOptionsTile( - leadingWidget: SizedBox( - width: 16, - height: 16, - child: SvgPicture.asset( - MyAssets.icGroupStar, - // color: MyColors.primaryColor, - ), - ), - titleText: LocaleKeys.subscriptions.tr(), - subTitle: null, - isForLanguage: false, + leadingWidget: const Icon(Icons.favorite, size: 20), + titleText: LocaleKeys.favoriteList.tr(), needBorderBelow: true, - onTap: () { - navigateWithName(context, AppRoutes.subscriptionsPage); - }, + onTap: () => navigateWithName(context, AppRoutes.favoriteListView), ), - CustomSettingOptionsTile( - leadingWidget: SizedBox( - width: 16, - height: 16, - child: SvgPicture.asset( - MyAssets.icGroupStar, - // color: MyColors.primaryColor, - ), - ), - titleText: LocaleKeys.defineLicenses.tr(), - subTitle: null, - isForLanguage: false, + ], + CustomSettingOptionsTile( + leadingWidget: const Icon(Icons.settings, size: 20), + titleText: LocaleKeys.settings.tr(), + needBorderBelow: true, + onTap: () {}, + //navigateWithName(context, AppRoutes.settingOptionsInviteFriends), + ), + CustomSettingOptionsTile( + leadingWidget: const Icon(Icons.question_mark_outlined, size: 20), + titleText: LocaleKeys.help.tr(), + needBorderBelow: true, + onTap: () => navigateWithName(context, AppRoutes.settingOptionsHelp), + ), + CustomSettingOptionsTile( + leadingWidget: const Icon(Icons.person, size: 20), + titleText: LocaleKeys.account.tr(), needBorderBelow: false, onTap: () { - navigateWithName(context, AppRoutes.providerLicensePage); - }, + navigateWithName(context, AppRoutes.profileView); + // context.read().onNavbarTapped(4); + // Navigator.pop(context); + }), + ], + ).toWhiteContainer(width: double.infinity, pading: const EdgeInsets.all(12), borderRadius: 0), + 10.height, + CustomSettingOptionsTile( + leadingWidget: const Icon(Icons.translate, size: 20), + titleText: LocaleKeys.language.tr(), + isForLanguage: true, + onTap: () { + context.read().changeLanguage(context); + Future.delayed(Duration(seconds: 1), () { + setState(() {}); + }); + }, + ).toWhiteContainer(width: double.infinity, pading: const EdgeInsets.all(12), borderRadius: 0), + 10.height, + (AppState().currentAppType == AppType.provider) + ? Column( + children: [ + CustomSettingOptionsTile( + leadingWidget: SizedBox( + width: 16, + height: 16, + child: SvgPicture.asset( + MyAssets.icStar, + color: MyColors.primaryColor, + ), ), - // CustomSettingOptionsTile( - // leadingWidget: SizedBox( - // width: 16, - // height: 16, - // child: SvgPicture.asset( - // MyAssets.providersIcon, - // // color: MyColors.primaryColor, - // ), - // ), - // titleText: "Users", - // subTitle: null, - // isForLanguage: false, - // needBorderBelow: false, - // onTap: () { - // navigateWithName(context, AppRoutes.dealerUser, arguments: AppState().getUser.data!.userInfo!.id.toString()); - // }, - // ) - ], - ).toWhiteContainer(width: double.infinity, pading: const EdgeInsets.all(12), borderRadius: 0) - : const SizedBox(), - (AppState().currentAppType == AppType.provider) ? 10.height : const SizedBox(), - ], - )), + titleText: LocaleKeys.mySubscription.tr(), + subTitle: AppState().getproviderSubscription.first.name, + isForLanguage: false, + needBorderBelow: true, + onTap: () { + navigateWithName(context, AppRoutes.mySubscriptionsPage); + }, + ), + CustomSettingOptionsTile( + leadingWidget: SizedBox( + width: 16, + height: 16, + child: SvgPicture.asset( + MyAssets.icGroupStar, + // color: MyColors.primaryColor, + ), + ), + titleText: LocaleKeys.subscriptions.tr(), + subTitle: null, + isForLanguage: false, + needBorderBelow: true, + onTap: () { + navigateWithName(context, AppRoutes.subscriptionsPage); + }, + ), + CustomSettingOptionsTile( + leadingWidget: SizedBox( + width: 16, + height: 16, + child: SvgPicture.asset( + MyAssets.icGroupStar, + // color: MyColors.primaryColor, + ), + ), + titleText: LocaleKeys.defineLicenses.tr(), + subTitle: null, + isForLanguage: false, + needBorderBelow: false, + onTap: () { + navigateWithName(context, AppRoutes.providerLicensePage); + }, + ), + // CustomSettingOptionsTile( + // leadingWidget: SizedBox( + // width: 16, + // height: 16, + // child: SvgPicture.asset( + // MyAssets.providersIcon, + // // color: MyColors.primaryColor, + // ), + // ), + // titleText: "Users", + // subTitle: null, + // isForLanguage: false, + // needBorderBelow: false, + // onTap: () { + // navigateWithName(context, AppRoutes.dealerUser, arguments: AppState().getUser.data!.userInfo!.id.toString()); + // }, + // ) + ], + ).toWhiteContainer(width: double.infinity, pading: const EdgeInsets.all(12), borderRadius: 0) + : const SizedBox(), + (AppState().currentAppType == AppType.provider) ? 10.height : const SizedBox(), + ], + )), // : Expanded( // child: ListView( // children: [ diff --git a/lib/views/user/login_with_password_page.dart b/lib/views/user/login_with_password_page.dart index 4f25a70..094ba2d 100644 --- a/lib/views/user/login_with_password_page.dart +++ b/lib/views/user/login_with_password_page.dart @@ -34,7 +34,8 @@ class _LoginWithPasswordState extends State { //TODO: ONLY FOR DEVELOPMENT PURPOSE // String phoneNum = "966504278212", password = "Fa@1234"; - String phoneNum = "966504278213", password = "Fa@1234"; + // String phoneNum = "966504278213", password = "Fa@1234"; + String phoneNum = "", password = ""; // String phoneNum = "", password = ""; String email = ""; @@ -51,23 +52,23 @@ class _LoginWithPasswordState extends State { scheduleMicrotask(() { userVM = Provider.of(context, listen: false); context.read().getAvailBio(); - if (AppState().currentAppType == AppType.provider) { - phoneNum = "966530896018"; - password = "Amir@1234"; - // - // // phoneNum = "966569755630"; - // // password = "Amir12345@"; //AAmir Sal - // - // // phoneNum = "966598646795"; - // // password = "Zahoor@123"; - // - // // User Details - // // phoneNum = "966554870506"; - // // password = "Sikander123@"; // "lastName": "sik", - // // "email": "sikander@gmail.com", - // // phoneNum = "966569755630"; - // // password = "Amir12345@"; - } + // if (AppState().currentAppType == AppType.provider) { + // phoneNum = "966530896018"; + // password = "Amir@1234"; + // // + // // // phoneNum = "966569755630"; + // // // password = "Amir12345@"; //AAmir Sal + // // + // // // phoneNum = "966598646795"; + // // // password = "Zahoor@123"; + // // + // // // User Details + // // // phoneNum = "966554870506"; + // // // password = "Sikander123@"; // "lastName": "sik", + // // // "email": "sikander@gmail.com", + // // // phoneNum = "966569755630"; + // // // password = "Amir12345@"; + // } getCountryList(); }); diff --git a/pubspec.yaml b/pubspec.yaml index b85f5e6..77d9a49 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,28 +13,28 @@ dependencies: cupertino_icons: ^1.0.2 path_provider: ^2.0.4 - injector: ^2.0.0 + injector: ^4.0.0 provider: ^6.0.0 easy_localization: ^3.0.3 http: ^0.13.3 permission_handler: ^11.3.1 - flutter_svg: ^1.0.3 - sizer: ^2.0.15 + flutter_svg: ^2.0.9 + sizer: any fluttertoast: ^8.0.8 shared_preferences: ^2.0.6 - file_picker: ^6.1.1 - image_picker: ^0.8.4+4 + file_picker: ^8.1.2 + image_picker: ^1.1.2 equatable: ^2.0.3 - logger: 2.3.0 + logger: ^2.4.0 auto_size_text: any - shimmer: ^2.0.0 + shimmer: ^3.0.0 hexcolor: ^3.0.1 cached_network_image: any url_launcher: ^6.1.14 badges: ^3.0.2 carousel_slider: 5.0.0 dropdown_button2: ^2.0.0 - flutter_inappwebview: ^5.7.2+3 + flutter_inappwebview: ^6.1.5 country_code_picker: ^3.0.0 table_calendar: ^3.0.9 intl: any @@ -46,9 +46,9 @@ dependencies: # Firebase Packages - firebase_messaging: ^15.0.4 - firebase_core: ^3.3.0 - flutter_local_notifications: ^17.2.1+2 + firebase_messaging: ^15.1.3 + firebase_core: ^3.6.0 + flutter_local_notifications: ^17.2.3 # google @@ -60,15 +60,15 @@ dependencies: # Auth local_auth: ^2.2.0 - huawei_fido: ^6.3.0+305 - device_info_plus: ^10.1.0 - + #huawei_fido: ^6.3.0+305 + device_info_plus: ^11.0.0 + flutter_lints: any dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^2.0.0 + flutter: