Bug Fixes

aamir_dev
Faiz Hashmi 1 year ago
parent 3d9099d9e7
commit 0bbc288da9

@ -685,5 +685,7 @@
"noItemsToShow": "لا توجد عناصر لعرضها.", "noItemsToShow": "لا توجد عناصر لعرضها.",
"serviceItem": "عنصر الخدمة", "serviceItem": "عنصر الخدمة",
"createdBy": "تم الإنشاء بواسطة", "createdBy": "تم الإنشاء بواسطة",
"createGroupServices": "إنشاء خدمات المجموعة" "createGroupServices": "إنشاء خدمات المجموعة",
"logoutConfirmation": "هل أنت متأكد أنك تريد تسجيل الخروج؟",
"logoutConfirmationMessage": "سيتم تسجيل خروجك من التطبيق وسيتعين عليك إضافة اسم المستخدم وكلمة المرور مرة أخرى لتسجيل الدخول."
} }

@ -683,5 +683,7 @@
"noItemsToShow": "No Items to show.", "noItemsToShow": "No Items to show.",
"serviceItem": "Service Item", "serviceItem": "Service Item",
"createdBy": "Created By", "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"
} }

@ -179,6 +179,7 @@ class ApiConsts {
static String getAppInvitationLink = "${baseUrlServices}api/Common/AppInvitation_Get"; static String getAppInvitationLink = "${baseUrlServices}api/Common/AppInvitation_Get";
static String getContactInfo = "${baseUrlServices}api/Master/ContactInfo_Get"; static String getContactInfo = "${baseUrlServices}api/Master/ContactInfo_Get";
static String getAppInfo = "${baseUrlServices}api/Master/AppInfo_Get"; static String getAppInfo = "${baseUrlServices}api/Master/AppInfo_Get";
static String getTermsAndConditions = "${baseUrlServices}api/Master/TermAndCondition_Get";
static List<String> closingUrls = ["PayFortResponse"]; static List<String> closingUrls = ["PayFortResponse"];
} }

