From 0bbc288da9e9e417f770bfd616b68bb08af874ec Mon Sep 17 00:00:00 2001 From: Faiz Hashmi Date: Mon, 4 Nov 2024 11:25:24 +0300 Subject: [PATCH] Bug Fixes --- assets/langs/ar-SA.json | 4 +- assets/langs/en-US.json | 4 +- lib/classes/consts.dart | 1 + lib/config/routes.dart | 4 +- lib/generated/codegen_loader.g.dart | 8 +- lib/generated/locale_keys.g.dart | 2 + .../setting_utils_models/app_info_model.dart | 18 ++- lib/repositories/setting_options_repo.dart | 59 ++++++++ .../setting_options_view_model.dart | 15 +++ .../setting_options/setting_option_help.dart | 2 +- .../setting_options_app_info.dart | 24 +++- .../setting_options_contact_us.dart | 25 +++- .../setting_options/setting_options_more.dart | 38 +++++- .../setting_options_terms_and_conditions.dart | 127 ++++++++++++++++++ lib/views/user/complete_profile_page.dart | 58 ++++---- 15 files changed, 340 insertions(+), 49 deletions(-) create mode 100644 lib/views/setting_options/setting_options_terms_and_conditions.dart diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 995b20f..b8c0260 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -685,5 +685,7 @@ "noItemsToShow": "لا توجد عناصر لعرضها.", "serviceItem": "عنصر الخدمة", "createdBy": "تم الإنشاء بواسطة", - "createGroupServices": "إنشاء خدمات المجموعة" + "createGroupServices": "إنشاء خدمات المجموعة", + "logoutConfirmation": "هل أنت متأكد أنك تريد تسجيل الخروج؟", + "logoutConfirmationMessage": "سيتم تسجيل خروجك من التطبيق وسيتعين عليك إضافة اسم المستخدم وكلمة المرور مرة أخرى لتسجيل الدخول." } \ No newline at end of file diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 63f2094..37291bd 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -683,5 +683,7 @@ "noItemsToShow": "No Items to show.", "serviceItem": "Service Item", "createdBy": "Created By", - "createGroupServices": "Create Group Services" + "createGroupServices": "Create Group Services", + "logoutConfirmation": "Are you sure you want want to Logout?", + "logoutConfirmationMessage": "You will be logged out of the application and you have to add your username and password again to login" } \ No newline at end of file diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart index 59fd5a2..d6b0fc8 100644 --- a/lib/classes/consts.dart +++ b/lib/classes/consts.dart @@ -179,6 +179,7 @@ class ApiConsts { static String getAppInvitationLink = "${baseUrlServices}api/Common/AppInvitation_Get"; static String getContactInfo = "${baseUrlServices}api/Master/ContactInfo_Get"; static String getAppInfo = "${baseUrlServices}api/Master/AppInfo_Get"; + static String getTermsAndConditions = "${baseUrlServices}api/Master/TermAndCondition_Get"; static List closingUrls = ["PayFortResponse"]; } diff --git a/lib/config/routes.dart b/lib/config/routes.dart index 3521749..869d16b 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -25,6 +25,7 @@ import 'package:mc_common_app/views/setting_options/setting_options_contact_us.d import 'package:mc_common_app/views/setting_options/setting_options_faqs.dart'; import 'package:mc_common_app/views/setting_options/setting_options_invite_friends.dart'; import 'package:mc_common_app/views/setting_options/setting_options_more.dart'; +import 'package:mc_common_app/views/setting_options/setting_options_terms_and_conditions.dart'; import 'package:mc_common_app/views/shipping_management/shipping_management_view.dart'; import 'package:mc_common_app/views/user/change_email_page.dart'; import 'package:mc_common_app/views/user/change_mobile_page.dart'; @@ -128,7 +129,6 @@ class AppRoutes { static const String paymentMethodsView = "/paymentMethodsView"; //Shipping - static const shippingManagementView = "/shippingManagementView"; //Customer APP: Provider & Services @@ -150,6 +150,7 @@ class AppRoutes { static const String settingOptionsFaqs = "/settingOptionsFaqs"; static const String settingOptionsContactUs = "/settingOptionsContactUs"; static const String settingOptionsAppInfo = "/settingOptionsAppInfo"; + static const String settingOptionsTermsAndConditions = "/settingOptionsTermsAndConditions"; static const String settingOptionsMore = "/settingOptionsLanguages"; static const String settingOptionsInviteFriends = "/settingOptionsInviteFriends"; static const String settingOptionsHelp = "/settingOptionsHelp"; @@ -201,6 +202,7 @@ class AppRoutes { AppRoutes.settingOptionsFaqs: (context) => const SettingOptionsFAQs(), AppRoutes.settingOptionsContactUs: (context) => const SettingOptionsContactUs(), AppRoutes.settingOptionsAppInfo: (context) => const SettingOptionsAppInfo(), + AppRoutes.settingOptionsTermsAndConditions: (context) => const SettingOptionsTermsAndConditions(), AppRoutes.settingOptionsInviteFriends: (context) => const SettingOptionsInviteFriends(), AppRoutes.paymentMethodsView: (context) => PaymentMethodsView(paymentType: ModalRoute.of(context)!.settings.arguments as PaymentTypes), //Requests diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index 6776ad1..362771f 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -701,7 +701,9 @@ class CodegenLoader extends AssetLoader{ "noItemsToShow": "لا توجد عناصر لعرضها.", "serviceItem": "عنصر الخدمة", "createdBy": "تم الإنشاء بواسطة", - "createGroupServices": "إنشاء خدمات المجموعة" + "createGroupServices": "إنشاء خدمات المجموعة", + "logoutConfirmation": "هل أنت متأكد أنك تريد تسجيل الخروج؟", + "logoutConfirmationMessage": "سيتم تسجيل خروجك من التطبيق وسيتعين عليك إضافة اسم المستخدم وكلمة المرور مرة أخرى لتسجيل الدخول." }; static const Map en_US = { "firstTimeLogIn": "First Time Log In", @@ -1388,7 +1390,9 @@ static const Map en_US = { "noItemsToShow": "No Items to show.", "serviceItem": "Service Item", "createdBy": "Created By", - "createGroupServices": "Create Group Services" + "createGroupServices": "Create Group Services", + "logoutConfirmation": "Are you sure you want want to Logout?", + "logoutConfirmationMessage": "You will be logged out of the application and you have to add your username and password again to login" }; static const Map> mapLocales = {"ar_SA": ar_SA, "en_US": en_US}; } diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index c45dd17..4ebc019 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -665,5 +665,7 @@ abstract class LocaleKeys { static const serviceItem = 'serviceItem'; static const createdBy = 'createdBy'; static const createGroupServices = 'createGroupServices'; + static const logoutConfirmation = 'logoutConfirmation'; + static const logoutConfirmationMessage = 'logoutConfirmationMessage'; } diff --git a/lib/models/setting_utils_models/app_info_model.dart b/lib/models/setting_utils_models/app_info_model.dart index 1bb141f..d58a307 100644 --- a/lib/models/setting_utils_models/app_info_model.dart +++ b/lib/models/setting_utils_models/app_info_model.dart @@ -6,20 +6,24 @@ class AppInfoModel { String? content; bool? isActive; int? channel; - List? appInfoImages; + List? images; - AppInfoModel({this.id, this.header, this.content, this.isActive, this.channel, this.appInfoImages}); + AppInfoModel({this.id, this.header, this.content, this.isActive, this.channel, this.images}); - AppInfoModel.fromJson(Map json) { + AppInfoModel.fromJson(Map json, {bool isForTermsAndCondition = false}) { + String imagesKey = "appInfoImages"; + if (isForTermsAndCondition) { + imagesKey = "termAndConditionImages"; + } id = json['id']; header = json['header']; content = json['content']; isActive = json['isActive']; channel = json['channel']; - if (json['appInfoImages'] != null) { - appInfoImages = []; - json['appInfoImages'].forEach((v) { - appInfoImages!.add(ImageModel.fromJson(v)); + if (json[imagesKey] != null) { + images = []; + json[imagesKey].forEach((v) { + images!.add(ImageModel.fromJson(v)); }); } } diff --git a/lib/repositories/setting_options_repo.dart b/lib/repositories/setting_options_repo.dart index f4122ca..ebde82a 100644 --- a/lib/repositories/setting_options_repo.dart +++ b/lib/repositories/setting_options_repo.dart @@ -8,6 +8,7 @@ import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/setting_utils_models/app_info_model.dart'; import 'package:mc_common_app/models/setting_utils_models/contact_infos_model.dart'; import 'package:mc_common_app/models/setting_utils_models/faqs_model.dart'; +import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/utils.dart'; abstract class SettingOptionsRepo { @@ -16,6 +17,8 @@ abstract class SettingOptionsRepo { Future> getAllContactInfos(); Future> getAppInfoList(); + + Future> getTermsAndConditions(); } class SettingOptionsRepoImp extends SettingOptionsRepo { @@ -24,12 +27,24 @@ class SettingOptionsRepoImp extends SettingOptionsRepo { @override Future> getAllFaqs() async { + int channel = 0; + + if (AppState().currentAppType == AppType.provider) { + channel = 2; + } else { + channel = 3; + } + final params = { + "Channel": channel.toString(), + }; + String token = appState.getUser.data!.accessToken ?? ""; GenericRespModel genericRespModel = await injector.get().getJsonForObject( (json) => GenericRespModel.fromJson(json), ApiConsts.getAllFAQs, token: token, + queryParameters: params, ); if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) { @@ -66,10 +81,22 @@ class SettingOptionsRepoImp extends SettingOptionsRepo { Future> getAppInfoList() async { String token = appState.getUser.data!.accessToken ?? ""; + int channel = 0; + + if (AppState().currentAppType == AppType.provider) { + channel = 2; + } else { + channel = 3; + } + final params = { + "Channel": channel.toString(), + }; + GenericRespModel genericRespModel = await injector.get().getJsonForObject( (json) => GenericRespModel.fromJson(json), ApiConsts.getAppInfo, token: token, + queryParameters: params, ); if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) { @@ -81,4 +108,36 @@ class SettingOptionsRepoImp extends SettingOptionsRepo { return list; } + + @override + Future> getTermsAndConditions() async { + String token = appState.getUser.data!.accessToken ?? ""; + + int channel = 0; + + if (AppState().currentAppType == AppType.provider) { + channel = 2; + } else { + channel = 3; + } + final params = { + "Channel": channel.toString(), + }; + + GenericRespModel genericRespModel = await injector.get().getJsonForObject( + (json) => GenericRespModel.fromJson(json), + ApiConsts.getTermsAndConditions, + token: token, + queryParameters: params, + ); + + if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) { + Utils.showToast(genericRespModel.message ?? LocaleKeys.somethingWrong.tr()); + return []; + } + + List list = List.generate(genericRespModel.data.length, (index) => AppInfoModel.fromJson(genericRespModel.data[index], isForTermsAndCondition: true)); + + return list; + } } diff --git a/lib/view_models/setting_options_view_model.dart b/lib/view_models/setting_options_view_model.dart index d48d294..6692c30 100644 --- a/lib/view_models/setting_options_view_model.dart +++ b/lib/view_models/setting_options_view_model.dart @@ -56,4 +56,19 @@ class SettingOptionsVM extends BaseVM { setState(ViewState.idle); } } + + List termsAndConditionsList = []; + + Future getTermsAndConditions() async { + setState(ViewState.busy); + try { + termsAndConditionsList = await settingOptionsRepo.getTermsAndConditions(); + setState(ViewState.idle); + notifyListeners(); + } catch (e) { + logger.i(e.toString()); + Utils.showToast(e.toString()); + setState(ViewState.idle); + } + } } diff --git a/lib/views/setting_options/setting_option_help.dart b/lib/views/setting_options/setting_option_help.dart index 38fc246..21b62d0 100644 --- a/lib/views/setting_options/setting_option_help.dart +++ b/lib/views/setting_options/setting_option_help.dart @@ -57,7 +57,7 @@ class SettingOptionsHelp extends StatelessWidget { ), titleText: LocaleKeys.termPrivacy.tr(), needBorderBelow: true, - onTap: () {}, + onTap: () => navigateWithName(context, AppRoutes.settingOptionsTermsAndConditions), ), CustomSettingOptionsTile( leadingWidget: const Icon( diff --git a/lib/views/setting_options/setting_options_app_info.dart b/lib/views/setting_options/setting_options_app_info.dart index 998a514..d44e46c 100644 --- a/lib/views/setting_options/setting_options_app_info.dart +++ b/lib/views/setting_options/setting_options_app_info.dart @@ -2,15 +2,15 @@ import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; +import 'package:mc_common_app/models/chat_models/chat_message_model.dart'; import 'package:mc_common_app/models/setting_utils_models/app_info_model.dart'; -import 'package:mc_common_app/models/setting_utils_models/contact_infos_model.dart'; -import 'package:mc_common_app/models/setting_utils_models/faqs_model.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/utils/navigator.dart'; import 'package:mc_common_app/view_models/setting_options_view_model.dart'; import 'package:mc_common_app/views/advertisement/components/picked_images_container_widget.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; @@ -76,7 +76,7 @@ class _SettingOptionsAppInfoState extends State { 16.height, Expanded( child: RefreshIndicator( - onRefresh: () async => await settingsOptionsVM.getAllFaqs(), + onRefresh: () async => await settingsOptionsVM.getAppInfoList(), child: (settingsOptionsVM.state == ViewState.busy) ? const Center(child: CircularProgressIndicator()) : settingsOptionsVM.appInfoList.isEmpty @@ -95,12 +95,22 @@ class _SettingOptionsAppInfoState extends State { (appInfoModel.header ?? "").toString().toText(fontSize: 16), 5.height, (appInfoModel.content ?? "").toString().toText(fontSize: 14, color: MyColors.lightTextColor), - if (appInfoModel.appInfoImages != null && appInfoModel.appInfoImages!.isNotEmpty) ...[ + if (appInfoModel.images != null && appInfoModel.images!.isNotEmpty) ...[ PickedFilesContainer( - pickedFiles: appInfoModel.appInfoImages ?? [], + pickedFiles: appInfoModel.images ?? [], isReview: true, onAddFilePressed: () {}, - ), + ).onPress(() { + List images = []; + for (var image in appInfoModel.images!) { + images.add(MessageImageModel( + id: image.id, + isFromNetwork: true, + imageUrl: image.filePath, + )); + } + navigateWithName(context, AppRoutes.mediaViewerScreen, arguments: images); + }), ] ], ).toContainer(isShadowEnabled: true); diff --git a/lib/views/setting_options/setting_options_contact_us.dart b/lib/views/setting_options/setting_options_contact_us.dart index 027990d..817c3de 100644 --- a/lib/views/setting_options/setting_options_contact_us.dart +++ b/lib/views/setting_options/setting_options_contact_us.dart @@ -2,12 +2,16 @@ import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; +import 'package:mc_common_app/models/chat_models/chat_message_model.dart'; import 'package:mc_common_app/models/setting_utils_models/contact_infos_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/utils/utils.dart'; import 'package:mc_common_app/view_models/setting_options_view_model.dart'; import 'package:mc_common_app/views/advertisement/components/picked_images_container_widget.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; @@ -92,7 +96,14 @@ class _SettingOptionsContactUsState extends State { children: [ contactInfoModel.companyName.toString().toText(fontSize: 16), 5.height, - LocaleKeys.openMapLocation.tr().toText(isUnderLine: true, color: MyColors.darkPrimaryColor, fontSize: 10).onPress(() {}), + if (contactInfoModel.latitude != null && contactInfoModel.latitude!.isNotEmpty && contactInfoModel.longitude != null && contactInfoModel.longitude!.isNotEmpty) ...[ + LocaleKeys.openMapLocation.tr().toText(isUnderLine: true, color: MyColors.darkPrimaryColor, fontSize: 10).onPress(() async { + double latitude, longitude = 0.0; + latitude = double.parse(contactInfoModel.latitude!); + longitude = double.parse(contactInfoModel.longitude!); + await Utils.openLocationInMaps(latitude: latitude, longitude: longitude); + }), + ], showData("${LocaleKeys.phoneNumber.tr()}:", "${contactInfoModel.phoneNo}"), showData("${LocaleKeys.email.tr()}:", "${contactInfoModel.email}"), if (contactInfoModel.address != null && contactInfoModel.address!.isNotEmpty) ...[ @@ -104,7 +115,17 @@ class _SettingOptionsContactUsState extends State { pickedFiles: contactInfoModel.contactInfoImages ?? [], isReview: true, onAddFilePressed: () {}, - ), + ).onPress(() { + List images = []; + for (var image in contactInfoModel.contactInfoImages!) { + images.add(MessageImageModel( + id: image.id, + isFromNetwork: true, + imageUrl: image.filePath, + )); + } + navigateWithName(context, AppRoutes.mediaViewerScreen, arguments: images); + }), ] ], ).toContainer(isShadowEnabled: true); diff --git a/lib/views/setting_options/setting_options_more.dart b/lib/views/setting_options/setting_options_more.dart index 8f0642d..6fc21fc 100644 --- a/lib/views/setting_options/setting_options_more.dart +++ b/lib/views/setting_options/setting_options_more.dart @@ -5,9 +5,11 @@ import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/classes/consts.dart'; import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/generated/locale_keys.g.dart'; import 'package:mc_common_app/main.dart'; import 'package:mc_common_app/theme/colors.dart'; +import 'package:mc_common_app/utils/dialogs_and_bottomsheets.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/view_models/user_view_model.dart'; @@ -25,6 +27,38 @@ class SettingOptionsMore extends StatefulWidget { } class _SettingOptionsMoreState extends State { + void logoutConfirmationSheet(BuildContext context) { + return actionConfirmationBottomSheet( + context: context, + title: LocaleKeys.logoutConfirmation.tr().toText(fontSize: 28, isBold: true, letterSpacing: -1.44), + subtitle: LocaleKeys.logoutConfirmationMessage.tr(), + actionButtonYes: Expanded( + child: ShowFillButton( + maxHeight: 55, + title: LocaleKeys.yes.tr(), + fontSize: 15, + onPressed: () { + Navigator.pop(context); + context.read().logout(context); + }, + ), + ), + actionButtonNo: Expanded( + child: ShowFillButton( + maxHeight: 55, + isFilled: false, + borderColor: MyColors.darkPrimaryColor, + title: LocaleKeys.no.tr(), + txtColor: MyColors.darkPrimaryColor, + fontSize: 15, + onPressed: () { + Navigator.pop(context); + }, + ), + ), + ); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -196,7 +230,7 @@ class _SettingOptionsMoreState extends State { maxHeight: 55, title: LocaleKeys.logOut.tr(), onPressed: () { - context.read().logout(context); + logoutConfirmationSheet(context); }, ), ), @@ -207,5 +241,3 @@ class _SettingOptionsMoreState extends State { ); } } - - diff --git a/lib/views/setting_options/setting_options_terms_and_conditions.dart b/lib/views/setting_options/setting_options_terms_and_conditions.dart new file mode 100644 index 0000000..c00db1b --- /dev/null +++ b/lib/views/setting_options/setting_options_terms_and_conditions.dart @@ -0,0 +1,127 @@ +import 'dart:async'; + +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:mc_common_app/config/routes.dart'; +import 'package:mc_common_app/extensions/int_extensions.dart'; +import 'package:mc_common_app/extensions/string_extensions.dart'; +import 'package:mc_common_app/generated/locale_keys.g.dart'; +import 'package:mc_common_app/models/chat_models/chat_message_model.dart'; +import 'package:mc_common_app/models/setting_utils_models/app_info_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/view_models/setting_options_view_model.dart'; +import 'package:mc_common_app/views/advertisement/components/picked_images_container_widget.dart'; +import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:provider/provider.dart'; + +class SettingOptionsTermsAndConditions extends StatefulWidget { + const SettingOptionsTermsAndConditions({super.key}); + + @override + State createState() => _SettingOptionsTermsAndConditionsState(); +} + +class _SettingOptionsTermsAndConditionsState extends State { + late SettingOptionsVM settingsOptionsVM; + + @override + void initState() { + settingsOptionsVM = context.read(); + scheduleMicrotask(() async { + await settingsOptionsVM.getTermsAndConditions(); + }); + super.initState(); + } + + Widget showData(String title, String value) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + title.toText( + fontSize: 13, + color: MyColors.darkTextColor, + ), + if (title.isNotEmpty) 5.width, + Flexible( + child: value.toText( + fontSize: 13, + color: MyColors.lightTextColor, + ), + ) + ], + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: CustomAppBar( + title: LocaleKeys.termPrivacy.tr(), + isRemoveBackButton: false, + isDrawerEnabled: false, + onBackButtonTapped: () => Navigator.pop(context), + ), + body: Consumer( + builder: (BuildContext context, SettingOptionsVM settingsOptionsVM, Widget? child) { + return Container( + color: MyColors.backgroundColor, + width: double.infinity, + height: double.infinity, + child: Column( + children: [ + 16.height, + Expanded( + child: RefreshIndicator( + onRefresh: () async => await settingsOptionsVM.getTermsAndConditions(), + child: (settingsOptionsVM.state == ViewState.busy) + ? const Center(child: CircularProgressIndicator()) + : settingsOptionsVM.termsAndConditionsList.isEmpty + ? Padding( + padding: const EdgeInsets.all(21), + child: Center(child: LocaleKeys.somethingWrong.tr().toText(textAlign: TextAlign.center, fontSize: 16, color: MyColors.lightTextColor)), + ) + : ListView.separated( + itemCount: settingsOptionsVM.termsAndConditionsList.length, + padding: const EdgeInsets.all(16), + itemBuilder: (context, index) { + AppInfoModel appInfoModel = settingsOptionsVM.termsAndConditionsList[index]; + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + (appInfoModel.header ?? "").toString().toText(fontSize: 16), + 5.height, + (appInfoModel.content ?? "").toString().toText(fontSize: 14, color: MyColors.lightTextColor), + if (appInfoModel.images != null && appInfoModel.images!.isNotEmpty) ...[ + PickedFilesContainer( + pickedFiles: appInfoModel.images ?? [], + isReview: true, + onAddFilePressed: () {}, + ).onPress(() { + List images = []; + for (var image in appInfoModel.images!) { + images.add(MessageImageModel( + id: image.id, + isFromNetwork: true, + imageUrl: image.filePath, + )); + } + navigateWithName(context, AppRoutes.mediaViewerScreen, arguments: images); + }), + ] + ], + ).toContainer(isShadowEnabled: true); + }, + separatorBuilder: (context, index) => 16.height, + ), + )), + ], + ), + ); + }, + )); + } +} diff --git a/lib/views/user/complete_profile_page.dart b/lib/views/user/complete_profile_page.dart index 6d34181..d484d6f 100644 --- a/lib/views/user/complete_profile_page.dart +++ b/lib/views/user/complete_profile_page.dart @@ -1,12 +1,15 @@ import 'package:mc_common_app/classes/consts.dart'; +import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/theme/colors.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/register_user.dart'; +import 'package:mc_common_app/utils/navigator.dart'; import 'package:mc_common_app/view_models/user_view_model.dart'; import 'package:mc_common_app/widgets/common_widgets/app_bar.dart'; import 'package:mc_common_app/widgets/button/show_fill_button.dart'; +import 'package:mc_common_app/widgets/extensions/extensions_widget.dart'; import 'package:mc_common_app/widgets/txt_field.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; @@ -119,13 +122,12 @@ class _CompleteProfilePageState extends State { Consumer(builder: (BuildContext context, UserVM userVM, Widget? child) { return Checkbox( value: userVM.completeProfilePageCheckbox, - activeColor: Colors.blue, + activeColor: MyColors.darkPrimaryColor, onChanged: (value) { userVM.updateCompleteProfilePageCheckbox(value!); }, ); }), - Expanded( child: Text.rich( TextSpan( @@ -144,7 +146,9 @@ class _CompleteProfilePageState extends State { )) ], ), - ), + ).onPress(() { + navigateWithName(context, AppRoutes.settingOptionsTermsAndConditions); + }), ) // Column( // children: [ @@ -162,29 +166,35 @@ class _CompleteProfilePageState extends State { ], ), 16.height, - ShowFillButton( - title: LocaleKeys.save.tr(), - maxWidth: double.infinity, - onPressed: () { - bool validateStatus = userVM.dataValidation( - password: password, - firstName: firstName, - lastName: lastName, - email: email, - ); - if (validateStatus) { - userVM.performCompleteProfile( - context, + Consumer(builder: (BuildContext context, UserVM userVM, Widget? child) { + return ShowFillButton( + title: LocaleKeys.save.tr(), + maxWidth: double.infinity, + isDisabled: !userVM.completeProfilePageCheckbox, + onPressed: () { + if (!userVM.completeProfilePageCheckbox) { + return; + } + bool validateStatus = userVM.dataValidation( password: password, - confirmPassword: confirmPassword!, - firstName: firstName!, - lastName: lastName!, - email: email!, - userId: widget.user.data!.userId ?? "", - isNeedToPassToken: widget.user.data!.isNeedToPassToken, + firstName: firstName, + lastName: lastName, + email: email, ); - } - }), + if (validateStatus) { + userVM.performCompleteProfile( + context, + password: password, + confirmPassword: confirmPassword!, + firstName: firstName!, + lastName: lastName!, + email: email!, + userId: widget.user.data!.userId ?? "", + isNeedToPassToken: widget.user.data!.isNeedToPassToken, + ); + } + }); + }), 16.height, ], ),