@ -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_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_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_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/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_email_page.dart';
import 'package:mc_common_app/views/user/change_mobile_page.dart'; import 'package:mc_common_app/views/user/change_mobile_page.dart';
@ -128,7 +129,6 @@ class AppRoutes {
static const String paymentMethodsView = "/paymentMethodsView"; static const String paymentMethodsView = "/paymentMethodsView";
//Shipping //Shipping
static const shippingManagementView = "/shippingManagementView"; static const shippingManagementView = "/shippingManagementView";
//Customer APP: Provider & Services //Customer APP: Provider & Services
@ -150,6 +150,7 @@ class AppRoutes {
static const String settingOptionsFaqs = "/settingOptionsFaqs"; static const String settingOptionsFaqs = "/settingOptionsFaqs";
static const String settingOptionsContactUs = "/settingOptionsContactUs"; static const String settingOptionsContactUs = "/settingOptionsContactUs";
static const String settingOptionsAppInfo = "/settingOptionsAppInfo"; static const String settingOptionsAppInfo = "/settingOptionsAppInfo";
static const String settingOptionsTermsAndConditions = "/settingOptionsTermsAndConditions";
static const String settingOptionsMore = "/settingOptionsLanguages"; static const String settingOptionsMore = "/settingOptionsLanguages";
static const String settingOptionsInviteFriends = "/settingOptionsInviteFriends"; static const String settingOptionsInviteFriends = "/settingOptionsInviteFriends";
static const String settingOptionsHelp = "/settingOptionsHelp"; static const String settingOptionsHelp = "/settingOptionsHelp";
@ -201,6 +202,7 @@ class AppRoutes {
AppRoutes.settingOptionsFaqs: (context) => const SettingOptionsFAQs(), AppRoutes.settingOptionsFaqs: (context) => const SettingOptionsFAQs(),
AppRoutes.settingOptionsContactUs: (context) => const SettingOptionsContactUs(), AppRoutes.settingOptionsContactUs: (context) => const SettingOptionsContactUs(),
AppRoutes.settingOptionsAppInfo: (context) => const SettingOptionsAppInfo(), AppRoutes.settingOptionsAppInfo: (context) => const SettingOptionsAppInfo(),
AppRoutes.settingOptionsTermsAndConditions: (context) => const SettingOptionsTermsAndConditions(),
AppRoutes.settingOptionsInviteFriends: (context) => const SettingOptionsInviteFriends(), AppRoutes.settingOptionsInviteFriends: (context) => const SettingOptionsInviteFriends(),
AppRoutes.paymentMethodsView: (context) => PaymentMethodsView(paymentType: ModalRoute.of(context)!.settings.arguments as PaymentTypes), AppRoutes.paymentMethodsView: (context) => PaymentMethodsView(paymentType: ModalRoute.of(context)!.settings.arguments as PaymentTypes),
//Requests //Requests

@ -701,7 +701,9 @@ class CodegenLoader extends AssetLoader{
"noItemsToShow": "لا توجد عناصر لعرضها.", "noItemsToShow": "لا توجد عناصر لعرضها.",
"serviceItem": "عنصر الخدمة", "serviceItem": "عنصر الخدمة",
"createdBy": "تم الإنشاء بواسطة", "createdBy": "تم الإنشاء بواسطة",
"createGroupServices": "إنشاء خدمات المجموعة" "createGroupServices": "إنشاء خدمات المجموعة",
"logoutConfirmation": "هل أنت متأكد أنك تريد تسجيل الخروج؟",
"logoutConfirmationMessage": "سيتم تسجيل خروجك من التطبيق وسيتعين عليك إضافة اسم المستخدم وكلمة المرور مرة أخرى لتسجيل الدخول."
}; };
static const Map<String,dynamic> en_US = { static const Map<String,dynamic> en_US = {
"firstTimeLogIn": "First Time Log In", "firstTimeLogIn": "First Time Log In",
@ -1388,7 +1390,9 @@ static const Map<String,dynamic> en_US = {
"noItemsToShow": "No Items to show.", "noItemsToShow": "No Items to show.",
"serviceItem": "Service Item", "serviceItem": "Service Item",
"createdBy": "Created By", "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<String, Map<String,dynamic>> mapLocales = {"ar_SA": ar_SA, "en_US": en_US}; static const Map<String, Map<String,dynamic>> mapLocales = {"ar_SA": ar_SA, "en_US": en_US};
} }

@ -665,5 +665,7 @@ abstract class LocaleKeys {
static const serviceItem = 'serviceItem'; static const serviceItem = 'serviceItem';
static const createdBy = 'createdBy'; static const createdBy = 'createdBy';
static const createGroupServices = 'createGroupServices'; static const createGroupServices = 'createGroupServices';
static const logoutConfirmation = 'logoutConfirmation';
static const logoutConfirmationMessage = 'logoutConfirmationMessage';
} }

@ -6,20 +6,24 @@ class AppInfoModel {
String? content; String? content;
bool? isActive; bool? isActive;
int? channel; int? channel;
List<ImageModel>? appInfoImages; List<ImageModel>? 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<String, dynamic> json) { AppInfoModel.fromJson(Map<String, dynamic> json, {bool isForTermsAndCondition = false}) {
String imagesKey = "appInfoImages";
if (isForTermsAndCondition) {
imagesKey = "termAndConditionImages";
}
id = json['id']; id = json['id'];
header = json['header']; header = json['header'];
content = json['content']; content = json['content'];
isActive = json['isActive']; isActive = json['isActive'];
channel = json['channel']; channel = json['channel'];
if (json['appInfoImages'] != null) { if (json[imagesKey] != null) {
appInfoImages = <ImageModel>[]; images = <ImageModel>[];
json['appInfoImages'].forEach((v) { json[imagesKey].forEach((v) {
appInfoImages!.add(ImageModel.fromJson(v)); images!.add(ImageModel.fromJson(v));
}); });
} }
} }

@ -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/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/contact_infos_model.dart';
import 'package:mc_common_app/models/setting_utils_models/faqs_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'; import 'package:mc_common_app/utils/utils.dart';
abstract class SettingOptionsRepo { abstract class SettingOptionsRepo {
@ -16,6 +17,8 @@ abstract class SettingOptionsRepo {
Future<List<ContactInfoModel>> getAllContactInfos(); Future<List<ContactInfoModel>> getAllContactInfos();
Future<List<AppInfoModel>> getAppInfoList(); Future<List<AppInfoModel>> getAppInfoList();
Future<List<AppInfoModel>> getTermsAndConditions();
} }
class SettingOptionsRepoImp extends SettingOptionsRepo { class SettingOptionsRepoImp extends SettingOptionsRepo {
@ -24,12 +27,24 @@ class SettingOptionsRepoImp extends SettingOptionsRepo {
@override @override
Future<List<FAQsModel>> getAllFaqs() async { Future<List<FAQsModel>> 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 ?? ""; String token = appState.getUser.data!.accessToken ?? "";
GenericRespModel genericRespModel = await injector.get<ApiClient>().getJsonForObject( GenericRespModel genericRespModel = await injector.get<ApiClient>().getJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.getAllFAQs, ApiConsts.getAllFAQs,
token: token, token: token,
queryParameters: params,
); );
if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) { if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) {
@ -66,10 +81,22 @@ class SettingOptionsRepoImp extends SettingOptionsRepo {
Future<List<AppInfoModel>> getAppInfoList() async { Future<List<AppInfoModel>> getAppInfoList() async {
String token = appState.getUser.data!.accessToken ?? ""; 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<ApiClient>().getJsonForObject( GenericRespModel genericRespModel = await injector.get<ApiClient>().getJsonForObject(
(json) => GenericRespModel.fromJson(json), (json) => GenericRespModel.fromJson(json),
ApiConsts.getAppInfo, ApiConsts.getAppInfo,
token: token, token: token,
queryParameters: params,
); );
if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) { if (genericRespModel.messageStatus != 1 || genericRespModel.data == null) {
@ -81,4 +108,36 @@ class SettingOptionsRepoImp extends SettingOptionsRepo {
return list; return list;
} }
@override
Future<List<AppInfoModel>> 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<ApiClient>().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<AppInfoModel> list = List.generate(genericRespModel.data.length, (index) => AppInfoModel.fromJson(genericRespModel.data[index], isForTermsAndCondition: true));
return list;
}
} }

@ -56,4 +56,19 @@ class SettingOptionsVM extends BaseVM {
setState(ViewState.idle); setState(ViewState.idle);
} }
} }
List<AppInfoModel> termsAndConditionsList = [];
Future<void> 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);
}
}
} }

@ -57,7 +57,7 @@ class SettingOptionsHelp extends StatelessWidget {
), ),
titleText: LocaleKeys.termPrivacy.tr(), titleText: LocaleKeys.termPrivacy.tr(),
needBorderBelow: true, needBorderBelow: true,
onTap: () {}, onTap: () => navigateWithName(context, AppRoutes.settingOptionsTermsAndConditions),
), ),
CustomSettingOptionsTile( CustomSettingOptionsTile(
leadingWidget: const Icon( leadingWidget: const Icon(

@ -2,15 +2,15 @@ import 'dart:async';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.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/int_extensions.dart';
import 'package:mc_common_app/extensions/string_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/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/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/theme/colors.dart';
import 'package:mc_common_app/utils/enums.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/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/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/common_widgets/app_bar.dart';
@ -76,7 +76,7 @@ class _SettingOptionsAppInfoState extends State<SettingOptionsAppInfo> {
16.height, 16.height,
Expanded( Expanded(
child: RefreshIndicator( child: RefreshIndicator(
onRefresh: () async => await settingsOptionsVM.getAllFaqs(), onRefresh: () async => await settingsOptionsVM.getAppInfoList(),
child: (settingsOptionsVM.state == ViewState.busy) child: (settingsOptionsVM.state == ViewState.busy)
? const Center(child: CircularProgressIndicator()) ? const Center(child: CircularProgressIndicator())
: settingsOptionsVM.appInfoList.isEmpty : settingsOptionsVM.appInfoList.isEmpty
@ -95,12 +95,22 @@ class _SettingOptionsAppInfoState extends State<SettingOptionsAppInfo> {
(appInfoModel.header ?? "").toString().toText(fontSize: 16), (appInfoModel.header ?? "").toString().toText(fontSize: 16),
5.height, 5.height,
(appInfoModel.content ?? "").toString().toText(fontSize: 14, color: MyColors.lightTextColor), (appInfoModel.content ?? "").toString().toText(fontSize: 14, color: MyColors.lightTextColor),
if (appInfoModel.appInfoImages != null && appInfoModel.appInfoImages!.isNotEmpty) ...[ if (appInfoModel.images != null && appInfoModel.images!.isNotEmpty) ...[
PickedFilesContainer( PickedFilesContainer(
pickedFiles: appInfoModel.appInfoImages ?? [], pickedFiles: appInfoModel.images ?? [],
isReview: true, isReview: true,
onAddFilePressed: () {}, onAddFilePressed: () {},
), ).onPress(() {
List<MessageImageModel> 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); ).toContainer(isShadowEnabled: true);

@ -2,12 +2,16 @@ import 'dart:async';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.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/int_extensions.dart';
import 'package:mc_common_app/extensions/string_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/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/models/setting_utils_models/contact_infos_model.dart';
import 'package:mc_common_app/theme/colors.dart'; import 'package:mc_common_app/theme/colors.dart';
import 'package:mc_common_app/utils/enums.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/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/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/common_widgets/app_bar.dart';
@ -92,7 +96,14 @@ class _SettingOptionsContactUsState extends State<SettingOptionsContactUs> {
children: [ children: [
contactInfoModel.companyName.toString().toText(fontSize: 16), contactInfoModel.companyName.toString().toText(fontSize: 16),
5.height, 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.phoneNumber.tr()}:", "${contactInfoModel.phoneNo}"),
showData("${LocaleKeys.email.tr()}:", "${contactInfoModel.email}"), showData("${LocaleKeys.email.tr()}:", "${contactInfoModel.email}"),
if (contactInfoModel.address != null && contactInfoModel.address!.isNotEmpty) ...[ if (contactInfoModel.address != null && contactInfoModel.address!.isNotEmpty) ...[
@ -104,7 +115,17 @@ class _SettingOptionsContactUsState extends State<SettingOptionsContactUs> {
pickedFiles: contactInfoModel.contactInfoImages ?? [], pickedFiles: contactInfoModel.contactInfoImages ?? [],
isReview: true, isReview: true,
onAddFilePressed: () {}, onAddFilePressed: () {},
), ).onPress(() {
List<MessageImageModel> 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); ).toContainer(isShadowEnabled: true);

@ -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/classes/consts.dart';
import 'package:mc_common_app/config/routes.dart'; import 'package:mc_common_app/config/routes.dart';
import 'package:mc_common_app/extensions/int_extensions.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/generated/locale_keys.g.dart';
import 'package:mc_common_app/main.dart'; import 'package:mc_common_app/main.dart';
import 'package:mc_common_app/theme/colors.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/enums.dart';
import 'package:mc_common_app/utils/navigator.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/view_models/user_view_model.dart';
@ -25,6 +27,38 @@ class SettingOptionsMore extends StatefulWidget {
} }
class _SettingOptionsMoreState extends State<SettingOptionsMore> { class _SettingOptionsMoreState extends State<SettingOptionsMore> {
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<UserVM>().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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Scaffold( return Scaffold(
@ -196,7 +230,7 @@ class _SettingOptionsMoreState extends State<SettingOptionsMore> {
maxHeight: 55, maxHeight: 55,
title: LocaleKeys.logOut.tr(), title: LocaleKeys.logOut.tr(),
onPressed: () { onPressed: () {
context.read<UserVM>().logout(context); logoutConfirmationSheet(context);
}, },
), ),
), ),
@ -207,5 +241,3 @@ class _SettingOptionsMoreState extends State<SettingOptionsMore> {
); );
} }
} }

@ -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<SettingOptionsTermsAndConditions> createState() => _SettingOptionsTermsAndConditionsState();
}
class _SettingOptionsTermsAndConditionsState extends State<SettingOptionsTermsAndConditions> {
late SettingOptionsVM settingsOptionsVM;
@override
void initState() {
settingsOptionsVM = context.read<SettingOptionsVM>();
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<MessageImageModel> 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,
),
)),
],
),
);
},
));
}
}

@ -1,12 +1,15 @@
import 'package:mc_common_app/classes/consts.dart'; 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/theme/colors.dart';
import 'package:mc_common_app/extensions/int_extensions.dart'; import 'package:mc_common_app/extensions/int_extensions.dart';
import 'package:mc_common_app/extensions/string_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/generated/locale_keys.g.dart';
import 'package:mc_common_app/models/user_models/register_user.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/view_models/user_view_model.dart';
import 'package:mc_common_app/widgets/common_widgets/app_bar.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/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:mc_common_app/widgets/txt_field.dart';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -119,13 +122,12 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
Consumer(builder: (BuildContext context, UserVM userVM, Widget? child) { Consumer(builder: (BuildContext context, UserVM userVM, Widget? child) {
return Checkbox( return Checkbox(
value: userVM.completeProfilePageCheckbox, value: userVM.completeProfilePageCheckbox,
activeColor: Colors.blue, activeColor: MyColors.darkPrimaryColor,
onChanged: (value) { onChanged: (value) {
userVM.updateCompleteProfilePageCheckbox(value!); userVM.updateCompleteProfilePageCheckbox(value!);
}, },
); );
}), }),
Expanded( Expanded(
child: Text.rich( child: Text.rich(
TextSpan( TextSpan(
@ -144,7 +146,9 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
)) ))
], ],
), ),
), ).onPress(() {
navigateWithName(context, AppRoutes.settingOptionsTermsAndConditions);
}),
) )
// Column( // Column(
// children: [ // children: [
@ -162,29 +166,35 @@ class _CompleteProfilePageState extends State<CompleteProfilePage> {
], ],
), ),
16.height, 16.height,
ShowFillButton( Consumer(builder: (BuildContext context, UserVM userVM, Widget? child) {
title: LocaleKeys.save.tr(), return ShowFillButton(
maxWidth: double.infinity, title: LocaleKeys.save.tr(),
onPressed: () { maxWidth: double.infinity,
bool validateStatus = userVM.dataValidation( isDisabled: !userVM.completeProfilePageCheckbox,
password: password, onPressed: () {
firstName: firstName, if (!userVM.completeProfilePageCheckbox) {
lastName: lastName, return;
email: email, }
); bool validateStatus = userVM.dataValidation(
if (validateStatus) {
userVM.performCompleteProfile(
context,
password: password, password: password,
confirmPassword: confirmPassword!, firstName: firstName,
firstName: firstName!, lastName: lastName,
lastName: lastName!, email: email,
email: email!,
userId: widget.user.data!.userId ?? "",
isNeedToPassToken: widget.user.data!.isNeedToPassToken,
); );
} 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, 16.height,
], ],
), ),

Loading…
Cancel
Save