From 7e17bd2558ae8f927d39688bb15493988ea7e750 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Thu, 19 Oct 2023 10:44:32 +0300 Subject: [PATCH] localization i18 implementation --- l10n.yaml | 4 + .../api_routes/http_status_manger.dart | 18 +- .../localization/localization.dart | 88 +- .../api/service_requests_provider.dart | 6 +- lib/extensions/context_extension.dart | 9 +- lib/l10n/app_ar.arb | 249 +++ lib/l10n/app_en.arb | 249 +++ lib/main.dart | 20 +- lib/models/new_models/gas_refill_model.dart | 20 +- lib/models/subtitle.dart | 1336 ++++++++--------- .../common_widgets/app_bottom_nav_bar.dart | 13 +- lib/new_views/common_widgets/app_drawer.dart | 2 +- .../common_widgets/app_filled_button.dart | 4 +- .../app_floating_action_button.dart | 10 +- .../common_widgets/app_loading_manager.dart | 4 +- .../common_widgets/app_text_form_field.dart | 8 +- .../common_widgets/default_app_bar.dart | 4 +- .../single_item_drop_down_menu.dart | 6 +- .../land_page/contact_us_bottom_sheet.dart | 8 +- .../pages/land_page/dashboard_page.dart | 2 +- lib/new_views/pages/login_page.dart | 18 +- .../pages/new_gas_refill_request_page.dart | 49 +- .../pages/new_service_request_page.dart | 5 +- .../pages/new_transfer_request_page.dart | 5 +- .../device_transfer_details.dart | 29 +- .../request_device_transfer.dart | 7 +- .../update_device_transfer.dart | 15 +- lib/views/pages/login.dart | 19 +- lib/views/pages/register.dart | 41 +- .../create_sub_workorder_page.dart | 23 +- .../search_sub_workorder_page.dart | 13 +- .../spare_parts_details_bottom_sheet.dart | 14 +- .../work_order_details_bottom_sheet.dart | 9 +- .../sub_workorder/workorder_details.dart | 20 +- .../pages/sub_workorder/workorder_item.dart | 4 +- .../pages/sub_workorder/workorder_list.dart | 5 +- .../pages/sub_workorder/workorder_update.dart | 3 +- .../user/gas_refill/gas_refill_details.dart | 23 +- .../user/gas_refill/request_gas_refill.dart | 41 +- .../user/gas_refill/track_gas_refill.dart | 1 - lib/views/pages/user/land_page.dart | 2 +- .../notifications/notifications_list.dart | 5 +- .../notifications/notifications_page.dart | 6 +- lib/views/pages/user/profile_page.dart | 27 +- lib/views/pages/user/report_issues_page.dart | 18 +- .../pages/user/requests/create_request.dart | 29 +- .../future_request_service_details.dart | 5 +- .../report/create_service_report.dart | 90 +- .../requests/report/edit_service_report.dart | 110 +- .../report/future_service_report.dart | 7 +- .../pages/user/requests/request_details.dart | 73 +- .../pages/user/requests/requests_page.dart | 5 +- .../pages/user/visits/pantry/edit_pentry.dart | 13 +- .../visits/pantry/future_edit_pently.dart | 5 +- .../preventive_maintenance_visits_page.dart | 16 +- .../user/visits/regular_visits_page.dart | 16 +- .../visits/update_visits_group_sheet.dart | 13 +- .../pages/user/visits/visit_details.dart | 23 +- .../date_and_time/from_to_date_bar.dart | 7 +- .../departments/department_button.dart | 5 +- .../departments/single_department_picker.dart | 6 +- .../device_transfer_info_section.dart | 14 +- .../device_trancfer/device_transfer_item.dart | 6 +- .../device_trancfer/device_transfer_list.dart | 4 +- lib/views/widgets/dialogs/dialog.dart | 2 +- .../auto_complete_devices_field.dart | 2 +- .../equipment/auto_complete_models_field.dart | 2 +- .../widgets/equipment/device_button.dart | 15 +- lib/views/widgets/equipment/device_item.dart | 11 +- .../equipment/single_device_picker.dart | 9 +- .../gas_refill_create_details_item.dart | 6 +- .../widgets/gas_refill/gas_refill_item.dart | 7 +- .../widgets/gas_refill/gas_refill_list.dart | 4 +- .../gas_refill_update_details_item.dart | 7 +- .../hospital_auto_complete_field.dart | 5 +- .../hospital_auto_complete_field_new.dart | 5 +- .../widgets/hospitals/hospital_button.dart | 4 +- .../hospitals/single_hospital_picker.dart | 7 +- .../widgets/images/mini_one_file_picker.dart | 18 +- .../widgets/images/multi_image_picker.dart | 18 +- .../widgets/images/one_image_picker.dart | 8 +- .../widgets/loaders/loading_manager.dart | 4 +- .../parts/auto_complete_parts_field.dart | 2 +- lib/views/widgets/parts/part_item.dart | 2 +- .../auto_complete_devices_field.dart | 2 +- .../pentry/pentry_calibration_tool_form.dart | 7 +- .../widgets/pentry/pentry_info_form.dart | 13 +- .../widgets/pentry/pentry_pm_kit_form.dart | 7 +- .../pentry/pentry_ppm_check_list_form.dart | 9 +- .../requests/service_request_item.dart | 7 +- .../requests/service_request_list.dart | 4 +- .../service_request_update_dialog.dart | 17 +- .../search/asset_transfer_search_dialog.dart | 15 +- .../search/service_request_search_bar.dart | 19 +- .../widgets/search/visits_search_bar.dart | 23 +- lib/views/widgets/visits/visit_item.dart | 11 +- lib/views/widgets/visits/visits_list.dart | 4 +- pubspec.yaml | 1 + 98 files changed, 1853 insertions(+), 1333 deletions(-) create mode 100644 l10n.yaml create mode 100644 lib/l10n/app_ar.arb create mode 100644 lib/l10n/app_en.arb diff --git a/l10n.yaml b/l10n.yaml new file mode 100644 index 00000000..ce15a00b --- /dev/null +++ b/l10n.yaml @@ -0,0 +1,4 @@ +arb-dir: lib/l10n +template-arb-file: app_en.arb +output-localization-file: app_localizations.dart +untranslated-messages-file: localization_error.txt diff --git a/lib/controllers/api_routes/http_status_manger.dart b/lib/controllers/api_routes/http_status_manger.dart index f9405f62..a6b34094 100644 --- a/lib/controllers/api_routes/http_status_manger.dart +++ b/lib/controllers/api_routes/http_status_manger.dart @@ -1,10 +1,10 @@ import 'package:meta/meta.dart'; -import 'package:test_sa/models/subtitle.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; class HttpStatusManger { static String getStatusMessage({ @required int status, - @required Subtitle subtitle, + @required AppLocalizations subtitle, String messageFor400, String messageFor200, }) { @@ -13,27 +13,27 @@ class HttpStatusManger { return "careful null status"; if (status == -1) // client's request in process - return subtitle.currentlyServiceNotAvailable; + return subtitle.serverErrorMessage; if (status == -2) { // client's request in process - return subtitle.waitUntilYourRequestComplete; + return subtitle.requestLockMessage; } else if (status >= 200 && status < 300) { // client's request was successfully received - return messageFor200 ?? subtitle.requestCompleteSuccessfully; + return messageFor200 ?? subtitle.successfulRequestMessage; } else if (status >= 400 && status < 500) { // client's request have error switch (status) { case 400: - return messageFor400 ?? subtitle.failedToCompleteRequest; + return messageFor400 ?? subtitle.failedRequestMessage; default: - return subtitle.failedToCompleteRequest; + return subtitle.failedRequestMessage; } } else if (status >= 500) { // server error - return subtitle.currentlyServiceNotAvailable; + return subtitle.serverErrorMessage; } else { // no error match so return default error - return subtitle.failedToCompleteRequest; + return subtitle.failedRequestMessage; } } } diff --git a/lib/controllers/localization/localization.dart b/lib/controllers/localization/localization.dart index 182833e2..42afb6b4 100644 --- a/lib/controllers/localization/localization.dart +++ b/lib/controllers/localization/localization.dart @@ -1,44 +1,44 @@ -import 'dart:convert'; - -import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; -import 'package:test_sa/models/subtitle.dart'; - -class AppLocalization { - AppLocalization(this.locale); - - final Locale locale; - static AppLocalization of(BuildContext context) { - return Localizations.of(context, AppLocalization); - } - - Subtitle _subtitle; - Subtitle get subtitle => _subtitle; - - Future load() async { - String jsonStringValues = await rootBundle.loadString('assets/subtitles/${locale.languageCode}_subtitle.json'); - _subtitle = Subtitle.fromJson(json.decode(jsonStringValues)); - } - - // static member to have simple access to the delegate from Material App - static const LocalizationsDelegate delegate = _DemoLocalizationsDelegate(); -} - -class _DemoLocalizationsDelegate extends LocalizationsDelegate { - const _DemoLocalizationsDelegate(); - - @override - bool isSupported(Locale locale) { - return ['en', 'ar'].contains(locale.languageCode); - } - - @override - Future load(Locale locale) async { - AppLocalization localization = new AppLocalization(locale); - await localization.load(); - return localization; - } - - @override - bool shouldReload(LocalizationsDelegate old) => false; -} +// import 'dart:convert'; +// +// import 'package:flutter/material.dart'; +// import 'package:flutter/services.dart'; +// import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +// +// class AppLocalization { +// AppLocalization(this.locale); +// +// final Locale locale; +// static AppLocalization of(BuildContext context) { +// return Localizations.of(context, AppLocalization); +// } +// +// AppLocalizations _subtitle; +// Subtitle get subtitle => _subtitle; +// +// Future load() async { +// String jsonStringValues = await rootBundle.loadString('assets/subtitles/${locale.languageCode}_subtitle.json'); +// _subtitle = Subtitle.fromJson(json.decode(jsonStringValues)); +// } +// +// // static member to have simple access to the delegate from Material App +// static const LocalizationsDelegate delegate = _DemoLocalizationsDelegate(); +// } +// +// class _DemoLocalizationsDelegate extends LocalizationsDelegate { +// const _DemoLocalizationsDelegate(); +// +// @override +// bool isSupported(Locale locale) { +// return ['en', 'ar'].contains(locale.languageCode); +// } +// +// @override +// Future load(Locale locale) async { +// AppLocalization localization = new AppLocalization(locale); +// await localization.load(); +// return localization; +// } +// +// @override +// bool shouldReload(LocalizationsDelegate old) => false; +// } diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index 5aee9c12..0676a296 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -12,7 +12,7 @@ import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/service_request/service_request_search.dart'; -import 'package:test_sa/models/subtitle.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:test_sa/models/timer_model.dart'; import '../../../models/service_request/search_work_order.dart'; @@ -100,7 +100,7 @@ class ServiceRequestsProvider extends ChangeNotifier { @required String requestId, @required String host, @required User user, - @required Subtitle subtitle, + @required AppLocalizations subtitle, }) async { String userData = ''; if (user != null) { @@ -598,7 +598,7 @@ class ServiceRequestsProvider extends ChangeNotifier { @required int reportId, @required String host, @required User user, - @required Subtitle subtitle, + @required AppLocalizations subtitle, }) async { Response response; try { diff --git a/lib/extensions/context_extension.dart b/lib/extensions/context_extension.dart index 055336bf..47f0b238 100644 --- a/lib/extensions/context_extension.dart +++ b/lib/extensions/context_extension.dart @@ -1,15 +1,14 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:localization/localization.dart'; import 'package:provider/provider.dart'; import '../controllers/providers/settings/setting_provider.dart'; -import '../models/enums/translation_keys.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; extension BuildContextExtension on BuildContext { - String translate(TranslationKeys translationKey) { - return translationKey.name.i18n([Localizations.localeOf(this).toString()]); - } + AppLocalizations get translation => AppLocalizations.of(this); + + List get getIssues => [translation.reason1, translation.reason2, translation.reason3, translation.reason4, translation.reason5]; bool get isDark => Provider.of(this).theme == "dark"; } diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb new file mode 100644 index 00000000..8881e17f --- /dev/null +++ b/lib/l10n/app_ar.arb @@ -0,0 +1,249 @@ +{ + "serverErrorMessage": "الخدمة غير متاحة حاليا", + "failedRequestMessage": "الفشل في إكمال الطلب", + "successfulRequestMessage": "تم إكمال الطلب بنجاح", + "requestLockMessage": "انتظر حتى إكمال الطلب", + "cancel": "إلغاء", + "confirm": "تاكيد", + "done": "تم", + "exit": "إغلاق", + "exitAlert": "هل انت متاكد من رغبتك في إغلاق التطبيق؟", + "signOut": "تسجيل الخروج", + "logoutAlert": "هل انت متاكد من رغبتك في تسجيل الخروج؟", + "language": "اللغة", + "name": "الاسم", + "email": "البريد الالكتروني", + "phoneNumber": "رقم الهاتف", + "password": "كلمة المرور", + "confirmPassword": "تاكيد كلمة المرور", + "signIn": "تسجيل الدخول", + "signUp": "انشاء حساب", + "forgetPassword": "نسيت كلمة المرور", + "acceptTermsAndConditions": "موافقة علي الشروط والاحكام", + "emailValidateMessage": "البريد الالكتروني غير صحيح", + "nameValidateMessage": "الاسم مطلوب", + "passwordValidateMessage": "علي الاقل استخدم 6 حروف او ارقام", + "confirmPasswordValidateMessage": "كلمة المرور و تاكيد كلمة المرور غير متطابقان", + "phoneNumberValidateMessage": "رقم الهاتف غير صالح", + "termsAndConditionsValidateMessage": "موافقة علي الشروط والاحكام مطاوبة", + "update": "تحديث", + "step": "خطوة", + "forgetPasswordWithMark": "نسيت كلمة المرور؟", + "showPassword": "اظهار كلمة المرور", + "wrongEmailOrPassword": "البريد الالكتروني او كلمة المرور غير صحيح", + "emailExist": "البريد الالكتروني موجود بالفعل", + "phoneNumberExist": "رقم الهاتف موجود بالفعل", + "next": "التالي", + "back": "السابق", + "search": "بحث", + "searchByName": "بحث بالاسم", + "address": "العنوان", + "addressNotFound": "لا يوجد عنوان", + "addressValidateMessage": "العنوان مطلوب", + "dataNotFound": "لا يوجد تاريخ", + "description": "الوصف", + "descriptionNotFound": "لا يوجد وصف", + "descriptionValidateMessage": "الوصف مطلوب", + "edit": "تعدل", + "emailNotFound": "لا يوجد بريد الكتروني", + "from": "من", + "to": "إلى", + "linkNotFound": "لا يوجد رابط", + "nameNotFound": "لا يوجد إسم", + "phoneNumberNotFound": "لا يوجد رقم هاتف", + "title": "عنوان", + "titleNotFound": "لا يوجد عنوان", + "titleValidateMessage": "العنوان مطلوب", + "urlNotFound": "لا يوجد رابط", + "date": "تاريخ", + "status": "الحالة", + "code": "كود", + "serialNumber": "رقم تسلسلي", + "add": "اضافة", + "brand": "ماركة", + "clearSearch": "تنظيف البحث", + "closed": "غلق", + "create": "انشاء", + "createServiceRequest": "انشاء طلب خدمة", + "delete": "مسح", + "details": "تفاصيل", + "device": "جهاز", + "deviceArName": "اسم الجهاز بعربي", + "deviceName": "اسم الجهاز", + "deviceImages": "صور الجهاز", + "deviceModel": "مركة الجهاز", + "deviceRequired": "الجهاز مطلوب", + "deviceSN": "رقم تسلسلي للجهاز", + "engineerName": "اسم المهندس", + "engineerPhone": "رقم المهندس", + "facebook": "فيسبوك", + "faultDescription": "تفاصيل الخطأ", + "general": "تفاصيل العامة", + "hospital": "العميل", + "hospitalRequired": "العميل مطلوبة", + "hotLine": "الخط ساخن", + "jobSheetNumber": "رقم ورقة العمل", + "linkedIn": "لينكد إن", + "maintenanceIssue": "مشكلة الصيانة", + "maintenanceIssueRequired": "مطلوب مسألة صيانة", + "maxImagesNumberIs5": "أقصى عدد للصورة 5", + "model": "نموذج", + "nameExist": "الاسم موجود", + "newServiceRequest": "طلب خدمة جديدة", + "newWord": "جديد", + "noDateFound": "لم يتم العثور على تاريخ", + "noDeviceFound": "لم يتم العثور على جهاز", + "noHospitalFound": "لا يوجد عميل", + "noModelFound": "لم يتم العثور على نموذج", + "noServiceRequestFound": "لم يتم العثور على طلب خدمة", + "noSnFound": "لم يتم العثور على رقم تسلسلي", + "notifications": "إشعارات", + "notificationsNotFound": "لم يتم العثور على إشعارات", + "noUniteFound": "لا توجد اقسام", + "ourWebsite": "موقعنا", + "pickDevice": "اختر الجهاز", + "pickHospital": "اختر العميل", + "pickUnite": "اختر القسم", + "policy": "سياسة", + "reason1": "لم يؤكد المهندس موعد الزيارة قبل ساعتين من وقت الطلب", + "reason2": "يقوم المهندس بتغيير موعد الزيارة دون التنسيق معي", + "reason3": "لم يحضر المهندس في التاريخ / الوقت", + "reason4": "لا يمكنني الوصول إلى المهندس عن طريق الهاتف أو الرسائل القصيرة", + "reason5": "هناك تأخير في إحضار قطع الغيار", + "repaired": "تم الاصلاح", + "repeated": "معاد", + "reportIssue": "الإبلاغ عن مشكلة", + "requestInformation": "معلومات طلب", + "searchBySn": "البحث بالرقم التسلسلي", + "serviceRequestInformation": "معلومات طلب الخدمة", + "serviceRequests": "طلبات الخدمة", + "shareAntherIssue": "مشاركة قضية أخرى", + "shareApp": "مشاركة التطبيق", + "sn": "الرقم التسلسلي", + "submit": "إرسال", + "trackServiceRequest": "تتبع طلبات الخدمة", + "twitter": "تويتر", + "underRepair": "تحت الاصلاح", + "unite": "قسم", + "uniteRequired": "القسم مطلوب", + "visitDate": "تاريخ الزيارة", + "whatsApp": "واتساب", + "workPerformed": "العمل انجز", + "actualDate": "تاريخ الفعلي", + "expectDate": "التاريخ المتوقع", + "images": "الصور", + "imagesRequired": "الصور مطلوبة", + "noSerialNumberFound": "لا يوجد رقم تسلسلي", + "notYet": "ليس بعد", + "noVisitsFound": "لا توجد زيارات", + "onHold": "معلق", + "pickFromCamera": "الالتقاط من الكاميرا", + "pickFromGallery": "الاختيار من معرض صور", + "preventiveMaintenance": "الصيانة الوقائية", + "preventiveMaintenanceUpdatedSuccessfully": "تم تحديث الصيانة الوقائية بنجاح", + "regularVisits": "زيارات منتظمة", + "regularVisitsUpdatedSuccessfully": "تم تحديث الزيارات المنتظمة بنجاح", + "requiredStatus": "الحالة المطلوبة", + "updatePreventiveMaintenance": "تحديث الصيانة الوقائية", + "updateRegularVisits": "تحديث الزيارات المنتظمة", + "updateVisitsGroup": "تحديث مجموعة الزيارات", + "updatingDots": "تحديث ...", + "expectedVisitDate": "تاريخ الزيارة القادم", + "visitInformation": "معلومات الزيارة", + "travelingHours": "ساعات السفر", + "workingHours": "ساعات العمل", + "contactStatus": "تخصص", + "image": "صورة", + "pickImage": "اختر صورة", + "requiredImage": "الصورة مطلوبة", + "taskStatus": "حالة الطلب", + "activationAlert": "الحساب قيد المراجعة يرجى الانتظار حتى يتم تفعيله", + "attachImage": "ارفق صورة", + "callLastSituation": "اخر موقف للطلب", + "customer": "العميل", + "editServiceReport": "تعديل التقرير الخدمة", + "invoiceCode": "كود الفتورة", + "invoiceNumber": "رقم الفتورة", + "newServiceReport": "تقرير خدمة جديد", + "number": "رقم", + "operatingHours": "ساعات العمل", + "partNumberName": "رقم/اسم القطعة", + "quantity": "كمية", + "reasons": "الاسباب", + "reportStatus": "حالة التقرير", + "reportType": "نوع التقرير", + "callId": "رقم الطلب", + "requiredWord": "مطلوب", + "assetType": "نوع الاصل", + "workPreformed": "العمل المنجز", + "alert": "تنبيه", + "duplicateAlert": "تنبيه التكرار", + "duplicateAlertMessage": "هل أنت متأكد أنك تريد تكرار الطلب؟", + "duplicateRequest": "تكرار الطلب", + "orderWorkNumber": "رقم طلب العمل", + "assignedEmployee": "الموظف المعين", + "assetSN": "رقم تسلسلي للاصل ", + "assetName": "اسم الاصل", + "assetNumber": "رقم الاصل", + "site": "الموقع", + "maintenanceSituation": "موقع الصيانه", + "currentSituation": "الموقع الحالي", + "comment": "تعليق", + "updateServiceRequest": "تعديل طلب الخدمة", + "repairLocation": "موقع الإصلاح", + "travelingExpense": "مصاريف التنقل", + "startDate": "وقت البدء", + "requestedQuantity": "الكمية المطلوبة", + "deliveredQuantity": "الكمية المسلّمة", + "endDate": "وقت الانتهاء", + "destinationSite": "موقع الوجهه", + "building": "بناء", + "floor": "طابق", + "department": "قسم", + "room": "غرفه", + "actions": "اجراءات", + "deviceFiles": "ملفات الجهاز", + "pickFromFiles" : "اختر من الملفات", + "requiredFile" : "الملف مطلوب", + "pickFile" : "اختر ملف", + "login" : "تسجيل الدخول", + "enterCredsToLogin" : "أدخل بياناتك الخاصة لتسجيل الدخول", + "forgotPassword" : "نسيت كلمة السر؟", + "password": "كلمة السر", + "username" : "اسم المستخدم", + "requiredField" : "الحقل مطلوب", + "passwordLengthMessage" : "يجب أن تتكون كلمة السر من 6 خانات على الأقل", + "overview" : "نظرة عامة", + "myRequests" : "طلباتي", + "myAssets" : "ممتلكاتي", + "contactUs": "اتصل بنا", + "welcome" : "مرحبا،", + "openWhatsapp" : "الإنتقال الى الواتس اب", + "callUs" : "إتصل بنا", + "liveChat" : "محادثة حية", + "gasRefillRequest" : "طلب إعادة تعبئة غاز", + "transferRequest" : "طلب نقل", + "serviceRequest" : "طلب خدمة", + "newServiceRequest" : "طلب خدمة جديدة", + "newGasRefillRequest" : "طلب إعادة تعبئة غاز جديد", + "newTransferRequest" : "طلب نقل جديد", + "submitRequest" : "تأكيد الطلب", + "select" : "إختر", + "gasType" : "نوع الغاز", + "quantity" : "الكمية", + "cylinderType" : "نوع الأسطوانة", + "cylinderSize" : "حجم الأسطوانة", + "department" : "القسم", + "httpError" : "خطأ فشل الطلب", + "tryAgain" : "أعد المحاولة", + "destinationSite" : "موقع الوجهة", + "add": "أضف", + "site" : "الموقع", + "onlyNumbers": "يسمح بإدخال الأرقام فقط", + "youHaveToSelect" : "يجب عليك إختيار", + "building" : "المبنى", + "floor" : "الطابق", + "youHaveToAddRequests" : "يجب إضافة طلبات", + "createdSuccessfully" : "إكتمل الطلب بنجاح", + "failedToCompleteRequest" : "فشل إتمام الطلب" +} \ No newline at end of file diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb new file mode 100644 index 00000000..b66645ea --- /dev/null +++ b/lib/l10n/app_en.arb @@ -0,0 +1,249 @@ +{ + "serverErrorMessage": "Currently, Service not available", + "failedRequestMessage": "Failed to complete request", + "successfulRequestMessage": "Request complete successfully", + "requestLockMessage": "Wait until your request complete", + "cancel": "Cancel", + "confirm": "Confirm", + "done": "Done", + "exit": "Exit", + "exitAlert": "Are you sure you want to exit?", + "signOut": "Sign Out", + "logoutAlert": "Are you sure you want to Sign Out?", + "language": "English", + "name": "Name", + "email": "Email", + "phoneNumber": "Phone Number", + "password": "Password", + "confirmPassword": "Confirm Password", + "signIn": "Sign In", + "signUp": "Sign Up", + "forgetPassword": "Forget Password", + "acceptTermsAndConditions": "Accept Terms And Conditions", + "emailValidateMessage": "Not valid email", + "nameValidateMessage": "name is required", + "passwordValidateMessage": "at least 6 characters or numbers", + "confirmPasswordValidateMessage": "Password and confirm password not match", + "phoneNumberValidateMessage": "Not valid phone number", + "termsAndConditionsValidateMessage": "Accept terms and conditions is required", + "update": "Update", + "step": "Step", + "forgetPasswordWithMark": "Forget Password?", + "showPassword": "show password", + "wrongEmailOrPassword": "Wrong email or password", + "emailExist": "Email exist", + "phoneNumberExist": "Phone number exist", + "next": "Next", + "back": "Back", + "search": "Search", + "searchByName": "Search by name", + "address": "Address", + "addressNotFound": "Address not found", + "addressValidateMessage": "Address validateMessage", + "dataNotFound": "Data not found", + "description": "Description", + "descriptionNotFound": "Description not found", + "descriptionValidateMessage": "Description can't be empty", + "edit": "Edit", + "emailNotFound": "Email not found", + "from": "From", + "to": "To", + "linkNotFound": "Link not found", + "nameNotFound": "Name not found", + "phoneNumberNotFound": "Phone number not found", + "title": "Title", + "titleNotFound": "Title not found", + "titleValidateMessage": "Title Can't be empty", + "urlNotFound": "URL not found", + "date": "Date", + "status": "Status", + "code": "Code", + "serialNumber": "Serial Number", + "add": "Add", + "brand": "manufacture", + "clearSearch": "Clear Search", + "closed": "Closed", + "create": "Create", + "createServiceRequest": "Create Service Request", + "delete": "Delete", + "details": "Details", + "device": "Asset", + "deviceArName": "Asset Ar Name", + "deviceName": "Asset Name", + "deviceImages": "Asset Images", + "deviceModel": "Asset Model", + "deviceRequired": "Asset Required", + "deviceSN": "Asset Serial Number", + "engineerName": "Engineer Name", + "engineerPhone": "Engineer Phone", + "facebook": "facebook", + "faultDescription": "Fault Description", + "general": "General", + "hospital": "Site", + "hospitalRequired": "Site Required", + "hotLine": "Hot Line", + "jobSheetNumber": "Job Sheet Number", + "linkedIn": "linkedIn", + "maintenanceIssue": "Maintenance Issue", + "maintenanceIssueRequired": "maintenance Issue Required", + "maxImagesNumberIs5": "Maximum Images Number Is 5", + "model": "Model", + "nameExist": "Name Exist", + "newServiceRequest": "New Service Request", + "newWord": "New", + "noDateFound": "No Date Found", + "noDeviceFound": "No Asset Found", + "noHospitalFound": "No Site Found", + "noModelFound": "No Model Found", + "noServiceRequestFound": "No Service Request Found", + "noSnFound": "No SN Found", + "notifications": "Notifications", + "notificationsNotFound": "Notifications Not Found", + "noUniteFound": "No Unit Found", + "ourWebsite": "Our Website", + "pickDevice": "Pick Asset", + "pickHospital": "Pick Site", + "pickUnite": "Pick Unit", + "policy": "Policy", + "reason1": "The engineer didn't confirm visit date with 2 hours from the request time", + "reason2": "The engineer change the visit date without coordination with me", + "reason3": "the engineer didn't attend on date/time", + "reason4": "I can't reach engineer by phone or SMS", + "reason5": "There is delay ib bringing the spare parts", + "repaired": "Repaired", + "repeated": "Repeated", + "reportIssue": "Report a Issue", + "requestInformation": "request Information", + "searchBySn": "Search By Sn", + "serviceRequestInformation": "Service Request Information", + "serviceRequests": "Service Requests", + "shareAntherIssue": "share Another Issue", + "shareApp": "Share App", + "sn": "SN", + "submit": "Submit", + "trackServiceRequest": "Track Service Requests", + "twitter": "Twitter", + "underRepair": "Under Repair", + "unite": "Unit", + "uniteRequired": "Unit Required", + "visitDate": "Visit Date", + "whatsApp": "WhatsApp", + "workPerformed": "Work Performed", + "actualDate": "Actual Date", + "expectDate": "Expect Date", + "images": "Images", + "imagesRequired": "Images Required", + "noSerialNumberFound": "No Serial Number Found", + "notYet": "Not Yet", + "noVisitsFound": "No Visits Found", + "onHold": "On Hold", + "pickFromCamera": "Pick From Camera", + "pickFromGallery": "Pick From Gallery", + "preventiveMaintenance": "Preventive Maintenance", + "preventiveMaintenanceUpdatedSuccessfully": "Preventive Maintenance Updated Successfully", + "regularVisits": "Regular Visits", + "regularVisitsUpdatedSuccessfully": "Regular Visits Updated Successfully", + "requiredStatus": "Required Status", + "updatePreventiveMaintenance": "Update Preventive Maintenance", + "updateRegularVisits": "Update Regular Visits", + "updateVisitsGroup": "Update Visits Group", + "updatingDots": "Updating ...", + "expectedVisitDate": "Next Visit Date", + "visitInformation": "Visit Information", + "travelingHours": "Traveling Hours", + "workingHours": "Working Hours", + "contactStatus": "Assigned To", + "image": "Image", + "pickImage": "Pick Image", + "requiredImage": "Image Required", + "taskStatus": "Task Status", + "activationAlert": "Account under reviewing please wait until be activated", + "attachImage": "Attach Image", + "callLastSituation": "Call's Last Situation", + "customer": "Customer", + "editServiceReport": "Edit Work Order", + "invoiceCode": "Invoice Code", + "invoiceNumber": "Invoice Number", + "newServiceReport": "New Work Order", + "number": "Number", + "operatingHours": "Operating Hours", + "partNumberName": "Part Number/Name", + "quantity": "Quantity", + "reasons": "Reasons", + "reportStatus": "Report Status", + "reportType": "Report Type", + "callId": "Call Id", + "requiredWord": "required", + "assetType": "Asset Type", + "workPreformed": "Work Preformed", + "orderWorkNumber": "Order Work Number", + "assignedEmployee": "Assigned Employee", + "assetSN": "Asset S.N", + "assetName": "Asset Name", + "assetNumber": "Asset Number", + "site": "Site", + "maintenanceSituation": "Maintenance Situation", + "currentSituation": "Current Situation", + "alert": "Alert", + "duplicateAlert": "Duplicate Alert", + "duplicateAlertMessage": "Are you sure you want to duplicate request?", + "duplicateRequest": "Duplicate Request", + "comment": "Comment", + "updateServiceRequest": "Update Service Request", + "repairLocation": "Repair Location", + "travelingExpense": "Traveling Expense", + "startDate": "Start Date", + "requestedQuantity": "Requested Quantity", + "deliveredQuantity": "Delivered Quantity", + "endDate": "End Date", + "destinationSite": "Destination Site", + "building": "Building", + "floor": "Floor", + "department": "Department", + "room": "Room", + "actions": "Actions", + "deviceFiles": "Asset Files", + "pickFromFiles" : "Pick From Files", + "requiredFile" : "File Required", + "pickFile" : "Pick File", + "login" : "Login", + "enterCredsToLogin" : "Enter your credential to login", + "forgotPassword" : "Forgot Password?", + "password" : "Password", + "username" : "Username", + "requiredField" : "Required Field", + "passwordLengthMessage" : "Password must has at least 6 characters", + "overview" : "Overview", + "myRequests" : "My Request", + "myAssets" : "My Assets", + "contactUs": "Contact Us", + "welcome" : "Welcome,", + "openWhatsapp" : "Open WhatsApp", + "callUs" : "Call Us", + "liveChat" : "Live Chat", + "gasRefillRequest" : "Gas Refill Request", + "transferRequest" : "Transfer Request", + "serviceRequest" : "Service Request", + "newServiceRequest" : "New Service Request", + "newGasRefillRequest" : "New Gas Refill Request", + "newTransferRequest" : "New Transfer Request", + "submitRequest" : "Submit Request", + "select" : "Select", + "gasType": "Gas Type", + "quantity" : "Quantity", + "cylinderType" : "Cylinder Type", + "cylinderSize" : "Cylinder Size", + "department" : "Department", + "httpError" : "Error Request Failed", + "tryAgain" : "Try Again", + "destinationSite" : "Destination Site", + "add": "Add", + "site" : "Site", + "onlyNumbers": "Only Numbers Allowed", + "youHaveToSelect" : "You have to select", + "building" : "Building", + "floor" : "Floor", + "youHaveToAddRequests" : "You have to add requests", + "createdSuccessfully" : "Created successfully", + "failedToCompleteRequest" : "Failed to complete request" +} \ No newline at end of file diff --git a/lib/main.dart b/lib/main.dart index 7b023a2a..9ebc7366 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -78,6 +78,8 @@ import 'controllers/providers/api/user_provider.dart'; import 'controllers/providers/settings/setting_provider.dart'; import 'new_views/pages/new_gas_refill_request_page.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; + void main() async { WidgetsFlutterBinding.ensureInitialized(); if (Platform.isIOS) { @@ -119,8 +121,6 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (_) => CylinderSizeProvider()), ChangeNotifierProvider(create: (_) => DepartmentProvider()), ChangeNotifierProvider(create: (_) => SiteProvider()), - - ChangeNotifierProvider(create: (_) => HospitalsProvider()), ChangeNotifierProvider(create: (_) => DevicesProvider()), ChangeNotifierProvider(create: (_) => ServiceRequestsProvider()), @@ -159,11 +159,6 @@ class MyApp extends StatelessWidget { ChangeNotifierProvider(create: (_) => ServiceReportMaintenanceSituationProvider()), ChangeNotifierProvider(create: (_) => ServiceReportUsersProvider()), ChangeNotifierProvider(create: (_) => ServiceReportAssistantsEmployeeProvider()), - - - - - ], child: GestureDetector( onTap: () { @@ -176,14 +171,8 @@ class MyApp extends StatelessWidget { title: 'ATOMS', debugShowCheckedModeBanner: false, theme: settingProvider.theme == "dark" ? AppThemes.darkTheme : AppThemes.lightTheme, - localizationsDelegates: [ - LocalJsonLocalization.delegate, - AppLocalization.delegate, - GlobalMaterialLocalizations.delegate, - GlobalWidgetsLocalizations.delegate, - GlobalCupertinoLocalizations.delegate, - ], - supportedLocales: const [Locale('en'), Locale('ar')], + localizationsDelegates: AppLocalizations.localizationsDelegates, + supportedLocales: AppLocalizations.supportedLocales, locale: Locale(settingProvider.language ?? 'en'), initialRoute: SplashPage.routeName, routes: { @@ -194,7 +183,6 @@ class MyApp extends StatelessWidget { NewServiceRequestPage.routeName: (_) => const NewServiceRequestPage(), NewGasRefillRequestPage.routeName: (_) => const NewGasRefillRequestPage(), NewTransferRequestPage.routeName: (_) => const NewTransferRequestPage(), - ReportIssuesPage.id: (_) => const ReportIssuesPage(), RequestGasRefill.id: (_) => const RequestGasRefill(), CreateRequestPage.id: (_) => const CreateRequestPage(), diff --git a/lib/models/new_models/gas_refill_model.dart b/lib/models/new_models/gas_refill_model.dart index a68305ba..030c887a 100644 --- a/lib/models/new_models/gas_refill_model.dart +++ b/lib/models/new_models/gas_refill_model.dart @@ -59,6 +59,7 @@ class GasRefillModel { }); } } + num id; String gazRefillNo; String expectedDate; @@ -77,6 +78,7 @@ class GasRefillModel { AssignedEmployee assignedEmployee; Lookup status; List gazRefillDetails; + GasRefillModel copyWith({ num id, String gazRefillNo, @@ -117,6 +119,7 @@ class GasRefillModel { status: status ?? this.status, gazRefillDetails: gazRefillDetails ?? this.gazRefillDetails, ); + Map toJson() { final map = {}; map['id'] = id; @@ -156,16 +159,16 @@ class GasRefillModel { Future validate(BuildContext context) async { if (site == null) { - await Fluttertoast.showToast(msg: "${context.translate(TranslationKeys.youHaveToSelect)} ${context.translate(TranslationKeys.destinationSite)}"); + await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.destinationSite}"); return false; } else if (building == null) { - await Fluttertoast.showToast(msg: "${context.translate(TranslationKeys.youHaveToSelect)} ${context.translate(TranslationKeys.building)}"); + await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.building}"); return false; } else if (floor == null) { - await Fluttertoast.showToast(msg: "${context.translate(TranslationKeys.youHaveToSelect)} ${context.translate(TranslationKeys.floor)}"); + await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.floor}"); return false; } else if (department == null) { - await Fluttertoast.showToast(msg: "${context.translate(TranslationKeys.youHaveToSelect)} ${context.translate(TranslationKeys.department)}"); + await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.department}"); return false; } return true; @@ -190,12 +193,14 @@ class GasRefillDetails { requestedQty = json['requestedQty']; deliverdQty = json['deliverdQty']; } + num id; Lookup gasType; Lookup cylinderType; Lookup cylinderSize; num requestedQty; num deliverdQty; + GasRefillDetails copyWith({ num id, Lookup gasType, @@ -212,6 +217,7 @@ class GasRefillDetails { requestedQty: requestedQty ?? this.requestedQty, deliverdQty: deliverdQty ?? this.deliverdQty, ); + Map toJson() { final map = {}; map['id'] = id; @@ -231,13 +237,13 @@ class GasRefillDetails { Future validate(BuildContext context) async { if (gasType == null) { - await Fluttertoast.showToast(msg: "${context.translate(TranslationKeys.youHaveToSelect)} ${context.translate(TranslationKeys.gasType)}"); + await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.gasType}"); return false; } else if (cylinderType == null) { - await Fluttertoast.showToast(msg: "${context.translate(TranslationKeys.youHaveToSelect)} ${context.translate(TranslationKeys.cylinderType)}"); + await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.cylinderType}"); return false; } else if (cylinderSize == null) { - await Fluttertoast.showToast(msg: "${context.translate(TranslationKeys.youHaveToSelect)} ${context.translate(TranslationKeys.cylinderSize)}"); + await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.cylinderSize}"); return false; } return true; diff --git a/lib/models/subtitle.dart b/lib/models/subtitle.dart index e2c8df61..998f95b9 100644 --- a/lib/models/subtitle.dart +++ b/lib/models/subtitle.dart @@ -1,668 +1,668 @@ -import 'package:meta/meta.dart'; - -class Subtitle { - // http requests status messages - String currentlyServiceNotAvailable; - String waitUntilYourRequestComplete; - String requestCompleteSuccessfully; - String failedToCompleteRequest; - - // dialogs - // words - String signOut; - String exit; - String confirm; - String cancel; - // phrases - String signOutAlert; - String exitAlert; - - // image picker - String pickFromCamera; - String pickFromGallery; - String maxImagesNumberIs5; - String imagesRequired; - String images; - - // login and register page - // words - String language; - String name; - String email; - String phoneNumber; - String password; - String confirmPassword; - String showPassword; - String forgetPassword; - String forgetPasswordWithMark; - String signIn; - String signUp; - // phrases - String wrongEmailOrPassword; - String emailExist; - String nameExist; - String phoneNumberExist; - String nameValidateMessage; - String emailValidateMessage; - String phoneNumberValidateMessage; - String passwordValidateMessage; - String confirmPasswordValidateMessage; - - // commend words - String title; - String address; - String description; - String update; - String next; - String back; - String edit; - String search; - String searchByName; - String from; - String to; - - String descriptionValidateMessage; - String titleValidateMessage; - String addressValidateMessage; - - String nameNotFound; - String titleNotFound; - String phoneNumberNotFound; - String emailNotFound; - String descriptionNotFound; - String addressNotFound; - String dataNotFound; - String linkNotFound; - String urlNotFound; - - // notifications - String notifications; - String notificationsNotFound; - - // service request - String createServiceRequest; - String hospital; - String device; - String deviceImages; - String deviceFiles; - String pickDevice; - String maintenanceIssue; - String create; - String delete; - String newServiceRequest; - String trackServiceRequest; - String hospitalRequired; - String deviceRequired; - String maintenanceIssueRequired; - String add; - String noServiceRequestFound; - String noModelFound; - String noSnFound; - String noDateFound; - String requestInformation; - String clearSearch; - String deviceName; - String serialNumber; - String code; - String deviceSN; - String deviceModel; - String engineerName; - String engineerPhone; - String date; - String status; - String unite; - String unitRequired; - String deviceArName; - String details; - String general; - String serviceRequestInformation; - String faultDescription; - String workPerformed; - String visitDate; - String nextVisitDate; - String jobSheetNumber; - String noHospitalFound; - String pickHospital; - String pickUnite; - String noUniteFound; - String serviceRequests; - - // device - String model; - String brand; - String sn; - String searchBySn; - String noDeviceFound; - - // report issue - String reason1; - String reason2; - String reason3; - String reason4; - String reason5; - String reportIssue; - String submit; - String shareAntherIssue; - - // request status - String newWord; - String repaired; - String repeated; - String closed; - String underRepair; - - // visit status - String done; - String notYet; - String onHold; - - // land page - String hotLine; - String facebook; - String linkedIn; - String twitter; - String whatsApp; - String ourWebsite; - String shareApp; - String policy; - - // visits - String preventiveMaintenance; - String regularVisits; - String updatePreventiveMaintenance; - String updateRegularVisits; - String preventiveMaintenanceUpdatedSuccessfully; - String regularVisitsUpdatedSuccessfully; - String updatingDots; - String updateVisitsGroup; - String noSerialNumberFound; - String requiredStatus; - String visitInformation; - String expectDate; - String actualDate; - String noVisitsFound; - String contactStatus; - String workingHours; - String travelingHours; - String image; - String pickImage; - String requiredImage; - String requiredFile; - String taskStatus; - String activationAlert; - - // service report - String newServiceReport; - String editServiceReport; - String callId; - String customer; - String reportType; - String requiredWord; - String assetType; - String reportStatus; - String callLastSituation; - String invoiceNumber; - String invoiceCode; - String workPreformed; - String reasons; - String attachImage; - String operatingHours; - String partNumberName; - String number; - String quantity; - String orderWorkNumber; - String assignedEmployee; - String assetSN; - String assetName; - String assetNumber; - String site; - String maintenanceSituation; - String currentSituation; - - // all - String duplicateRequest; - String duplicateAlert; - String duplicateAlertMessage; - String alert; - String comment; - String updateServiceRequest; - String repairLocation; - String travelingExpense; - String startDate; - String endDate; - String requestedQuantity; - String deliveredQuantity; - String destinationSite; - String building; - String floor; - String department; - String room; - String actions; - String pickFromFiles; - String pickFile; - - void setIssues(List issues) { - issues.clear(); - issues.add(reason1); - issues.add(reason2); - issues.add(reason3); - issues.add(reason4); - issues.add(reason5); - } - - Subtitle({ - @required this.updateServiceRequest, - @required this.comment, - @required this.currentlyServiceNotAvailable, - @required this.waitUntilYourRequestComplete, - @required this.requestCompleteSuccessfully, - @required this.failedToCompleteRequest, - @required this.update, - @required this.cancel, - @required this.confirm, - @required this.exit, - @required this.exitAlert, - @required this.signOutAlert, - @required this.language, - @required this.name, - @required this.email, - @required this.phoneNumber, - @required this.password, - @required this.forgetPassword, - @required this.confirmPassword, - @required this.signIn, - @required this.signUp, - @required this.nameValidateMessage, - @required this.emailValidateMessage, - @required this.phoneNumberValidateMessage, - @required this.passwordValidateMessage, - @required this.confirmPasswordValidateMessage, - @required this.emailExist, - @required this.forgetPasswordWithMark, - @required this.phoneNumberExist, - @required this.showPassword, - @required this.signOut, - @required this.wrongEmailOrPassword, - @required this.next, - @required this.back, - @required this.search, - @required this.searchByName, - @required this.address, - @required this.description, - @required this.title, - @required this.addressNotFound, - @required this.addressValidateMessage, - @required this.dataNotFound, - @required this.descriptionNotFound, - @required this.descriptionValidateMessage, - @required this.edit, - @required this.emailNotFound, - @required this.from, - @required this.linkNotFound, - @required this.nameNotFound, - @required this.phoneNumberNotFound, - @required this.titleNotFound, - @required this.titleValidateMessage, - @required this.to, - @required this.urlNotFound, - @required this.nameExist, - @required this.unitRequired, - @required this.unite, - @required this.hospitalRequired, - @required this.whatsApp, - @required this.submit, - @required this.shareAntherIssue, - @required this.reportIssue, - @required this.noUniteFound, - @required this.pickUnite, - @required this.noHospitalFound, - @required this.pickHospital, - @required this.shareApp, - @required this.ourWebsite, - @required this.linkedIn, - @required this.facebook, - @required this.hotLine, - @required this.trackServiceRequest, - @required this.newServiceRequest, - @required this.deviceModel, - @required this.noServiceRequestFound, - @required this.engineerName, - @required this.serviceRequests, - @required this.jobSheetNumber, - @required this.visitDate, - @required this.workPerformed, - @required this.faultDescription, - @required this.serviceRequestInformation, - @required this.maintenanceIssue, - @required this.deviceArName, - @required this.hospital, - @required this.status, - @required this.date, - @required this.engineerPhone, - @required this.device, - @required this.deviceSN, - @required this.details, - @required this.requestInformation, - @required this.model, - @required this.brand, - @required this.noDeviceFound, - @required this.noDateFound, - @required this.searchBySn, - @required this.pickDevice, - @required this.notifications, - @required this.notificationsNotFound, - @required this.twitter, - @required this.add, - @required this.code, - @required this.deviceName, - @required this.serialNumber, - @required this.policy, - @required this.clearSearch, - @required this.closed, - @required this.create, - @required this.createServiceRequest, - @required this.delete, - @required this.deviceImages, - @required this.deviceFiles, - @required this.deviceRequired, - @required this.general, - @required this.maintenanceIssueRequired, - @required this.maxImagesNumberIs5, - @required this.newWord, - @required this.noModelFound, - @required this.noSnFound, - @required this.reason1, - @required this.reason2, - @required this.reason3, - @required this.reason4, - @required this.reason5, - @required this.repaired, - @required this.repeated, - @required this.sn, - @required this.underRepair, - @required this.actualDate, - @required this.expectDate, - @required this.visitInformation, - @required this.regularVisitsUpdatedSuccessfully, - @required this.regularVisits, - @required this.updateRegularVisits, - @required this.updatingDots, - @required this.preventiveMaintenanceUpdatedSuccessfully, - @required this.updatePreventiveMaintenance, - @required this.preventiveMaintenance, - @required this.requiredStatus, - @required this.noSerialNumberFound, - @required this.updateVisitsGroup, - @required this.pickFromGallery, - @required this.pickFromCamera, - @required this.images, - @required this.done, - @required this.imagesRequired, - @required this.notYet, - @required this.noVisitsFound, - @required this.onHold, - @required this.nextVisitDate, - @required this.contactStatus, - @required this.travelingHours, - @required this.workingHours, - @required this.taskStatus, - @required this.image, - @required this.pickImage, - @required this.requiredImage, - @required this.requiredFile, - @required this.activationAlert, - @required this.callId, - @required this.requiredWord, - @required this.quantity, - @required this.callLastSituation, - @required this.invoiceNumber, - @required this.invoiceCode, - @required this.attachImage, - @required this.customer, - @required this.editServiceReport, - @required this.newServiceReport, - @required this.number, - @required this.operatingHours, - @required this.partNumberName, - @required this.reasons, - @required this.reportStatus, - @required this.reportType, - @required this.assetType, - @required this.workPreformed, - @required this.alert, - @required this.duplicateAlert, - @required this.duplicateAlertMessage, - @required this.duplicateRequest, - @required this.orderWorkNumber, - @required this.assignedEmployee, - @required this.assetSN, - @required this.assetName, - @required this.site, - @required this.maintenanceSituation, - @required this.currentSituation, - @required this.repairLocation, - @required this.travelingExpense, - @required this.startDate, - @required this.endDate, - @required this.requestedQuantity, - @required this.deliveredQuantity, - @required this.assetNumber, - @required this.destinationSite, - @required this.building, - @required this.floor, - @required this.department, - @required this.room, - @required this.actions, - @required this.pickFromFiles, - @required this.pickFile, - }); - - factory Subtitle.fromJson(Map parsedJson) { - return Subtitle( - updateServiceRequest: parsedJson["updateServiceRequest"], - comment: parsedJson["comment"], - currentlyServiceNotAvailable: parsedJson["server_error_message"], - failedToCompleteRequest: parsedJson["failed_request_message"], - requestCompleteSuccessfully: parsedJson["successful_request_message"], - waitUntilYourRequestComplete: parsedJson["request_lock_message"], - update: parsedJson["update"], - cancel: parsedJson["cancel"], - confirm: parsedJson["confirm"], - exit: parsedJson["exit"], - exitAlert: parsedJson["exit_alert"], - signOut: parsedJson["sign_out"], - signOutAlert: parsedJson["logout_alert"], - language: parsedJson["language"], - name: parsedJson["name"], - email: parsedJson["email"], - phoneNumber: parsedJson["phone_number"], - password: parsedJson["password"], - confirmPassword: parsedJson["confirm_password"], - signUp: parsedJson["sign_up"], - signIn: parsedJson["sign_in"], - forgetPassword: parsedJson["forget_password"], - emailValidateMessage: parsedJson["email_validate_message"], - nameValidateMessage: parsedJson["name_validate_message"], - passwordValidateMessage: parsedJson["password_validate_message"], - confirmPasswordValidateMessage: parsedJson["confirm_password_validate_message"], - phoneNumberValidateMessage: parsedJson["phone_number_validate_message"], - forgetPasswordWithMark: parsedJson["forget_password_with_mark"], - showPassword: parsedJson["show_password"], - wrongEmailOrPassword: parsedJson["wrong_email_or_password"], - emailExist: parsedJson["email_exist"], - phoneNumberExist: parsedJson["phone_number_exist"], - next: parsedJson["next"], - back: parsedJson["back"], - search: parsedJson["search"], - searchByName: parsedJson["search_by_name"], - address: parsedJson["address"], - addressNotFound: parsedJson["address_not_found"], - addressValidateMessage: parsedJson["address_validate_message"], - dataNotFound: parsedJson["data_not_found"], - description: parsedJson["description"], - descriptionNotFound: parsedJson["description_not_found"], - descriptionValidateMessage: parsedJson["description_validate_message"], - edit: parsedJson["edit"], - emailNotFound: parsedJson["email_not_found"], - from: parsedJson["from"], - to: parsedJson["to"], - linkNotFound: parsedJson["link_not_found"], - nameNotFound: parsedJson["name_not_found"], - phoneNumberNotFound: parsedJson["phone_number_not_found"], - title: parsedJson["title"], - titleNotFound: parsedJson["title_not_found"], - titleValidateMessage: parsedJson["title_validate_message"], - urlNotFound: parsedJson["url_not_found"], - date: parsedJson["date"], - status: parsedJson["status"], - code: parsedJson["code"], - serialNumber: parsedJson["serialNumber"], - add: parsedJson["add"], - brand: parsedJson["brand"], - clearSearch: parsedJson["clearSearch"], - closed: parsedJson["closed"], - create: parsedJson["create"], - createServiceRequest: parsedJson["createServiceRequest"], - delete: parsedJson["delete"], - details: parsedJson["details"], - device: parsedJson["device"], - deviceArName: parsedJson["deviceArName"], - deviceImages: parsedJson["deviceImages"], - deviceFiles: parsedJson["deviceFiles"], - deviceModel: parsedJson["deviceModel"], - deviceName: parsedJson["deviceName"], - deviceRequired: parsedJson["deviceRequired"], - deviceSN: parsedJson["deviceSN"], - engineerName: parsedJson["engineerName"], - engineerPhone: parsedJson["engineerPhone"], - facebook: parsedJson["facebook"], - faultDescription: parsedJson["faultDescription"], - general: parsedJson["general"], - hospital: parsedJson["hospital"], - hospitalRequired: parsedJson["hospitalRequired"], - hotLine: parsedJson["hotLine"], - jobSheetNumber: parsedJson["jobSheetNumber"], - linkedIn: parsedJson["linkedIn"], - maintenanceIssue: parsedJson["maintenanceIssue"], - maintenanceIssueRequired: parsedJson["maintenanceIssueRequired"], - maxImagesNumberIs5: parsedJson["maxImagesNumberIs5"], - model: parsedJson["model"], - nameExist: parsedJson["nameExist"], - newServiceRequest: parsedJson["newServiceRequest"], - newWord: parsedJson["newWord"], - noDateFound: parsedJson["noDateFound"], - noDeviceFound: parsedJson["noDeviceFound"], - noHospitalFound: parsedJson["noHospitalFound"], - noModelFound: parsedJson["noModelFound"], - noServiceRequestFound: parsedJson["noServiceRequestFound"], - noSnFound: parsedJson["noSnFound"], - notifications: parsedJson["notifications"], - notificationsNotFound: parsedJson["notificationsNotFound"], - noUniteFound: parsedJson["noUniteFound"], - ourWebsite: parsedJson["ourWebsite"], - pickDevice: parsedJson["pickDevice"], - pickHospital: parsedJson["pickHospital"], - pickUnite: parsedJson["pickUnite"], - policy: parsedJson["policy"], - reason1: parsedJson["reason1"], - reason2: parsedJson["reason2"], - reason3: parsedJson["reason3"], - reason4: parsedJson["reason4"], - reason5: parsedJson["reason5"], - repaired: parsedJson["repaired"], - repeated: parsedJson["repeated"], - reportIssue: parsedJson["reportIssue"], - requestInformation: parsedJson["requestInformation"], - searchBySn: parsedJson["searchBySn"], - serviceRequestInformation: parsedJson["serviceRequestInformation"], - serviceRequests: parsedJson["serviceRequests"], - shareAntherIssue: parsedJson["shareAntherIssue"], - shareApp: parsedJson["shareApp"], - sn: parsedJson["sn"], - submit: parsedJson["submit"], - trackServiceRequest: parsedJson["trackServiceRequest"], - twitter: parsedJson["twitter"], - underRepair: parsedJson["underRepair"], - unite: parsedJson["unite"], - unitRequired: parsedJson["uniteRequired"], - visitDate: parsedJson["visitDate"], - whatsApp: parsedJson["whatsApp"], - workPerformed: parsedJson["workPerformed"], - actualDate: parsedJson["actualDate"], - done: parsedJson["done"], - expectDate: parsedJson["expectDate"], - images: parsedJson["images"], - imagesRequired: parsedJson["imagesRequired"], - noSerialNumberFound: parsedJson["noSerialNumberFound"], - notYet: parsedJson["notYet"], - noVisitsFound: parsedJson["noVisitsFound"], - onHold: parsedJson["onHold"], - pickFromCamera: parsedJson["pickFromCamera"], - pickFromGallery: parsedJson["pickFromGallery"], - preventiveMaintenance: parsedJson["preventiveMaintenance"], - preventiveMaintenanceUpdatedSuccessfully: parsedJson["preventiveMaintenanceUpdatedSuccessfully"], - regularVisits: parsedJson["regularVisits"], - regularVisitsUpdatedSuccessfully: parsedJson["regularVisitsUpdatedSuccessfully"], - requiredStatus: parsedJson["requiredStatus"], - updatePreventiveMaintenance: parsedJson["updatePreventiveMaintenance"], - updateRegularVisits: parsedJson["updateRegularVisits"], - updateVisitsGroup: parsedJson["updateVisitsGroup"], - updatingDots: parsedJson["updatingDots"], - visitInformation: parsedJson["visitInformation"], - nextVisitDate: parsedJson["expectedVisitDate"], - contactStatus: parsedJson["contactStatus"], - travelingHours: parsedJson["travelingHours"], - workingHours: parsedJson["workingHours"], - image: parsedJson["image"], - pickImage: parsedJson["pickImage"], - requiredImage: parsedJson["requiredImage"], - requiredFile: parsedJson["requiredFile"], - taskStatus: parsedJson["taskStatus"], - activationAlert: parsedJson["activationAlert"], - attachImage: parsedJson["attachImage"], - callLastSituation: parsedJson["callLastSituation"], - customer: parsedJson["customer"], - editServiceReport: parsedJson["editServiceReport"], - invoiceCode: parsedJson["invoiceCode"], - invoiceNumber: parsedJson["invoiceNumber"], - newServiceReport: parsedJson["newServiceReport"], - number: parsedJson["number"], - operatingHours: parsedJson["operatingHours"], - partNumberName: parsedJson["partNumberName"], - quantity: parsedJson["quantity"], - reasons: parsedJson["reasons"], - reportStatus: parsedJson["reportStatus"], - reportType: parsedJson["reportType"], - callId: parsedJson["callId"], - requiredWord: parsedJson["requiredWord"], - assetType: parsedJson["AssetType"], - workPreformed: parsedJson["workPreformed"], - alert: parsedJson["alert"], - duplicateAlert: parsedJson["duplicateAlert"], - duplicateAlertMessage: parsedJson["duplicateAlertMessage"], - duplicateRequest: parsedJson["duplicateRequest"], - orderWorkNumber: parsedJson["orderWorkNumber"], - assignedEmployee: parsedJson["assignedEmployee"], - assetSN: parsedJson["assetSN"], - assetName: parsedJson["assetName"], - assetNumber: parsedJson["assetNumber"], - site: parsedJson["site"], - maintenanceSituation: parsedJson["maintenanceSituation"], - currentSituation: parsedJson["currentSituation"], - repairLocation: parsedJson["repairLocation"], - travelingExpense: parsedJson["travelingExpense"], - startDate: parsedJson["startDate"], - endDate: parsedJson["endDate"], - requestedQuantity: parsedJson["requestedQuantity"], - deliveredQuantity: parsedJson["deliveredQuantity"], - destinationSite: parsedJson["destinationSite"], - building: parsedJson["building"], - floor: parsedJson["floor"], - department: parsedJson["department"], - room: parsedJson["room"], - actions: parsedJson["actions"], - pickFromFiles: parsedJson["pickFromFiles"], - pickFile: parsedJson["pickFile"], - ); - } -} +// import 'package:meta/meta.dart'; +// +// class Subtitle1 { +// // http requests status messages +// String currentlyServiceNotAvailable; +// String waitUntilYourRequestComplete; +// String requestCompleteSuccessfully; +// String failedToCompleteRequest; +// +// // dialogs +// // words +// String signOut; +// String exit; +// String confirm; +// String cancel; +// // phrases +// String signOutAlert; +// String exitAlert; +// +// // image picker +// String pickFromCamera; +// String pickFromGallery; +// String maxImagesNumberIs5; +// String imagesRequired; +// String images; +// +// // login and register page +// // words +// String language; +// String name; +// String email; +// String phoneNumber; +// String password; +// String confirmPassword; +// String showPassword; +// String forgetPassword; +// String forgetPasswordWithMark; +// String signIn; +// String signUp; +// // phrases +// String wrongEmailOrPassword; +// String emailExist; +// String nameExist; +// String phoneNumberExist; +// String nameValidateMessage; +// String emailValidateMessage; +// String phoneNumberValidateMessage; +// String passwordValidateMessage; +// String confirmPasswordValidateMessage; +// +// // commend words +// String title; +// String address; +// String description; +// String update; +// String next; +// String back; +// String edit; +// String search; +// String searchByName; +// String from; +// String to; +// +// String descriptionValidateMessage; +// String titleValidateMessage; +// String addressValidateMessage; +// +// String nameNotFound; +// String titleNotFound; +// String phoneNumberNotFound; +// String emailNotFound; +// String descriptionNotFound; +// String addressNotFound; +// String dataNotFound; +// String linkNotFound; +// String urlNotFound; +// +// // notifications +// String notifications; +// String notificationsNotFound; +// +// // service request +// String createServiceRequest; +// String hospital; +// String device; +// String deviceImages; +// String deviceFiles; +// String pickDevice; +// String maintenanceIssue; +// String create; +// String delete; +// String newServiceRequest; +// String trackServiceRequest; +// String hospitalRequired; +// String deviceRequired; +// String maintenanceIssueRequired; +// String add; +// String noServiceRequestFound; +// String noModelFound; +// String noSnFound; +// String noDateFound; +// String requestInformation; +// String clearSearch; +// String deviceName; +// String serialNumber; +// String code; +// String deviceSN; +// String deviceModel; +// String engineerName; +// String engineerPhone; +// String date; +// String status; +// String unite; +// String unitRequired; +// String deviceArName; +// String details; +// String general; +// String serviceRequestInformation; +// String faultDescription; +// String workPerformed; +// String visitDate; +// String nextVisitDate; +// String jobSheetNumber; +// String noHospitalFound; +// String pickHospital; +// String pickUnite; +// String noUniteFound; +// String serviceRequests; +// +// // device +// String model; +// String brand; +// String sn; +// String searchBySn; +// String noDeviceFound; +// +// // report issue +// String reason1; +// String reason2; +// String reason3; +// String reason4; +// String reason5; +// String reportIssue; +// String submit; +// String shareAntherIssue; +// +// // request status +// String newWord; +// String repaired; +// String repeated; +// String closed; +// String underRepair; +// +// // visit status +// String done; +// String notYet; +// String onHold; +// +// // land page +// String hotLine; +// String facebook; +// String linkedIn; +// String twitter; +// String whatsApp; +// String ourWebsite; +// String shareApp; +// String policy; +// +// // visits +// String preventiveMaintenance; +// String regularVisits; +// String updatePreventiveMaintenance; +// String updateRegularVisits; +// String preventiveMaintenanceUpdatedSuccessfully; +// String regularVisitsUpdatedSuccessfully; +// String updatingDots; +// String updateVisitsGroup; +// String noSerialNumberFound; +// String requiredStatus; +// String visitInformation; +// String expectDate; +// String actualDate; +// String noVisitsFound; +// String contactStatus; +// String workingHours; +// String travelingHours; +// String image; +// String pickImage; +// String requiredImage; +// String requiredFile; +// String taskStatus; +// String activationAlert; +// +// // service report +// String newServiceReport; +// String editServiceReport; +// String callId; +// String customer; +// String reportType; +// String requiredWord; +// String assetType; +// String reportStatus; +// String callLastSituation; +// String invoiceNumber; +// String invoiceCode; +// String workPreformed; +// String reasons; +// String attachImage; +// String operatingHours; +// String partNumberName; +// String number; +// String quantity; +// String orderWorkNumber; +// String assignedEmployee; +// String assetSN; +// String assetName; +// String assetNumber; +// String site; +// String maintenanceSituation; +// String currentSituation; +// +// // all +// String duplicateRequest; +// String duplicateAlert; +// String duplicateAlertMessage; +// String alert; +// String comment; +// String updateServiceRequest; +// String repairLocation; +// String travelingExpense; +// String startDate; +// String endDate; +// String requestedQuantity; +// String deliveredQuantity; +// String destinationSite; +// String building; +// String floor; +// String department; +// String room; +// String actions; +// String pickFromFiles; +// String pickFile; +// +// void setIssues(List issues) { +// issues.clear(); +// issues.add(reason1); +// issues.add(reason2); +// issues.add(reason3); +// issues.add(reason4); +// issues.add(reason5); +// } +// +// Subtitle({ +// @required this.updateServiceRequest, +// @required this.comment, +// @required this.currentlyServiceNotAvailable, +// @required this.waitUntilYourRequestComplete, +// @required this.requestCompleteSuccessfully, +// @required this.failedToCompleteRequest, +// @required this.update, +// @required this.cancel, +// @required this.confirm, +// @required this.exit, +// @required this.exitAlert, +// @required this.signOutAlert, +// @required this.language, +// @required this.name, +// @required this.email, +// @required this.phoneNumber, +// @required this.password, +// @required this.forgetPassword, +// @required this.confirmPassword, +// @required this.signIn, +// @required this.signUp, +// @required this.nameValidateMessage, +// @required this.emailValidateMessage, +// @required this.phoneNumberValidateMessage, +// @required this.passwordValidateMessage, +// @required this.confirmPasswordValidateMessage, +// @required this.emailExist, +// @required this.forgetPasswordWithMark, +// @required this.phoneNumberExist, +// @required this.showPassword, +// @required this.signOut, +// @required this.wrongEmailOrPassword, +// @required this.next, +// @required this.back, +// @required this.search, +// @required this.searchByName, +// @required this.address, +// @required this.description, +// @required this.title, +// @required this.addressNotFound, +// @required this.addressValidateMessage, +// @required this.dataNotFound, +// @required this.descriptionNotFound, +// @required this.descriptionValidateMessage, +// @required this.edit, +// @required this.emailNotFound, +// @required this.from, +// @required this.linkNotFound, +// @required this.nameNotFound, +// @required this.phoneNumberNotFound, +// @required this.titleNotFound, +// @required this.titleValidateMessage, +// @required this.to, +// @required this.urlNotFound, +// @required this.nameExist, +// @required this.unitRequired, +// @required this.unite, +// @required this.hospitalRequired, +// @required this.whatsApp, +// @required this.submit, +// @required this.shareAntherIssue, +// @required this.reportIssue, +// @required this.noUniteFound, +// @required this.pickUnite, +// @required this.noHospitalFound, +// @required this.pickHospital, +// @required this.shareApp, +// @required this.ourWebsite, +// @required this.linkedIn, +// @required this.facebook, +// @required this.hotLine, +// @required this.trackServiceRequest, +// @required this.newServiceRequest, +// @required this.deviceModel, +// @required this.noServiceRequestFound, +// @required this.engineerName, +// @required this.serviceRequests, +// @required this.jobSheetNumber, +// @required this.visitDate, +// @required this.workPerformed, +// @required this.faultDescription, +// @required this.serviceRequestInformation, +// @required this.maintenanceIssue, +// @required this.deviceArName, +// @required this.hospital, +// @required this.status, +// @required this.date, +// @required this.engineerPhone, +// @required this.device, +// @required this.deviceSN, +// @required this.details, +// @required this.requestInformation, +// @required this.model, +// @required this.brand, +// @required this.noDeviceFound, +// @required this.noDateFound, +// @required this.searchBySn, +// @required this.pickDevice, +// @required this.notifications, +// @required this.notificationsNotFound, +// @required this.twitter, +// @required this.add, +// @required this.code, +// @required this.deviceName, +// @required this.serialNumber, +// @required this.policy, +// @required this.clearSearch, +// @required this.closed, +// @required this.create, +// @required this.createServiceRequest, +// @required this.delete, +// @required this.deviceImages, +// @required this.deviceFiles, +// @required this.deviceRequired, +// @required this.general, +// @required this.maintenanceIssueRequired, +// @required this.maxImagesNumberIs5, +// @required this.newWord, +// @required this.noModelFound, +// @required this.noSnFound, +// @required this.reason1, +// @required this.reason2, +// @required this.reason3, +// @required this.reason4, +// @required this.reason5, +// @required this.repaired, +// @required this.repeated, +// @required this.sn, +// @required this.underRepair, +// @required this.actualDate, +// @required this.expectDate, +// @required this.visitInformation, +// @required this.regularVisitsUpdatedSuccessfully, +// @required this.regularVisits, +// @required this.updateRegularVisits, +// @required this.updatingDots, +// @required this.preventiveMaintenanceUpdatedSuccessfully, +// @required this.updatePreventiveMaintenance, +// @required this.preventiveMaintenance, +// @required this.requiredStatus, +// @required this.noSerialNumberFound, +// @required this.updateVisitsGroup, +// @required this.pickFromGallery, +// @required this.pickFromCamera, +// @required this.images, +// @required this.done, +// @required this.imagesRequired, +// @required this.notYet, +// @required this.noVisitsFound, +// @required this.onHold, +// @required this.nextVisitDate, +// @required this.contactStatus, +// @required this.travelingHours, +// @required this.workingHours, +// @required this.taskStatus, +// @required this.image, +// @required this.pickImage, +// @required this.requiredImage, +// @required this.requiredFile, +// @required this.activationAlert, +// @required this.callId, +// @required this.requiredWord, +// @required this.quantity, +// @required this.callLastSituation, +// @required this.invoiceNumber, +// @required this.invoiceCode, +// @required this.attachImage, +// @required this.customer, +// @required this.editServiceReport, +// @required this.newServiceReport, +// @required this.number, +// @required this.operatingHours, +// @required this.partNumberName, +// @required this.reasons, +// @required this.reportStatus, +// @required this.reportType, +// @required this.assetType, +// @required this.workPreformed, +// @required this.alert, +// @required this.duplicateAlert, +// @required this.duplicateAlertMessage, +// @required this.duplicateRequest, +// @required this.orderWorkNumber, +// @required this.assignedEmployee, +// @required this.assetSN, +// @required this.assetName, +// @required this.site, +// @required this.maintenanceSituation, +// @required this.currentSituation, +// @required this.repairLocation, +// @required this.travelingExpense, +// @required this.startDate, +// @required this.endDate, +// @required this.requestedQuantity, +// @required this.deliveredQuantity, +// @required this.assetNumber, +// @required this.destinationSite, +// @required this.building, +// @required this.floor, +// @required this.department, +// @required this.room, +// @required this.actions, +// @required this.pickFromFiles, +// @required this.pickFile, +// }); +// +// factory Subtitle.fromJson(Map parsedJson) { +// return Subtitle( +// updateServiceRequest: parsedJson["updateServiceRequest"], +// comment: parsedJson["comment"], +// currentlyServiceNotAvailable: parsedJson["server_error_message"], +// failedToCompleteRequest: parsedJson["failed_request_message"], +// requestCompleteSuccessfully: parsedJson["successful_request_message"], +// waitUntilYourRequestComplete: parsedJson["request_lock_message"], +// update: parsedJson["update"], +// cancel: parsedJson["cancel"], +// confirm: parsedJson["confirm"], +// exit: parsedJson["exit"], +// exitAlert: parsedJson["exit_alert"], +// signOut: parsedJson["sign_out"], +// signOutAlert: parsedJson["logout_alert"], +// language: parsedJson["language"], +// name: parsedJson["name"], +// email: parsedJson["email"], +// phoneNumber: parsedJson["phone_number"], +// password: parsedJson["password"], +// confirmPassword: parsedJson["confirm_password"], +// signUp: parsedJson["sign_up"], +// signIn: parsedJson["sign_in"], +// forgetPassword: parsedJson["forget_password"], +// emailValidateMessage: parsedJson["email_validate_message"], +// nameValidateMessage: parsedJson["name_validate_message"], +// passwordValidateMessage: parsedJson["password_validate_message"], +// confirmPasswordValidateMessage: parsedJson["confirm_password_validate_message"], +// phoneNumberValidateMessage: parsedJson["phone_number_validate_message"], +// forgetPasswordWithMark: parsedJson["forget_password_with_mark"], +// showPassword: parsedJson["show_password"], +// wrongEmailOrPassword: parsedJson["wrong_email_or_password"], +// emailExist: parsedJson["email_exist"], +// phoneNumberExist: parsedJson["phone_number_exist"], +// next: parsedJson["next"], +// back: parsedJson["back"], +// search: parsedJson["search"], +// searchByName: parsedJson["search_by_name"], +// address: parsedJson["address"], +// addressNotFound: parsedJson["address_not_found"], +// addressValidateMessage: parsedJson["address_validate_message"], +// dataNotFound: parsedJson["data_not_found"], +// description: parsedJson["description"], +// descriptionNotFound: parsedJson["description_not_found"], +// descriptionValidateMessage: parsedJson["description_validate_message"], +// edit: parsedJson["edit"], +// emailNotFound: parsedJson["email_not_found"], +// from: parsedJson["from"], +// to: parsedJson["to"], +// linkNotFound: parsedJson["link_not_found"], +// nameNotFound: parsedJson["name_not_found"], +// phoneNumberNotFound: parsedJson["phone_number_not_found"], +// title: parsedJson["title"], +// titleNotFound: parsedJson["title_not_found"], +// titleValidateMessage: parsedJson["title_validate_message"], +// urlNotFound: parsedJson["url_not_found"], +// date: parsedJson["date"], +// status: parsedJson["status"], +// code: parsedJson["code"], +// serialNumber: parsedJson["serialNumber"], +// add: parsedJson["add"], +// brand: parsedJson["brand"], +// clearSearch: parsedJson["clearSearch"], +// closed: parsedJson["closed"], +// create: parsedJson["create"], +// createServiceRequest: parsedJson["createServiceRequest"], +// delete: parsedJson["delete"], +// details: parsedJson["details"], +// device: parsedJson["device"], +// deviceArName: parsedJson["deviceArName"], +// deviceImages: parsedJson["deviceImages"], +// deviceFiles: parsedJson["deviceFiles"], +// deviceModel: parsedJson["deviceModel"], +// deviceName: parsedJson["deviceName"], +// deviceRequired: parsedJson["deviceRequired"], +// deviceSN: parsedJson["deviceSN"], +// engineerName: parsedJson["engineerName"], +// engineerPhone: parsedJson["engineerPhone"], +// facebook: parsedJson["facebook"], +// faultDescription: parsedJson["faultDescription"], +// general: parsedJson["general"], +// hospital: parsedJson["hospital"], +// hospitalRequired: parsedJson["hospitalRequired"], +// hotLine: parsedJson["hotLine"], +// jobSheetNumber: parsedJson["jobSheetNumber"], +// linkedIn: parsedJson["linkedIn"], +// maintenanceIssue: parsedJson["maintenanceIssue"], +// maintenanceIssueRequired: parsedJson["maintenanceIssueRequired"], +// maxImagesNumberIs5: parsedJson["maxImagesNumberIs5"], +// model: parsedJson["model"], +// nameExist: parsedJson["nameExist"], +// newServiceRequest: parsedJson["newServiceRequest"], +// newWord: parsedJson["newWord"], +// noDateFound: parsedJson["noDateFound"], +// noDeviceFound: parsedJson["noDeviceFound"], +// noHospitalFound: parsedJson["noHospitalFound"], +// noModelFound: parsedJson["noModelFound"], +// noServiceRequestFound: parsedJson["noServiceRequestFound"], +// noSnFound: parsedJson["noSnFound"], +// notifications: parsedJson["notifications"], +// notificationsNotFound: parsedJson["notificationsNotFound"], +// noUniteFound: parsedJson["noUniteFound"], +// ourWebsite: parsedJson["ourWebsite"], +// pickDevice: parsedJson["pickDevice"], +// pickHospital: parsedJson["pickHospital"], +// pickUnite: parsedJson["pickUnite"], +// policy: parsedJson["policy"], +// reason1: parsedJson["reason1"], +// reason2: parsedJson["reason2"], +// reason3: parsedJson["reason3"], +// reason4: parsedJson["reason4"], +// reason5: parsedJson["reason5"], +// repaired: parsedJson["repaired"], +// repeated: parsedJson["repeated"], +// reportIssue: parsedJson["reportIssue"], +// requestInformation: parsedJson["requestInformation"], +// searchBySn: parsedJson["searchBySn"], +// serviceRequestInformation: parsedJson["serviceRequestInformation"], +// serviceRequests: parsedJson["serviceRequests"], +// shareAntherIssue: parsedJson["shareAntherIssue"], +// shareApp: parsedJson["shareApp"], +// sn: parsedJson["sn"], +// submit: parsedJson["submit"], +// trackServiceRequest: parsedJson["trackServiceRequest"], +// twitter: parsedJson["twitter"], +// underRepair: parsedJson["underRepair"], +// unite: parsedJson["unite"], +// unitRequired: parsedJson["uniteRequired"], +// visitDate: parsedJson["visitDate"], +// whatsApp: parsedJson["whatsApp"], +// workPerformed: parsedJson["workPerformed"], +// actualDate: parsedJson["actualDate"], +// done: parsedJson["done"], +// expectDate: parsedJson["expectDate"], +// images: parsedJson["images"], +// imagesRequired: parsedJson["imagesRequired"], +// noSerialNumberFound: parsedJson["noSerialNumberFound"], +// notYet: parsedJson["notYet"], +// noVisitsFound: parsedJson["noVisitsFound"], +// onHold: parsedJson["onHold"], +// pickFromCamera: parsedJson["pickFromCamera"], +// pickFromGallery: parsedJson["pickFromGallery"], +// preventiveMaintenance: parsedJson["preventiveMaintenance"], +// preventiveMaintenanceUpdatedSuccessfully: parsedJson["preventiveMaintenanceUpdatedSuccessfully"], +// regularVisits: parsedJson["regularVisits"], +// regularVisitsUpdatedSuccessfully: parsedJson["regularVisitsUpdatedSuccessfully"], +// requiredStatus: parsedJson["requiredStatus"], +// updatePreventiveMaintenance: parsedJson["updatePreventiveMaintenance"], +// updateRegularVisits: parsedJson["updateRegularVisits"], +// updateVisitsGroup: parsedJson["updateVisitsGroup"], +// updatingDots: parsedJson["updatingDots"], +// visitInformation: parsedJson["visitInformation"], +// nextVisitDate: parsedJson["expectedVisitDate"], +// contactStatus: parsedJson["contactStatus"], +// travelingHours: parsedJson["travelingHours"], +// workingHours: parsedJson["workingHours"], +// image: parsedJson["image"], +// pickImage: parsedJson["pickImage"], +// requiredImage: parsedJson["requiredImage"], +// requiredFile: parsedJson["requiredFile"], +// taskStatus: parsedJson["taskStatus"], +// activationAlert: parsedJson["activationAlert"], +// attachImage: parsedJson["attachImage"], +// callLastSituation: parsedJson["callLastSituation"], +// customer: parsedJson["customer"], +// editServiceReport: parsedJson["editServiceReport"], +// invoiceCode: parsedJson["invoiceCode"], +// invoiceNumber: parsedJson["invoiceNumber"], +// newServiceReport: parsedJson["newServiceReport"], +// number: parsedJson["number"], +// operatingHours: parsedJson["operatingHours"], +// partNumberName: parsedJson["partNumberName"], +// quantity: parsedJson["quantity"], +// reasons: parsedJson["reasons"], +// reportStatus: parsedJson["reportStatus"], +// reportType: parsedJson["reportType"], +// callId: parsedJson["callId"], +// requiredWord: parsedJson["requiredWord"], +// assetType: parsedJson["AssetType"], +// workPreformed: parsedJson["workPreformed"], +// alert: parsedJson["alert"], +// duplicateAlert: parsedJson["duplicateAlert"], +// duplicateAlertMessage: parsedJson["duplicateAlertMessage"], +// duplicateRequest: parsedJson["duplicateRequest"], +// orderWorkNumber: parsedJson["orderWorkNumber"], +// assignedEmployee: parsedJson["assignedEmployee"], +// assetSN: parsedJson["assetSN"], +// assetName: parsedJson["assetName"], +// assetNumber: parsedJson["assetNumber"], +// site: parsedJson["site"], +// maintenanceSituation: parsedJson["maintenanceSituation"], +// currentSituation: parsedJson["currentSituation"], +// repairLocation: parsedJson["repairLocation"], +// travelingExpense: parsedJson["travelingExpense"], +// startDate: parsedJson["startDate"], +// endDate: parsedJson["endDate"], +// requestedQuantity: parsedJson["requestedQuantity"], +// deliveredQuantity: parsedJson["deliveredQuantity"], +// destinationSite: parsedJson["destinationSite"], +// building: parsedJson["building"], +// floor: parsedJson["floor"], +// department: parsedJson["department"], +// room: parsedJson["room"], +// actions: parsedJson["actions"], +// pickFromFiles: parsedJson["pickFromFiles"], +// pickFile: parsedJson["pickFile"], +// ); +// } +// } diff --git a/lib/new_views/common_widgets/app_bottom_nav_bar.dart b/lib/new_views/common_widgets/app_bottom_nav_bar.dart index af4832c6..70dee981 100644 --- a/lib/new_views/common_widgets/app_bottom_nav_bar.dart +++ b/lib/new_views/common_widgets/app_bottom_nav_bar.dart @@ -8,6 +8,7 @@ import '../../models/enums/translation_keys.dart'; class AppBottomNavigationBar extends StatelessWidget { final Function(int index) onPressed; final int selectedIndex; + const AppBottomNavigationBar({ Key key, @required this.onPressed, @@ -25,10 +26,10 @@ class AppBottomNavigationBar extends StatelessWidget { ), child: BottomNavigationBar( items: [ - navBarItem(context, index: 0, iconName: "overview", label: TranslationKeys.overview), - navBarItem(context, index: 1, iconName: "requests", label: TranslationKeys.myRequests), - navBarItem(context, index: 2, iconName: "assets", label: TranslationKeys.myAssets), - navBarItem(context, index: 3, iconName: "message", label: TranslationKeys.contactUs), + navBarItem(context, index: 0, iconName: "overview", label: context.translation.overview), + navBarItem(context, index: 1, iconName: "requests", label: context.translation.myRequests), + navBarItem(context, index: 2, iconName: "assets", label: context.translation.myAssets), + navBarItem(context, index: 3, iconName: "message", label: context.translation.contactUs), ], currentIndex: selectedIndex, selectedFontSize: 12, @@ -38,7 +39,7 @@ class AppBottomNavigationBar extends StatelessWidget { ); } - BottomNavigationBarItem navBarItem(BuildContext context, {@required int index, @required String iconName, @required TranslationKeys label}) { + BottomNavigationBarItem navBarItem(BuildContext context, {@required int index, @required String iconName, @required String label}) { return BottomNavigationBarItem( icon: Padding( padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight), @@ -48,7 +49,7 @@ class AppBottomNavigationBar extends StatelessWidget { color: selectedIndex == index ? Theme.of(context).bottomNavigationBarTheme.selectedItemColor : Theme.of(context).bottomNavigationBarTheme.unselectedItemColor, ), ), - label: context.translate(label), + label: label, ); } } diff --git a/lib/new_views/common_widgets/app_drawer.dart b/lib/new_views/common_widgets/app_drawer.dart index 9169f8f1..9d15fd40 100644 --- a/lib/new_views/common_widgets/app_drawer.dart +++ b/lib/new_views/common_widgets/app_drawer.dart @@ -19,7 +19,7 @@ class AppDrawer extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ AppFilledButton( - label: TranslationKeys.login, + label: context.translation.login, onPressed: () async { /// TODO [zaid] : show dialog before logout // bool result = await showDialog( diff --git a/lib/new_views/common_widgets/app_filled_button.dart b/lib/new_views/common_widgets/app_filled_button.dart index fed2c9ca..9f6b9df4 100644 --- a/lib/new_views/common_widgets/app_filled_button.dart +++ b/lib/new_views/common_widgets/app_filled_button.dart @@ -8,7 +8,7 @@ import 'package:test_sa/new_views/app_style/app_color.dart'; class AppFilledButton extends StatelessWidget { final VoidCallback onPressed; - final TranslationKeys label; + final String label; final bool maxWidth; final Color buttonColor; final Color textColor; @@ -32,7 +32,7 @@ class AppFilledButton extends StatelessWidget { borderRadius: BorderRadius.circular(10), color: buttonColor ?? Theme.of(context).primaryColor, ), - child: context.translate(label).heading6(context).custom(color: textColor ?? (context.isDark ? AppColor.neutral60 : Colors.white)), + child: label.heading6(context).custom(color: textColor ?? (context.isDark ? AppColor.neutral60 : Colors.white)), ).onPress(onPressed); } } diff --git a/lib/new_views/common_widgets/app_floating_action_button.dart b/lib/new_views/common_widgets/app_floating_action_button.dart index ac0ae631..4683b275 100644 --- a/lib/new_views/common_widgets/app_floating_action_button.dart +++ b/lib/new_views/common_widgets/app_floating_action_button.dart @@ -51,11 +51,11 @@ class _AppFloatingActionButtonState extends State { child: Column( mainAxisSize: MainAxisSize.min, children: [ - const _FloatingButtonListTile(iconName: "gas_refill_request", label: TranslationKeys.gasRefillRequest, routeName: NewGasRefillRequestPage.routeName), + _FloatingButtonListTile(iconName: "gas_refill_request", label: context.translation.gasRefillRequest, routeName: NewGasRefillRequestPage.routeName), const Divider().defaultStyle(context).paddingOnly(left: 16, right: 16), - const _FloatingButtonListTile(iconName: "transfer_request", label: TranslationKeys.transferRequest, routeName: NewTransferRequestPage.routeName), + _FloatingButtonListTile(iconName: "transfer_request", label: context.translation.transferRequest, routeName: NewTransferRequestPage.routeName), const Divider().defaultStyle(context).paddingOnly(left: 16, right: 16), - const _FloatingButtonListTile(iconName: "service_request", label: TranslationKeys.serviceRequest, routeName: NewServiceRequestPage.routeName), + _FloatingButtonListTile(iconName: "service_request", label: context.translation.serviceRequest, routeName: NewServiceRequestPage.routeName), ], ).paddingOnly(top: 8, bottom: 8), ), @@ -79,7 +79,7 @@ class _AppFloatingActionButtonState extends State { class _FloatingButtonListTile extends StatelessWidget { final String iconName, routeName; - final TranslationKeys label; + final String label; const _FloatingButtonListTile({ @required this.iconName, @@ -102,7 +102,7 @@ class _FloatingButtonListTile extends StatelessWidget { color: context.isDark ? AppColor.primary40 : AppColor.primary70, ), title: Text( - context.translate(label), + label, style: Theme.of(context).textTheme.titleLarge?.copyWith(fontWeight: FontWeight.w500), ), ), diff --git a/lib/new_views/common_widgets/app_loading_manager.dart b/lib/new_views/common_widgets/app_loading_manager.dart index eed936a0..7448058b 100644 --- a/lib/new_views/common_widgets/app_loading_manager.dart +++ b/lib/new_views/common_widgets/app_loading_manager.dart @@ -70,11 +70,11 @@ class _AppLoadingManagerState extends State { child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - Text(context.translate(TranslationKeys.httpError), style: Theme.of(context).textTheme.titleMedium), + Text(context.translation.httpError, style: Theme.of(context).textTheme.titleMedium), 4.height, OutlinedButton( onPressed: widget.onRefresh, - child: Text(context.translate(TranslationKeys.tryAgain)), + child: Text(context.translation.tryAgain), ) ], ), diff --git a/lib/new_views/common_widgets/app_text_form_field.dart b/lib/new_views/common_widgets/app_text_form_field.dart index 5c3aa0c5..d5b39c64 100644 --- a/lib/new_views/common_widgets/app_text_form_field.dart +++ b/lib/new_views/common_widgets/app_text_form_field.dart @@ -11,8 +11,8 @@ class AppTextFormField extends StatefulWidget { final Function(String) onChange; final bool obscureText; final VoidCallback showPassword; - final TranslationKeys hintText; - final TranslationKeys labelText; + final String hintText; + final String labelText; final TextInputType textInputType; final String initialValue; final TextStyle style; @@ -96,8 +96,8 @@ class _AppTextFormFieldState extends State { fillColor: context.isDark ? AppColor.neutral50 : Colors.white, errorStyle: AppTextStyle.tiny.copyWith(color: context.isDark ? AppColor.red50 : AppColor.red60), floatingLabelStyle: AppTextStyle.body1?.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? null : AppColor.neutral20), - hintText: widget.hintText != null ? context.translate(widget.hintText) : null, - labelText: widget.labelText != null ? context.translate(widget.labelText) : null, + hintText: widget.hintText ?? "", + labelText: widget.labelText ?? "", suffixIcon: widget.prefixIconData == null ? null : Icon( diff --git a/lib/new_views/common_widgets/default_app_bar.dart b/lib/new_views/common_widgets/default_app_bar.dart index e839eedb..e1e5765d 100644 --- a/lib/new_views/common_widgets/default_app_bar.dart +++ b/lib/new_views/common_widgets/default_app_bar.dart @@ -8,7 +8,7 @@ import '../../models/enums/translation_keys.dart'; import '../app_style/app_color.dart'; class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget { - final TranslationKeys title; + final String title; const DefaultAppBar({@required this.title, Key key}) : super(key: key); @@ -23,7 +23,7 @@ class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget { Navigator.of(context).pop(); }), Text( - context.translate(title), + title, style: AppTextStyles.heading3?.copyWith(fontWeight: FontWeight.w600, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ).expanded, ], diff --git a/lib/new_views/common_widgets/single_item_drop_down_menu.dart b/lib/new_views/common_widgets/single_item_drop_down_menu.dart index deb434dd..b03f3ec2 100644 --- a/lib/new_views/common_widgets/single_item_drop_down_menu.dart +++ b/lib/new_views/common_widgets/single_item_drop_down_menu.dart @@ -15,7 +15,7 @@ class SingleItemDropDownMenu exte final T initialValue; final bool enabled; final List staticData; - final TranslationKeys title; + final String title; /// To use a static data (without calling API) /// just send [NullableLoadingProvider] as generic data type and fill the [staticData] @@ -108,7 +108,7 @@ class _SingleItemDropDownMenuState( @@ -119,7 +119,7 @@ class _SingleItemDropDownMenuState { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - context.translate(TranslationKeys.welcome), + context.translation.welcome, style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), ), Text( diff --git a/lib/new_views/pages/login_page.dart b/lib/new_views/pages/login_page.dart index 75930f70..fae8671d 100644 --- a/lib/new_views/pages/login_page.dart +++ b/lib/new_views/pages/login_page.dart @@ -49,13 +49,13 @@ class _LoginPageState extends State { children: [ Hero(tag: "logo", child: "logo".toSvgAsset(height: 64)), 64.height, - context.translate(TranslationKeys.login).heading2(context).custom(fontWeight: FontWeight.w600, color: context.isDark ? AppColor.primary50 : AppColor.neutral50), - context.translate(TranslationKeys.enterCredsToLogin).heading6(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), + context.translation.login.heading2(context).custom(fontWeight: FontWeight.w600, color: context.isDark ? AppColor.primary50 : AppColor.neutral50), + context.translation.enterCredsToLogin.heading6(context).custom(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), 32.height, AppTextFormField( initialValue: _user?.userName, - validator: (value) => Validator.hasValue(value) ? null : context.translate(TranslationKeys.requiredField), - labelText: TranslationKeys.username, + validator: (value) => Validator.hasValue(value) ? null : context.translation.requiredField, + labelText: context.translation.username, textInputType: TextInputType.name, onSaved: (value) { _user.userName = value; @@ -64,13 +64,13 @@ class _LoginPageState extends State { 16.height, AppTextFormField( initialValue: _user?.password, - labelText: TranslationKeys.password, + labelText: context.translation.password, obscureText: true, validator: (value) => Validator.isValidPassword(value) ? null : value.isEmpty - ? context.translate(TranslationKeys.requiredField) - : context.translate(TranslationKeys.passwordLengthMessage), + ? context.translation.requiredField + : context.translation.passwordLengthMessage, onSaved: (value) { _user.password = value; }, @@ -82,13 +82,13 @@ class _LoginPageState extends State { onTap: () { /// TODO [zaid] : push to another screen }, - child: context.translate(TranslationKeys.forgotPassword).bodyText(context).custom(color: AppColor.primary50, fontWeight: FontWeight.w500), + child: context.translation.forgotPassword.bodyText(context).custom(color: AppColor.primary50, fontWeight: FontWeight.w500), ), ), ], ), ).center.expanded, - AppFilledButton(label: TranslationKeys.login, maxWidth: true, onPressed: _login), + AppFilledButton(label: context.translation.login, maxWidth: true, onPressed: _login), ], ).paddingOnly(left: 16, right: 16, bottom: 24, top: 24), ), diff --git a/lib/new_views/pages/new_gas_refill_request_page.dart b/lib/new_views/pages/new_gas_refill_request_page.dart index e3b77b3d..50a646d8 100644 --- a/lib/new_views/pages/new_gas_refill_request_page.dart +++ b/lib/new_views/pages/new_gas_refill_request_page.dart @@ -30,6 +30,7 @@ import '../common_widgets/default_app_bar.dart'; class NewGasRefillRequestPage extends StatefulWidget { static const String routeName = "/new_gas_refill_request_page"; + const NewGasRefillRequestPage({Key key}) : super(key: key); @override @@ -60,7 +61,7 @@ class _NewGasRefillRequestPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - appBar: const DefaultAppBar(title: TranslationKeys.newGasRefillRequest), + appBar: DefaultAppBar(title: context.translation.newGasRefillRequest), body: Column( children: [ SingleChildScrollView( @@ -71,7 +72,7 @@ class _NewGasRefillRequestPageState extends State { 16.height, SingleItemDropDownMenu( context: context, - title: TranslationKeys.gasType, + title: context.translation.gasType, onSelect: (value) { _currentDetails.gasType = value; }, @@ -79,13 +80,13 @@ class _NewGasRefillRequestPageState extends State { 8.height, AppTextFormField( controller: _quantityController, - labelText: TranslationKeys.quantity, + labelText: context.translation.quantity, textInputType: TextInputType.number, validator: (value) => Validator.hasValue(value) ? Validator.isNumeric(value) ? null - : context.translate(TranslationKeys.onlyNumbers) - : context.translate(TranslationKeys.requiredField), + : context.translation.onlyNumbers + : context.translation.requiredField, onSaved: (text) { _currentDetails.requestedQty = double.tryParse(text ?? "") ?? 0; }, @@ -93,7 +94,7 @@ class _NewGasRefillRequestPageState extends State { 8.height, SingleItemDropDownMenu( context: context, - title: TranslationKeys.cylinderType, + title: context.translation.cylinderType, onSelect: (value) { _currentDetails.cylinderType = value; }, @@ -101,7 +102,7 @@ class _NewGasRefillRequestPageState extends State { 8.height, SingleItemDropDownMenu( context: context, - title: TranslationKeys.cylinderSize, + title: context.translation.cylinderSize, onSelect: (value) { _currentDetails.cylinderSize = value; }, @@ -109,7 +110,7 @@ class _NewGasRefillRequestPageState extends State { 8.height, SingleItemDropDownMenu( context: context, - title: TranslationKeys.destinationSite, + title: context.translation.destinationSite, initialValue: _gasModel.site, onSelect: (value) { setState(() { @@ -120,7 +121,7 @@ class _NewGasRefillRequestPageState extends State { 8.height, SingleItemDropDownMenu( context: context, - title: TranslationKeys.building, + title: context.translation.building, initialValue: _gasModel.building, enabled: _gasModel.site?.buildings?.isNotEmpty ?? false, staticData: _gasModel.site?.buildings ?? [], @@ -133,7 +134,7 @@ class _NewGasRefillRequestPageState extends State { 8.height, SingleItemDropDownMenu( context: context, - title: TranslationKeys.floor, + title: context.translation.floor, initialValue: _gasModel.floor, enabled: _gasModel.building?.floors?.isNotEmpty ?? false, staticData: _gasModel.building?.floors ?? [], @@ -146,7 +147,7 @@ class _NewGasRefillRequestPageState extends State { 8.height, SingleItemDropDownMenu( context: context, - title: TranslationKeys.department, + title: context.translation.department, initialValue: _gasModel.department, enabled: _gasModel.floor?.departments?.isNotEmpty ?? false, staticData: _gasModel.floor?.departments ?? [], @@ -157,14 +158,14 @@ class _NewGasRefillRequestPageState extends State { // 8.height, // SingleItemDropDownMenu( // context: context, - // title: TranslationKeys.department, + // title: context.translation.department, // onSelect: (value) { // _formModel.department = value; // }, // ), 8.height, AppFilledButton( - label: TranslationKeys.add, + label: context.translation.add, maxWidth: true, textColor: Colors.white, buttonColor: context.isDark ? AppColor.neutral60 : AppColor.neutral50, @@ -189,9 +190,9 @@ class _NewGasRefillRequestPageState extends State { children: [ _gasModel.gazRefillDetails[index].gasType?.name?.heading5(context), 8.height, - ("${context.translate(TranslationKeys.quantity)}: ${_gasModel.gazRefillDetails[index].requestedQty}").bodyText(context), - ("${context.translate(TranslationKeys.cylinderSize)}: ${_gasModel.gazRefillDetails[index].cylinderSize?.name}").bodyText(context), - ("${context.translate(TranslationKeys.cylinderType)}: ${_gasModel.gazRefillDetails[index].cylinderType?.name}").bodyText(context), + ("${context.translation.quantity}: ${_gasModel.gazRefillDetails[index].requestedQty}").bodyText(context), + ("${context.translation.cylinderSize}: ${_gasModel.gazRefillDetails[index].cylinderSize?.name}").bodyText(context), + ("${context.translation.cylinderType}: ${_gasModel.gazRefillDetails[index].cylinderType?.name}").bodyText(context), ], ), Container( @@ -209,10 +210,10 @@ class _NewGasRefillRequestPageState extends State { ], ), const Divider().defaultStyle(context), - ("${context.translate(TranslationKeys.site)}: ${_gasModel.site?.custName}").bodyText(context), - ("${context.translate(TranslationKeys.building)}: ${_gasModel.building?.name}").bodyText(context), - ("${context.translate(TranslationKeys.floor)}: ${_gasModel.floor?.name}").bodyText(context), - ("${context.translate(TranslationKeys.department)}: ${_gasModel.department?.departmentName}").bodyText(context), + ("${context.translation.site}: ${_gasModel.site?.custName}").bodyText(context), + ("${context.translation.building}: ${_gasModel.building?.name}").bodyText(context), + ("${context.translation.floor}: ${_gasModel.floor?.name}").bodyText(context), + ("${context.translation.department}: ${_gasModel.department?.departmentName}").bodyText(context), ], ).paddingAll(16), ); @@ -223,7 +224,7 @@ class _NewGasRefillRequestPageState extends State { ), ), ).expanded, - AppFilledButton(label: TranslationKeys.submitRequest, maxWidth: true, onPressed: _submit), + AppFilledButton(label: context.translation.submitRequest, maxWidth: true, onPressed: _submit), ], ).paddingOnly(left: 16, right: 16, bottom: 24), ); @@ -246,7 +247,7 @@ class _NewGasRefillRequestPageState extends State { Future _submit() async { if (_gasModel.gazRefillDetails?.isEmpty ?? true) { - Fluttertoast.showToast(msg: context.translate(TranslationKeys.youHaveToAddRequests)); + Fluttertoast.showToast(msg: context.translation.youHaveToAddRequests); return; } showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); @@ -256,11 +257,11 @@ class _NewGasRefillRequestPageState extends State { ); Navigator.pop(context); if (status >= 200 && status < 300) { - Fluttertoast.showToast(msg: context.translate(TranslationKeys.createdSuccessfully)); + Fluttertoast.showToast(msg: context.translation.createdSuccessfully); Navigator.of(context).pop(); setState(() {}); } else { - Fluttertoast.showToast(msg: context.translate(TranslationKeys.failedToCompleteRequest)); + Fluttertoast.showToast(msg: context.translation.failedToCompleteRequest); } } } diff --git a/lib/new_views/pages/new_service_request_page.dart b/lib/new_views/pages/new_service_request_page.dart index 1783c3f1..72c16855 100644 --- a/lib/new_views/pages/new_service_request_page.dart +++ b/lib/new_views/pages/new_service_request_page.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/enums/translation_keys.dart'; @@ -12,13 +13,13 @@ class NewServiceRequestPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: const DefaultAppBar(title: TranslationKeys.newServiceRequest), + appBar: DefaultAppBar(title: context.translation.newServiceRequest), body: Column( children: [ SingleChildScrollView( child: Column(children: []), ).expanded, - AppFilledButton(label: TranslationKeys.submitRequest, maxWidth: true, onPressed: () {}) + AppFilledButton(label: context.translation.submitRequest, maxWidth: true, onPressed: () {}) ], ).paddingOnly(left: 16, right: 16, bottom: 24), ); diff --git a/lib/new_views/pages/new_transfer_request_page.dart b/lib/new_views/pages/new_transfer_request_page.dart index 96ad05eb..62a0f0ec 100644 --- a/lib/new_views/pages/new_transfer_request_page.dart +++ b/lib/new_views/pages/new_transfer_request_page.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/enums/translation_keys.dart'; @@ -12,13 +13,13 @@ class NewTransferRequestPage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: const DefaultAppBar(title: TranslationKeys.newTransferRequest), + appBar: DefaultAppBar(title: context.translation.newTransferRequest), body: Column( children: [ SingleChildScrollView( child: Column(children: []), ).expanded, - AppFilledButton(label: TranslationKeys.submitRequest, maxWidth: true, onPressed: () {}) + AppFilledButton(label: context.translation.submitRequest, maxWidth: true, onPressed: () {}) ], ).paddingOnly(left: 16, right: 16, bottom: 24), ); diff --git a/lib/views/pages/device_transfer/device_transfer_details.dart b/lib/views/pages/device_transfer/device_transfer_details.dart index 5fdfdb93..a3c7db2f 100644 --- a/lib/views/pages/device_transfer/device_transfer_details.dart +++ b/lib/views/pages/device_transfer/device_transfer_details.dart @@ -1,10 +1,9 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/device/device_transfer.dart'; -import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/pages/device_transfer/update_device_transfer.dart'; @@ -32,7 +31,6 @@ class _DeviceTransferDetailsState extends State { bool _isReceiver = false; UserProvider _userProvider; bool _isLoading = false; - Subtitle _subtitle; final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); @@ -57,7 +55,6 @@ class _DeviceTransferDetailsState extends State { if (snapshot.connectionState == ConnectionState.waiting) { return const ALoading(); } else { - _subtitle = AppLocalization.of(context).subtitle; _userProvider = Provider.of(context); _isSender = _userProvider.user.userID == _model.sender?.userId; _isReceiver = _userProvider.user.userID == _model.receiver?.userId; @@ -79,7 +76,7 @@ class _DeviceTransferDetailsState extends State { Expanded( child: Center( child: Text( - _subtitle.details, + context.translation.details, style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), ), ), @@ -99,39 +96,39 @@ class _DeviceTransferDetailsState extends State { info: _model.title?.toString(), ), RequestInfoRow( - title: _subtitle.assetName, + title: context.translation.assetName, info: _model.device.assetName, ), RequestInfoRow( - title: _subtitle.assetSN, + title: context.translation.assetSN, info: _model.device.serialNumber, ), RequestInfoRow( - title: _subtitle.assetNumber, + title: context.translation.assetNumber, info: _model.device.number, ), RequestInfoRow( - title: _subtitle.destinationSite, + title: context.translation.destinationSite, info: _model.device.destSiteName, ), RequestInfoRow( - title: _subtitle.building, + title: context.translation.building, info: _model.device.destBuildingName, ), RequestInfoRow( - title: _subtitle.floor, + title: context.translation.floor, info: _model.device.destFloor, ), RequestInfoRow( - title: _subtitle.department, + title: context.translation.department, info: _model.device.destDepartmentName, ), RequestInfoRow( - title: _subtitle.room, + title: context.translation.room, info: _model.device.destRoom, ), RequestInfoRow( - title: _subtitle.actions, + title: context.translation.actions, info: "", ), const SizedBox(height: 8), @@ -142,7 +139,7 @@ class _DeviceTransferDetailsState extends State { ), if (_userProvider.user?.type == UsersTypes.engineer) ASmallButton( - text: _subtitle.edit, + text: context.translation.edit, onPressed: (_isSender) ? (_model.sender.status?.name == "Closed" ? null @@ -170,7 +167,7 @@ class _DeviceTransferDetailsState extends State { ), if (_userProvider.user?.type == UsersTypes.engineer) ASmallButton( - text: _subtitle.edit, + text: context.translation.edit, onPressed: (_isReceiver) ? (_model.receiver.status?.name == "Closed" ? null diff --git a/lib/views/pages/device_transfer/request_device_transfer.dart b/lib/views/pages/device_transfer/request_device_transfer.dart index 5f6ad2a3..4a85b929 100644 --- a/lib/views/pages/device_transfer/request_device_transfer.dart +++ b/lib/views/pages/device_transfer/request_device_transfer.dart @@ -3,6 +3,7 @@ import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/device/device_transfer.dart'; @@ -35,7 +36,6 @@ class RequestDeviceTransfer extends StatefulWidget { class _RequestDeviceTransferState extends State { bool _isLoading = false; bool _validate = false; - Subtitle _subtitle; UserProvider _userProvider; SettingProvider _settingProvider; DeviceTransferProvider _deviceTransferProvider; @@ -95,7 +95,6 @@ class _RequestDeviceTransferState extends State { @override Widget build(BuildContext context) { - _subtitle = AppLocalization.of(context).subtitle; _userProvider = Provider.of(context); _settingProvider = Provider.of(context); _deviceTransferProvider = Provider.of(context, listen: false); @@ -141,7 +140,7 @@ class _RequestDeviceTransferState extends State { const ASubTitle("Asset"), if (_validate && _formModel.device == null) ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), 6.height, @@ -276,7 +275,7 @@ class _RequestDeviceTransferState extends State { ), 12.height, AButton( - text: _subtitle.submit, + text: context.translation.submit, onPressed: _onSubmit, ), const SizedBox( diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index 29844f8a..91501778 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -7,6 +7,7 @@ import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/models/subtitle.dart'; @@ -35,7 +36,6 @@ class UpdateDeviceTransfer extends StatefulWidget { class _UpdateDeviceTransferState extends State { bool _isLoading = false; bool _validate = false; - Subtitle _subtitle; UserProvider _userProvider; SettingProvider _settingProvider; Uint8List _signature; @@ -68,9 +68,7 @@ class _UpdateDeviceTransferState extends State { _isLoading = false; setState(() {}); if (status >= 200 && status < 300) { - Fluttertoast.showToast( - msg: _subtitle.requestCompleteSuccessfully, - ); + Fluttertoast.showToast(msg: context.translation.successfulRequestMessage); _validate = false; Navigator.of(context).pop(); } @@ -95,7 +93,6 @@ class _UpdateDeviceTransferState extends State { @override Widget build(BuildContext context) { - _subtitle = AppLocalization.of(context).subtitle; _userProvider = Provider.of(context); _settingProvider = Provider.of(context); _deviceTransferProvider = Provider.of(context, listen: false); @@ -143,7 +140,7 @@ class _UpdateDeviceTransferState extends State { const SizedBox( height: 8, ), - ASubTitle(_subtitle.travelingHours), + ASubTitle(context.translation.travelingHours), const SizedBox( height: 4, ), @@ -159,7 +156,7 @@ class _UpdateDeviceTransferState extends State { const SizedBox( height: 16, ), - ASubTitle(_subtitle.workingHours), + ASubTitle(context.translation.workingHours), const SizedBox(height: 8), Row( children: [ @@ -176,7 +173,7 @@ class _UpdateDeviceTransferState extends State { ], ), const SizedBox(height: 16), - ASubTitle(_subtitle.status), + ASubTitle(context.translation.status), const SizedBox( height: 4, ), @@ -217,7 +214,7 @@ class _UpdateDeviceTransferState extends State { Padding( padding: const EdgeInsets.all(16.0), child: AButton( - text: _subtitle.update, + text: context.translation.update, onPressed: _update, ), ), diff --git a/lib/views/pages/login.dart b/lib/views/pages/login.dart index cf4bf1df..d56630af 100644 --- a/lib/views/pages/login.dart +++ b/lib/views/pages/login.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/validator/validator.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/user.dart'; import 'package:test_sa/views/app_style/sizing.dart'; @@ -39,7 +40,7 @@ class _LoginState extends State { _settingProvider = Provider.of(context); _height = MediaQuery.of(context).size.height; _width = MediaQuery.of(context).size.width; - Subtitle _subtitle = AppLocalization.of(context).subtitle; + return Scaffold( key: _scaffoldKey, body: SafeArea( @@ -75,11 +76,11 @@ class _LoginState extends State { ), ATextFormField( initialValue: _user?.userName, - hintText: _subtitle.name, + hintText: context.translation.name, textAlign: TextAlign.left, style: Theme.of(context).textTheme.bodyText1, prefixIconData: Icons.account_circle, - validator: (value) => Validator.hasValue(value) ? null : _subtitle.nameValidateMessage, + validator: (value) => Validator.hasValue(value) ? null : context.translation.nameValidateMessage, textInputType: TextInputType.name, onSaved: (value) { _user.userName = value; @@ -88,12 +89,12 @@ class _LoginState extends State { SizedBox(height: 12), ATextFormField( initialValue: _user?.password, - hintText: _subtitle.password, + hintText: context.translation.password, obscureText: _obscurePassword, style: Theme.of(context).textTheme.bodyText1, prefixIconData: Icons.vpn_key_sharp, textAlign: TextAlign.left, - validator: (value) => Validator.isValidPassword(value) ? null : _subtitle.passwordValidateMessage, + validator: (value) => Validator.isValidPassword(value) ? null : context.translation.passwordValidateMessage, showPassword: () { _obscurePassword = !_obscurePassword; setState(() {}); @@ -106,7 +107,7 @@ class _LoginState extends State { height: 32 * AppStyle.getScaleFactor(context), ), AButton( - text: _subtitle.signIn, + text: context.translation.signIn, onPressed: () async { if (!_formKey.currentState.validate()) return; _formKey.currentState.save(); @@ -124,12 +125,12 @@ class _LoginState extends State { // if (_userProvider.user.isActive) // else - // Fluttertoast.showToast(msg: _subtitle.activationAlert); + // Fluttertoast.showToast(msg: context.translation.activationAlert); } else { if (status >= 400 && status < 500) return; String errorMessage = - status == 400 || _userProvider.user?.userName == null ? _subtitle.wrongEmailOrPassword : HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle); + status == 400 || _userProvider.user?.userName == null ? context.translation.wrongEmailOrPassword : HttpStatusManger.getStatusMessage(status: status, subtitle: context.translation); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text(errorMessage), )); @@ -140,7 +141,7 @@ class _LoginState extends State { // height: 140 * AppStyle.getScaleFactor(context), // ), // AOutLinedButton( - // text: _subtitle.signUp, + // text: context.translation.signUp, // //color: AColors.cyan, // onPressed: () { // Navigator.of(context).pushNamed(Register.id); diff --git a/lib/views/pages/register.dart b/lib/views/pages/register.dart index 1246fff3..56c190dc 100644 --- a/lib/views/pages/register.dart +++ b/lib/views/pages/register.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/validator/validator.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/user.dart'; @@ -38,7 +39,7 @@ class _RegisterState extends State { _settingProvider = Provider.of(context); _width = MediaQuery.of(context).size.width; _height = MediaQuery.of(context).size.height; - Subtitle _subtitle = AppLocalization.of(context).subtitle; + return Scaffold( key: _scaffoldKey, body: LoadingManager( @@ -68,10 +69,10 @@ class _RegisterState extends State { ), ATextFormField( initialValue: _user.userName, - hintText: _subtitle.name, + hintText: context.translation.name, prefixIconData: Icons.account_circle, style: Theme.of(context).textTheme.headline6, - validator: (value) => Validator.hasValue(value) ? null : _subtitle.nameValidateMessage, + validator: (value) => Validator.hasValue(value) ? null : context.translation.nameValidateMessage, onSaved: (value) { _user.userName = value; }, @@ -79,11 +80,11 @@ class _RegisterState extends State { const SizedBox(height: 12), ATextFormField( initialValue: _user.email, - hintText: _subtitle.email, + hintText: context.translation.email, prefixIconData: Icons.email, textInputType: TextInputType.emailAddress, style: Theme.of(context).textTheme.headline6, - validator: (value) => Validator.isEmail(value) ? null : _subtitle.emailValidateMessage, + validator: (value) => Validator.isEmail(value) ? null : context.translation.emailValidateMessage, onSaved: (value) { _user.email = value; }, @@ -91,11 +92,11 @@ class _RegisterState extends State { const SizedBox(height: 12), ATextFormField( initialValue: _user.password, - hintText: _subtitle.password, + hintText: context.translation.password, prefixIconData: Icons.vpn_key_sharp, style: Theme.of(context).textTheme.headline6, obscureText: _obscurePassword, - validator: (value) => Validator.isValidPassword(value) ? null : _subtitle.passwordValidateMessage, + validator: (value) => Validator.isValidPassword(value) ? null : context.translation.passwordValidateMessage, showPassword: () { _obscurePassword = !_obscurePassword; setState(() {}); @@ -111,10 +112,10 @@ class _RegisterState extends State { ATextFormField( initialValue: _user.password, prefixIconData: Icons.vpn_key_sharp, - hintText: _subtitle.confirmPassword, + hintText: context.translation.confirmPassword, style: Theme.of(context).textTheme.headline6, obscureText: _obscurePassword, - validator: (value) => _user.password == value ? null : _subtitle.confirmPasswordValidateMessage, + validator: (value) => _user.password == value ? null : context.translation.confirmPasswordValidateMessage, showPassword: () { _obscurePassword = !_obscurePassword; setState(() {}); @@ -141,10 +142,10 @@ class _RegisterState extends State { const SizedBox(height: 12), ATextFormField( initialValue: _user.phoneNumber, - hintText: _subtitle.phoneNumber, + hintText: context.translation.phoneNumber, style: Theme.of(context).textTheme.headline6, prefixIconData: Icons.phone_android, - validator: (value) => Validator.isPhoneNumber(value) ? null : _subtitle.phoneNumberValidateMessage, + validator: (value) => Validator.isPhoneNumber(value) ? null : context.translation.phoneNumberValidateMessage, textInputType: TextInputType.phone, onSaved: (value) { _user.phoneNumber = value; @@ -153,11 +154,11 @@ class _RegisterState extends State { SizedBox(height: 8), // ATextFormField( // initialValue: _user.whatsApp, - // hintText: _subtitle.whatsApp, + // hintText: context.translation.whatsApp, // style: Theme.of(context).textTheme.headline6, // prefixIconData: FontAwesomeIcons.whatsapp, // prefixIconSize: 36, - // validator: (value) => Validator.isPhoneNumber(value) ? null : _subtitle.phoneNumberValidateMessage, + // validator: (value) => Validator.isPhoneNumber(value) ? null : context.translation.phoneNumberValidateMessage, // textInputType: TextInputType.phone, // onSaved: (value) { // _user.whatsApp = value; @@ -165,19 +166,19 @@ class _RegisterState extends State { // ), const SizedBox(height: 12), AButton( - text: _subtitle.signUp, + text: context.translation.signUp, onPressed: () async { if (!_formKey.currentState.validate()) return; _formKey.currentState.save(); if (_user.clientId == null) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text(_subtitle.hospitalRequired), + content: Text(context.translation.hospitalRequired), )); return; } if (_user.departmentId == null) { ScaffoldMessenger.of(context).showSnackBar(SnackBar( - content: Text(_subtitle.unitRequired), + content: Text(context.translation.uniteRequired), )); return; } @@ -186,14 +187,14 @@ class _RegisterState extends State { host: _settingProvider.host, ); if (status >= 200 && status < 300) { - Fluttertoast.showToast(msg: _subtitle.activationAlert); + Fluttertoast.showToast(msg: context.translation.activationAlert); Navigator.of(context).pop(); } else { String errorMessage = status == 402 - ? _subtitle.nameExist + ? context.translation.nameExist : status == 401 - ? _subtitle.emailExist - : HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle); + ? context.translation.emailExist + : HttpStatusManger.getStatusMessage(status: status, subtitle: context.translation); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text(errorMessage), )); diff --git a/lib/views/pages/sub_workorder/create_sub_workorder_page.dart b/lib/views/pages/sub_workorder/create_sub_workorder_page.dart index ce67949b..9542bf4b 100644 --- a/lib/views/pages/sub_workorder/create_sub_workorder_page.dart +++ b/lib/views/pages/sub_workorder/create_sub_workorder_page.dart @@ -7,6 +7,7 @@ import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/call_request_for_work_order_model.dart'; import 'package:test_sa/models/lookup.dart'; @@ -23,7 +24,6 @@ import 'package:test_sa/views/widgets/status/service_request/service_request_def import '../../../controllers/api_routes/http_status_manger.dart'; import '../../../controllers/localization/localization.dart'; import '../../../controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.dart'; -import '../../../models/subtitle.dart'; import '../../widgets/app_text_form_field.dart'; import '../../widgets/buttons/app_back_button.dart'; import '../../widgets/buttons/app_button.dart'; @@ -99,7 +99,6 @@ class _CreateSubWorkOrderPageState extends State { if (_callRequestForWorkOrder == null) { getAssetType(); } - final Subtitle subtitle = AppLocalization.of(context).subtitle; return Scaffold( body: SafeArea( @@ -148,7 +147,7 @@ class _CreateSubWorkOrderPageState extends State { const ASubTitle("Equipment status"), if (_validate && _subWorkOrders?.equipmentStatus == null) ASubTitle( - subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), const SizedBox( @@ -171,7 +170,7 @@ class _CreateSubWorkOrderPageState extends State { const ASubTitle("Return to Service"), // if (_validate && _subWorkOrders.visitDate == null) // ASubTitle( - // subtitle.requiredWord, + // context.translation.requiredWord, // color: Colors.red, // ), const SizedBox( @@ -197,10 +196,10 @@ class _CreateSubWorkOrderPageState extends State { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle("Failure ${subtitle.reasons}"), + ASubTitle("Failure ${context.translation.reasons}"), if (_validate && _subWorkOrders.reason == null) ASubTitle( - subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), const SizedBox( @@ -220,10 +219,10 @@ class _CreateSubWorkOrderPageState extends State { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(subtitle.faultDescription), + ASubTitle(context.translation.faultDescription), if (_validate && _subWorkOrders.faultDescription == null) ASubTitle( - subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), const SizedBox( @@ -326,7 +325,7 @@ class _CreateSubWorkOrderPageState extends State { Padding( padding: const EdgeInsets.all(16.0), child: AButton( - text: subtitle.create, + text: context.translation.create, onPressed: () async { _validate = true; setState(() {}); @@ -343,7 +342,7 @@ class _CreateSubWorkOrderPageState extends State { Fluttertoast.showToast(msg: "Working hours required"); return; } else if (_subWorkOrders.calllastSituation == null) { - Fluttertoast.showToast(msg: "${subtitle.callLastSituation} required"); + Fluttertoast.showToast(msg: "${context.translation.callLastSituation} required"); return; } _validate = false; @@ -361,11 +360,11 @@ class _CreateSubWorkOrderPageState extends State { _isLoading = false; setState(() {}); if (status >= 200 && status < 300) { - Fluttertoast.showToast(msg: subtitle.requestCompleteSuccessfully); + Fluttertoast.showToast(msg: context.translation.successfulRequestMessage); Navigator.of(context).pop(); Navigator.of(context).pop(); } else { - String errorMessage = HttpStatusManger.getStatusMessage(status: serviceRequestsProvider.stateCode, subtitle: subtitle); + String errorMessage = HttpStatusManger.getStatusMessage(status: serviceRequestsProvider.stateCode, subtitle: context.translation); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text(errorMessage), )); diff --git a/lib/views/pages/sub_workorder/search_sub_workorder_page.dart b/lib/views/pages/sub_workorder/search_sub_workorder_page.dart index 35817468..40c22946 100644 --- a/lib/views/pages/sub_workorder/search_sub_workorder_page.dart +++ b/lib/views/pages/sub_workorder/search_sub_workorder_page.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_request/search_work_order.dart'; @@ -33,7 +34,7 @@ class SearchSubWorkOrderPage extends StatefulWidget { class _SearchSubWorkOrderPageState extends State { final GlobalKey _formKey = GlobalKey(); final SearchWorkOrder _searchWorkOrders = SearchWorkOrder(); - Subtitle _subtitle; + bool _isLoading = false; String _callerId = "", _site = ""; Lookup _dateOperator; @@ -48,7 +49,7 @@ class _SearchSubWorkOrderPageState extends State { @override Widget build(BuildContext context) { - _subtitle = AppLocalization.of(context).subtitle; + return Scaffold( body: SafeArea( child: SingleChildScrollView( @@ -110,7 +111,7 @@ class _SearchSubWorkOrderPageState extends State { }, ), const SizedBox(height: 16), - ASubTitle(_subtitle.assignedEmployee), + ASubTitle(context.translation.assignedEmployee), const SizedBox(height: 4), ServiceReportAllUsers( initialValue: _searchWorkOrders.assignedEmployee == null ? null : Engineer(id: _searchWorkOrders.assignedEmployee.id, name: _searchWorkOrders.assignedEmployee.name), @@ -142,7 +143,7 @@ class _SearchSubWorkOrderPageState extends State { }, ), const SizedBox(height: 16), - ASubTitle(_subtitle.visitDate), + ASubTitle(context.translation.visitDate), const SizedBox(height: 4), ServiceReportVisitDateOperator( initialValue: _dateOperator, @@ -179,7 +180,7 @@ class _SearchSubWorkOrderPageState extends State { : Padding( padding: const EdgeInsets.symmetric(horizontal: 16), child: AButton( - text: _subtitle.search, + text: context.translation.search, onPressed: () async { _isLoading = true; setState(() {}); @@ -213,7 +214,7 @@ class _SearchSubWorkOrderPageState extends State { ), ); } else { - String errorMessage = HttpStatusManger.getStatusMessage(status: serviceRequestsProvider.stateCode, subtitle: _subtitle); + String errorMessage = HttpStatusManger.getStatusMessage(status: serviceRequestsProvider.stateCode, subtitle: context.translation); ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(errorMessage))); } }, diff --git a/lib/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart b/lib/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart index 6829e63b..497f4a13 100644 --- a/lib/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart +++ b/lib/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/part.dart'; import 'package:test_sa/models/service_request/search_work_order.dart'; import 'package:test_sa/views/app_style/colors.dart'; import '../../../controllers/localization/localization.dart'; -import '../../../models/subtitle.dart'; import '../../app_style/sizing.dart'; import '../../widgets/app_text_form_field.dart'; import '../../widgets/buttons/app_button.dart'; @@ -42,7 +42,7 @@ class _SparePartsBottomSheetState extends State { @override Widget build(BuildContext context) { final size = MediaQuery.of(context).size; - final Subtitle subtitle = AppLocalization.of(context).subtitle; + return Padding( padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), child: ClipRRect( @@ -89,10 +89,10 @@ class _SparePartsBottomSheetState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(subtitle.partNumberName), + ASubTitle(context.translation.partNumberName), _validate && _workOrder.sparePartsWorkOrders == null ? ASubTitle( - subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ) : const SizedBox.shrink(), @@ -121,8 +121,8 @@ class _SparePartsBottomSheetState extends State { if (_workOrder.sparePartsWorkOrders?.isNotEmpty ?? false) Row( children: [ - Expanded(flex: 3, child: Text(subtitle.number)), - Expanded(flex: 1, child: Text(subtitle.quantity)), + Expanded(flex: 3, child: Text(context.translation.number)), + Expanded(flex: 1, child: Text(context.translation.quantity)), ], ), if (_workOrder.sparePartsWorkOrders?.isNotEmpty ?? false) @@ -198,7 +198,7 @@ class _SparePartsBottomSheetState extends State { ), ), AButton( - text: subtitle.submit, + text: context.translation.submit, onPressed: () async { _formKey.currentState.save(); widget.subWorkOrder.copyFrom(_workOrder); diff --git a/lib/views/pages/sub_workorder/work_order_details_bottom_sheet.dart b/lib/views/pages/sub_workorder/work_order_details_bottom_sheet.dart index 5ed1e253..c29b0a1b 100644 --- a/lib/views/pages/sub_workorder/work_order_details_bottom_sheet.dart +++ b/lib/views/pages/sub_workorder/work_order_details_bottom_sheet.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_request/search_work_order.dart'; import 'package:test_sa/models/subtitle.dart'; @@ -58,7 +59,7 @@ class _WorkOrderDetailsBottomSheetState extends State { @override Widget build(BuildContext context) { final serviceRequestsProvider = Provider.of(context, listen: false); - Subtitle subtitle = AppLocalization.of(context).subtitle; + return Scaffold( body: SafeArea( child: Column( @@ -66,7 +67,7 @@ class _WorkOrderListState extends State { Expanded( child: _items?.isEmpty ?? [] ? NoItemFound( - message: subtitle.noServiceRequestFound, + message: context.translation.noServiceRequestFound, ) : LazyLoading( nextPage: serviceRequestsProvider.nextPage, diff --git a/lib/views/pages/sub_workorder/workorder_update.dart b/lib/views/pages/sub_workorder/workorder_update.dart index 3970aeaa..d9442399 100644 --- a/lib/views/pages/sub_workorder/workorder_update.dart +++ b/lib/views/pages/sub_workorder/workorder_update.dart @@ -19,12 +19,11 @@ class WorkOrderUpdate extends StatefulWidget { class _WorkOrderUpdateState extends State { final GlobalKey _formKey = GlobalKey(); - Subtitle _subtitle; + bool _isLoading = false; @override Widget build(BuildContext context) { - _subtitle = AppLocalization.of(context).subtitle; return Scaffold( body: SafeArea( diff --git a/lib/views/pages/user/gas_refill/gas_refill_details.dart b/lib/views/pages/user/gas_refill/gas_refill_details.dart index 060ec9ed..226d1c45 100644 --- a/lib/views/pages/user/gas_refill/gas_refill_details.dart +++ b/lib/views/pages/user/gas_refill/gas_refill_details.dart @@ -7,6 +7,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/gas_refill_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/sizing.dart'; @@ -41,7 +42,7 @@ class _GasRefillDetailsState extends State { SettingProvider _settingProvider; GasRefillProvider _gasRefillProvider; bool _isLoading = false; - Subtitle _subtitle; + final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); @@ -60,13 +61,13 @@ class _GasRefillDetailsState extends State { setState(() {}); if (status >= 200 && status < 300) { Fluttertoast.showToast( - msg: _subtitle.requestCompleteSuccessfully, + msg: context.translation.successfulRequestMessage, ); _enableEdit = false; _validate = false; //Navigator.of(context).pop(); } else { - String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle); + String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: context.translation); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text(errorMessage), )); @@ -81,7 +82,7 @@ class _GasRefillDetailsState extends State { @override Widget build(BuildContext context) { - _subtitle = AppLocalization.of(context).subtitle; + _userProvider = Provider.of(context); _settingProvider = Provider.of(context); _gasRefillProvider = Provider.of(context); @@ -159,7 +160,7 @@ class _GasRefillDetailsState extends State { info: _model.title, ), RequestInfoRow( - title: _subtitle.hospital, + title: context.translation.hospital, info: _model.clientName, ), RequestInfoRow( @@ -175,11 +176,11 @@ class _GasRefillDetailsState extends State { info: _model.department?.departmentName, ), RequestInfoRow( - title: _subtitle.startDate, + title: context.translation.startDate, info: _model.startDate == null ? null : "${DateFormat.yMd().format(_model.startDate)} ${DateFormat.Hms().format(_model.startDate)}", ), RequestInfoRow( - title: _subtitle.endDate, + title: context.translation.endDate, info: _model.endDate == null ? null : "${DateFormat.yMd().format(_model.endDate)} ${DateFormat.Hms().format(_model.endDate)}", ), _enableEdit @@ -189,10 +190,10 @@ class _GasRefillDetailsState extends State { const SizedBox( height: 8, ), - ASubTitle(_subtitle.status), + ASubTitle(context.translation.status), if (_validate && _model.status == null) ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), const SizedBox( @@ -210,7 +211,7 @@ class _GasRefillDetailsState extends State { children: [ Expanded( child: Text( - "${_subtitle.status} : ", + "${context.translation.status} : ", style: Theme.of(context).textTheme.subtitle2, textScaleFactor: AppStyle.getScaleFactor(context), ), @@ -244,7 +245,7 @@ class _GasRefillDetailsState extends State { height: 16, ), AButton( - text: _subtitle.update, + text: context.translation.update, onPressed: _update, ), ], diff --git a/lib/views/pages/user/gas_refill/request_gas_refill.dart b/lib/views/pages/user/gas_refill/request_gas_refill.dart index 639666d1..47ed324f 100644 --- a/lib/views/pages/user/gas_refill/request_gas_refill.dart +++ b/lib/views/pages/user/gas_refill/request_gas_refill.dart @@ -8,6 +8,7 @@ import 'package:test_sa/controllers/providers/api/gas_refill_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/validator/validator.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/gas_refill/gas_refill_details.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; import 'package:test_sa/models/lookup.dart'; @@ -46,7 +47,7 @@ class RequestGasRefill extends StatefulWidget { class _RequestGasRefillState extends State { bool _isLoading = false; bool _validate = false; - Subtitle _subtitle; + UserProvider _userProvider; SettingProvider _settingProvider; GasRefillProvider _gasRefillProvider; @@ -108,12 +109,12 @@ class _RequestGasRefillState extends State { setState(() {}); if (status >= 200 && status < 300) { Fluttertoast.showToast( - msg: _subtitle.requestCompleteSuccessfully, + msg: context.translation.successfulRequestMessage, ); Navigator.of(context).pop(_formModel); setState(() {}); } else { - String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle); + String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: context.translation); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text(errorMessage), )); @@ -151,7 +152,7 @@ class _RequestGasRefillState extends State { @override Widget build(BuildContext context) { - _subtitle = AppLocalization.of(context).subtitle; + _userProvider = Provider.of(context); _settingProvider = Provider.of(context); if (_gasRefillProvider == null) { @@ -204,9 +205,9 @@ class _RequestGasRefillState extends State { ), ), // const SizedBox(height: 4,), - // ASubTitle(_subtitle.title), + // ASubTitle(context.translation.title), // if(_validate && _formModel.title == null) - // ASubTitle(_subtitle.requiredWord,color: Colors.red,), + // ASubTitle(context.translation.requiredWord,color: Colors.red,), // SizedBox(height: 4,), // ATextFormField( // initialValue: _formModel?.title, @@ -218,10 +219,10 @@ class _RequestGasRefillState extends State { // }, // ), // const SizedBox(height: 8,), - ASubTitle(_subtitle.status), + ASubTitle(context.translation.status), if (_validate && _formModel.status == null) ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), const SizedBox( @@ -293,7 +294,7 @@ class _RequestGasRefillState extends State { }, ), const SizedBox(height: 8), - if (widget.gasRefillModel != null) ASubTitle(_subtitle.workingHours), + if (widget.gasRefillModel != null) ASubTitle(context.translation.workingHours), if (widget.gasRefillModel != null) const SizedBox(height: 8), if (widget.gasRefillModel != null) Row( @@ -382,7 +383,7 @@ class _RequestGasRefillState extends State { // ], // ), // const SizedBox(height: 8), - // ASubTitle(_subtitle.workingHours), + // ASubTitle(context.translation.workingHours), // const SizedBox(height: 4), // ATextFormField( // initialValue: null, @@ -392,7 +393,7 @@ class _RequestGasRefillState extends State { // : ((_gasRefillProvider.endDate?.difference(_gasRefillProvider.startDate)?.inMinutes ?? 0) / 60)?.toStringAsFixed(2)?.toString() ?? "0", // enable: false, // style: Theme.of(context).textTheme.subtitle1, - // validator: (value) => Validator.isNumeric(value) ? null : _subtitle.requiredWord, + // validator: (value) => Validator.isNumeric(value) ? null : context.translation.requiredWord, // textInputType: TextInputType.number, // onSaved: (value) { // // _serviceReport.workHours = value; @@ -408,7 +409,7 @@ class _RequestGasRefillState extends State { Divider(color: Theme.of(context).colorScheme.primary), const SizedBox(height: 4), const ASubTitle("Gas Type"), - if (_validate && _currentDetails.type == null) ASubTitle(_subtitle.requiredWord, color: Colors.red), + if (_validate && _currentDetails.type == null) ASubTitle(context.translation.requiredWord, color: Colors.red), const SizedBox(height: 4), GasTypeMenu( initialValue: _currentDetails.type, @@ -420,7 +421,7 @@ class _RequestGasRefillState extends State { const ASubTitle("Cylinder Size"), if (_validate && _currentDetails.cylinderSize == null) ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), const SizedBox( @@ -438,7 +439,7 @@ class _RequestGasRefillState extends State { const ASubTitle("Cylinder Type"), if (_validate && _currentDetails.cylinderSize == null) ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), const SizedBox( @@ -453,10 +454,10 @@ class _RequestGasRefillState extends State { const SizedBox( height: 8, ), - ASubTitle(_subtitle.requestedQuantity), + ASubTitle(context.translation.requestedQuantity), if (_validate && _currentDetails?.requestedQuantity == null) ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), SizedBox( @@ -474,10 +475,10 @@ class _RequestGasRefillState extends State { }, ), if (widget.gasRefillModel != null) const SizedBox(height: 16), - if (widget.gasRefillModel != null) ASubTitle(_subtitle.deliveredQuantity), + if (widget.gasRefillModel != null) ASubTitle(context.translation.deliveredQuantity), if (widget.gasRefillModel != null && _validate && _currentDetails?.deliveredQuantity == null) ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), if (widget.gasRefillModel != null) const SizedBox(height: 4), @@ -495,7 +496,7 @@ class _RequestGasRefillState extends State { ), const SizedBox(height: 16), AButton( - text: _subtitle.add, + text: context.translation.add, onPressed: _addNewModel, ), ], @@ -556,7 +557,7 @@ class _RequestGasRefillState extends State { ), const SizedBox(height: 16), AButton( - text: widget.gasRefillModel == null ? _subtitle.submit : _subtitle.update, + text: widget.gasRefillModel == null ? context.translation.submit : context.translation.update, onPressed: _onSubmit, ), const SizedBox(height: 100) diff --git a/lib/views/pages/user/gas_refill/track_gas_refill.dart b/lib/views/pages/user/gas_refill/track_gas_refill.dart index 9eb9bc79..cd7df4ee 100644 --- a/lib/views/pages/user/gas_refill/track_gas_refill.dart +++ b/lib/views/pages/user/gas_refill/track_gas_refill.dart @@ -36,7 +36,6 @@ class _TrackGasRefillPageState extends State with TickerProv } _userProvider = Provider.of(context); _settingProvider = Provider.of(context); - Subtitle _subtitle = AppLocalization.of(context).subtitle; return Scaffold( body: SafeArea( diff --git a/lib/views/pages/user/land_page.dart b/lib/views/pages/user/land_page.dart index 44c56661..eb424824 100644 --- a/lib/views/pages/user/land_page.dart +++ b/lib/views/pages/user/land_page.dart @@ -75,7 +75,7 @@ class _LandPageState extends State { // _serviceRequestsProvider = Provider.of(context); // _preventiveMaintenanceVisitsProvider = Provider.of(context); // _regularVisitsProvider = Provider.of(context); - // Subtitle _subtitle = AppLocalization.of(context).subtitle; + // if (firstTime) { if (path != null) { Navigator.of(context).pushNamed("/" + path.split("/").first, arguments: path.split("/").last); diff --git a/lib/views/pages/user/notifications/notifications_list.dart b/lib/views/pages/user/notifications/notifications_list.dart index 61c7c331..fa156074 100644 --- a/lib/views/pages/user/notifications/notifications_list.dart +++ b/lib/views/pages/user/notifications/notifications_list.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/app_notification.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/pages/user/requests/future_request_service_details.dart'; @@ -16,10 +17,10 @@ class NotificationsList extends StatelessWidget { @override Widget build(BuildContext context) { - Subtitle _subtitle = AppLocalization.of(context).subtitle; + if (notifications.length == 0) { return NoItemFound( - message: _subtitle.notificationsNotFound, + message: context.translation.notificationsNotFound, ); } return LazyLoading( diff --git a/lib/views/pages/user/notifications/notifications_page.dart b/lib/views/pages/user/notifications/notifications_page.dart index 614855d4..17487982 100644 --- a/lib/views/pages/user/notifications/notifications_page.dart +++ b/lib/views/pages/user/notifications/notifications_page.dart @@ -4,6 +4,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/notifications_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/pages/user/notifications/notifications_list.dart'; @@ -21,14 +22,13 @@ class _NotificationsPageState extends State with TickerProvid NotificationsProvider _notificationsProvider; UserProvider _userProvider; SettingProvider _settingProvider; - Subtitle _subtitle; @override Widget build(BuildContext context) { _notificationsProvider = Provider.of(context); _userProvider = Provider.of(context); _settingProvider = Provider.of(context); - _subtitle = AppLocalization.of(context).subtitle; + return Scaffold( body: SafeArea( child: LoadingManager( @@ -58,7 +58,7 @@ class _NotificationsPageState extends State with TickerProvid Expanded( child: Center( child: Text( - _subtitle.notifications, + context.translation.notifications, style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), ), ), diff --git a/lib/views/pages/user/profile_page.dart b/lib/views/pages/user/profile_page.dart index a5b88dae..456a703c 100644 --- a/lib/views/pages/user/profile_page.dart +++ b/lib/views/pages/user/profile_page.dart @@ -4,6 +4,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/validator/validator.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/user.dart'; @@ -38,7 +39,7 @@ class _ProfilePageState extends State { _settingProvider = Provider.of(context); _width = MediaQuery.of(context).size.width; _height = MediaQuery.of(context).size.height; - Subtitle _subtitle = AppLocalization.of(context).subtitle; + if (_firstTime) { _user = User.fromJson(_userProvider.user.toJson()); _firstTime = false; @@ -78,11 +79,11 @@ class _ProfilePageState extends State { children: [ ATextFormField( initialValue: _user.userName, - hintText: _subtitle.name, + hintText: context.translation.name, enable: false, prefixIconData: Icons.account_circle, style: Theme.of(context).textTheme.headline6, - validator: (value) => Validator.hasValue(value) ? null : _subtitle.nameValidateMessage, + validator: (value) => Validator.hasValue(value) ? null : context.translation.nameValidateMessage, onSaved: (value) { _user.userName = value; }, @@ -92,12 +93,12 @@ class _ProfilePageState extends State { ), ATextFormField( initialValue: _user.email, - hintText: _subtitle.email, + hintText: context.translation.email, enable: false, prefixIconData: Icons.email, textInputType: TextInputType.emailAddress, style: Theme.of(context).textTheme.headline6, - validator: (value) => Validator.isEmail(value) ? null : _subtitle.emailValidateMessage, + validator: (value) => Validator.isEmail(value) ? null : context.translation.emailValidateMessage, onSaved: (value) { _user.email = value; }, @@ -131,10 +132,10 @@ class _ProfilePageState extends State { ), ATextFormField( initialValue: _user.phoneNumber, - hintText: _subtitle.phoneNumber, + hintText: context.translation.phoneNumber, style: Theme.of(context).textTheme.headline6, prefixIconData: Icons.phone_android, - validator: (value) => Validator.isPhoneNumber(value) ? null : _subtitle.phoneNumberValidateMessage, + validator: (value) => Validator.isPhoneNumber(value) ? null : context.translation.phoneNumberValidateMessage, textInputType: TextInputType.phone, onSaved: (value) { _user.phoneNumber = value; @@ -145,12 +146,12 @@ class _ProfilePageState extends State { ), // ATextFormField( // initialValue: _user.whatsApp, - // hintText: _subtitle.whatsApp, + // hintText: context.translation.whatsApp, // style: Theme.of(context).textTheme.headline6, // prefixIconData: FontAwesomeIcons.whatsapp, // prefixIconSize: 36, // validator: (value) => - // Validator.isPhoneNumber(value) ? null : _subtitle.phoneNumberValidateMessage, + // Validator.isPhoneNumber(value) ? null : context.translation.phoneNumberValidateMessage, // textInputType: TextInputType.phone, // onSaved: (value){ // _user.whatsApp = value; @@ -167,13 +168,13 @@ class _ProfilePageState extends State { height: _width / 8, width: _width / 1.2, child: AButton( - text: _subtitle.update, + text: context.translation.update, onPressed: () async { // if (!_formKey.currentState.validate()) return; // _formKey.currentState.save(); // if (_user.departmentId == null) { // ScaffoldMessenger.of(context).showSnackBar(SnackBar( - // content: Text(_subtitle.unitRequired), + // content: Text(context.translation.unitRequired), // )); // return; // } @@ -184,10 +185,10 @@ class _ProfilePageState extends State { // if (status >= 200 && status < 300) { // _settingProvider.setUser(_userProvider.user); // ScaffoldMessenger.of(context).showSnackBar(SnackBar( - // content: Text(_subtitle.requestCompleteSuccessfully), + // content: Text(context.translation.requestCompleteSuccessfully), // )); // } else { - // String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle); + // String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: context.translation); // ScaffoldMessenger.of(context).showSnackBar(SnackBar( // content: Text(errorMessage), // )); diff --git a/lib/views/pages/user/report_issues_page.dart b/lib/views/pages/user/report_issues_page.dart index 0da3b23c..55bbd2bd 100644 --- a/lib/views/pages/user/report_issues_page.dart +++ b/lib/views/pages/user/report_issues_page.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/api/service_requests_provider.dart import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/validator/validator.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/issue.dart'; import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; @@ -39,12 +40,11 @@ class _ReportIssuesPageState extends State { @override Widget build(BuildContext context) { - Subtitle _subtitle = AppLocalization.of(context).subtitle; _serviceRequestsProvider = Provider.of(context); _userProvider = Provider.of(context); _settingProvider = Provider.of(context); _height = MediaQuery.of(context).size.height; - _subtitle.setIssues(_issues); + return Scaffold( body: SafeArea( child: Form( @@ -66,7 +66,7 @@ class _ReportIssuesPageState extends State { vertical: 24 * AppStyle.getScaleFactor(context), ), child: Text( - _subtitle.reportIssue, + context.translation.reportIssue, style: Theme.of(context).textTheme.headline5.copyWith(color: AColors.cyan, fontWeight: FontWeight.bold), ), ), @@ -97,10 +97,10 @@ class _ReportIssuesPageState extends State { children: [ ATextFormField( initialValue: _issue?.title, - hintText: _subtitle.title, + hintText: context.translation.title, textAlign: TextAlign.center, style: Theme.of(context).textTheme.headline6, - validator: (value) => Validator.hasValue(value) ? null : _subtitle.titleValidateMessage, + validator: (value) => Validator.hasValue(value) ? null : context.translation.titleValidateMessage, textInputType: TextInputType.name, onSaved: (value) { _issue.title = value; @@ -127,12 +127,12 @@ class _ReportIssuesPageState extends State { Padding( padding: const EdgeInsets.all(8.0), child: Text( - "${_subtitle.shareAntherIssue} :", + "${context.translation.shareAntherIssue} :", style: Theme.of(context).textTheme.headline6, ), ), ATextFormField( - hintText: _subtitle.description, + hintText: context.translation.description, style: Theme.of(context).textTheme.subtitle1, textInputType: TextInputType.multiline, onSaved: (value) { @@ -142,7 +142,7 @@ class _ReportIssuesPageState extends State { Padding( padding: const EdgeInsets.all(8.0), child: AButton( - text: _subtitle.submit, + text: context.translation.submit, onPressed: () async { if (!_formKey.currentState.validate()) return; _formKey.currentState.save(); @@ -158,7 +158,7 @@ class _ReportIssuesPageState extends State { setState(() {}); if (status >= 200 && status < 300) { Fluttertoast.showToast( - msg: _subtitle.requestCompleteSuccessfully, + msg: context.translation.successfulRequestMessage, ); Navigator.of(context).pop(); } diff --git a/lib/views/pages/user/requests/create_request.dart b/lib/views/pages/user/requests/create_request.dart index c6c05bab..8e572158 100644 --- a/lib/views/pages/user/requests/create_request.dart +++ b/lib/views/pages/user/requests/create_request.dart @@ -11,6 +11,7 @@ import 'package:test_sa/controllers/providers/api/service_requests_provider.dart import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/validator/validator.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/device/device.dart'; @@ -60,7 +61,7 @@ class CreateRequestPageState extends State { bool _isLoading = false; bool _showDatePicker = false; Device _device; - Subtitle _subtitle; + final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); TextEditingController _maintenanceController, _commentController, _reviewCommentController; @@ -124,7 +125,7 @@ class CreateRequestPageState extends State { _height = MediaQuery.of(context).size.height; _userProvider = Provider.of(context); _settingProvider = Provider.of(context); - _subtitle = AppLocalization.of(context).subtitle; + _serviceRequestsProvider = Provider.of(context); return Scaffold( @@ -154,7 +155,7 @@ class CreateRequestPageState extends State { child: Padding( padding: const EdgeInsets.all(8.0), child: Text( - widget.serviceRequest == null ? _subtitle.newServiceRequest : _subtitle.updateServiceRequest, + widget.serviceRequest == null ? context.translation.newServiceRequest : context.translation.updateServiceRequest, style: Theme.of(context).textTheme.headline5.copyWith(color: AColors.cyan, fontWeight: FontWeight.w600), ), ), @@ -167,8 +168,8 @@ class CreateRequestPageState extends State { ? const SizedBox.shrink() : ATextFormField( enable: false, - initialValue: _userProvider.user.clientName ?? _subtitle.noHospitalFound, - hintText: _subtitle.hospital, + initialValue: _userProvider.user.clientName ?? context.translation.noHospitalFound, + hintText: context.translation.hospital, prefixIconData: FontAwesomeIcons.hospital, style: Theme.of(context).textTheme.subtitle1, ), @@ -318,7 +319,7 @@ class CreateRequestPageState extends State { ATextFormField( controller: _reviewCommentController, initialValue: _serviceRequest.reviewComment, - hintText: _subtitle.comment, + hintText: context.translation.comment, style: Theme.of(context).textTheme.titleMedium, textInputType: TextInputType.multiline, onSaved: (value) { @@ -328,7 +329,7 @@ class CreateRequestPageState extends State { ), 12.height, MultiFilesPicker( - label: _subtitle.deviceFiles, + label: context.translation.deviceFiles, files: _deviceImages, enabled: widget.serviceRequest == null ? true : false, ), @@ -341,11 +342,11 @@ class CreateRequestPageState extends State { ATextFormField( controller: _maintenanceController, initialValue: _serviceRequest.callComments, - hintText: _subtitle.maintenanceIssue, + hintText: context.translation.maintenanceIssue, prefixIconData: FontAwesomeIcons.triangleExclamation, style: Theme.of(context).textTheme.titleLarge, textInputType: TextInputType.multiline, - validator: (value) => widget.serviceRequest != null || Validator.hasValue(value) ? null : _subtitle.maintenanceIssueRequired, + validator: (value) => widget.serviceRequest != null || Validator.hasValue(value) ? null : context.translation.maintenanceIssueRequired, onSaved: (value) { _serviceRequest.callComments = value; }, @@ -368,7 +369,7 @@ class CreateRequestPageState extends State { ATextFormField( controller: _commentController, initialValue: _serviceRequest.comments, - hintText: _subtitle.comment, + hintText: context.translation.comment, style: Theme.of(context).textTheme.titleMedium, textInputType: TextInputType.multiline, onSaved: (value) { @@ -380,11 +381,11 @@ class CreateRequestPageState extends State { Padding( padding: const EdgeInsets.all(20.0), child: AButton( - text: widget.serviceRequest == null ? _subtitle.submit : _subtitle.update, + text: widget.serviceRequest == null ? context.translation.submit : context.translation.update, onPressed: () async { if (!_formKey.currentState.validate()) return; if (_device?.id == null) { - Fluttertoast.showToast(msg: _subtitle.pickDevice); + Fluttertoast.showToast(msg: context.translation.pickDevice); return; } if (_serviceRequest.firstAction?.name == "Need a visit" && _dateTime == null) { @@ -429,11 +430,11 @@ class CreateRequestPageState extends State { setState(() {}); if (status >= 200 && status < 300) { Fluttertoast.showToast( - msg: _subtitle.requestCompleteSuccessfully, + msg: context.translation.successfulRequestMessage, ); Navigator.of(context).pop(); } else { - String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle); + String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: context.translation); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text(errorMessage), )); diff --git a/lib/views/pages/user/requests/future_request_service_details.dart b/lib/views/pages/user/requests/future_request_service_details.dart index 6a09ae35..fc98bda9 100644 --- a/lib/views/pages/user/requests/future_request_service_details.dart +++ b/lib/views/pages/user/requests/future_request_service_details.dart @@ -4,6 +4,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/pages/user/requests/request_details.dart'; @@ -26,10 +27,10 @@ class _FutureRequestServiceDetailsState extends State(context); _settingProvider = Provider.of(context); String requestId = ModalRoute.of(context).settings.arguments; - Subtitle _subtitle = AppLocalization.of(context).subtitle; + return Scaffold( body: FutureBuilder( - future: ServiceRequestsProvider().getSingleServiceRequest(requestId: requestId, user: _userProvider.user, host: _settingProvider.host, subtitle: _subtitle), + future: ServiceRequestsProvider().getSingleServiceRequest(requestId: requestId, user: _userProvider.user, host: _settingProvider.host, subtitle: context.translation), builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.hasError) return FailedLoading( diff --git a/lib/views/pages/user/requests/report/create_service_report.dart b/lib/views/pages/user/requests/report/create_service_report.dart index 0e7d35d8..55fef57a 100644 --- a/lib/views/pages/user/requests/report/create_service_report.dart +++ b/lib/views/pages/user/requests/report/create_service_report.dart @@ -11,6 +11,7 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/report/servic import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/validator/validator.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/call_request_for_work_order_model.dart'; import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/part.dart'; @@ -58,8 +59,7 @@ class _CreateServiceReportState extends State with TickerPr ServiceReport _serviceReport; bool _isLoading = false; bool _showCommentField = false; - - Subtitle _subtitle; + final List _files = []; final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); @@ -110,7 +110,7 @@ class _CreateServiceReportState extends State with TickerPr (element) => element.value == _callRequestForWorkOrder?.assetType, orElse: () => null, ); - _subtitle = AppLocalization.of(context).subtitle; + return Scaffold( key: _scaffoldKey, body: SafeArea( @@ -134,7 +134,7 @@ class _CreateServiceReportState extends State with TickerPr child: Padding( padding: const EdgeInsets.all(8.0), child: Text( - _subtitle.newServiceReport, + context.translation.newServiceReport, style: Theme.of(context).textTheme.headline5.copyWith(color: AColors.cyan, fontSize: 28, fontWeight: FontWeight.bold), ), ), @@ -159,21 +159,21 @@ class _CreateServiceReportState extends State with TickerPr spacing: 10, children: [ ASubTitle( - "${_subtitle.callId}: ${widget.request.requestCode}", + "${context.translation.callId}: ${widget.request.requestCode}", font: 14, ), ASubTitle( - "${_subtitle.assetNumber}: ${widget.request.deviceNumber}", + "${context.translation.assetNumber}: ${widget.request.deviceNumber}", font: 14, ), widget.request.deviceSerialNumber == null ? const SizedBox() : ASubTitle( - "${_subtitle.deviceSN}: ${widget.request.deviceSerialNumber}", + "${context.translation.deviceSN}: ${widget.request.deviceSerialNumber}", font: 14, ), Text( - "${_subtitle.customer}: ${widget.request.hospitalName}", + "${context.translation.customer}: ${widget.request.hospitalName}", style: Theme.of(context).textTheme.subtitle1.copyWith( fontWeight: FontWeight.bold, fontSize: 12, @@ -206,10 +206,10 @@ class _CreateServiceReportState extends State with TickerPr child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(_subtitle.deviceSN), + ASubTitle(context.translation.deviceSN), _validate && _serviceReport.device?.id == null ? ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ) : const SizedBox.shrink(), @@ -229,10 +229,10 @@ class _CreateServiceReportState extends State with TickerPr const SizedBox( height: 8, ), - ASubTitle(_subtitle.assetType ?? ""), + ASubTitle(context.translation.assetType ?? ""), _validate && _serviceReport.assetType == null ? ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ) : const SizedBox.shrink(), @@ -276,11 +276,11 @@ class _CreateServiceReportState extends State with TickerPr child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // ASubTitle(_subtitle.reportStatus), + // ASubTitle(context.translation.reportStatus), ASubTitle("Equipment Status"), _validate && _serviceReport.equipmentStatus == null ? ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ) : const SizedBox.shrink(), @@ -317,10 +317,10 @@ class _CreateServiceReportState extends State with TickerPr child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(_subtitle.callLastSituation), + ASubTitle(context.translation.callLastSituation), _validate && _serviceReport.callLastSituation == null ? ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ) : const SizedBox.shrink(), @@ -370,9 +370,9 @@ class _CreateServiceReportState extends State with TickerPr // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ - // ASubTitle(_subtitle.reportType), + // ASubTitle(context.translation.reportType), // _validate && _serviceReport.type == null ? - // ASubTitle(_subtitle.requiredWord,color: Colors.red,): + // ASubTitle(context.translation.requiredWord,color: Colors.red,): // const SizedBox.shrink(), // const SizedBox(height: 4,), // ServiceReportTypeMenu( @@ -393,7 +393,7 @@ class _CreateServiceReportState extends State with TickerPr const ASubTitle("Return to Service"), // _validate && _serviceReport.returnToService == null // ? ASubTitle( - // _subtitle.requiredWord, + // context.translation.requiredWord, // color: Colors.red, // ) // : const SizedBox.shrink(), @@ -420,7 +420,7 @@ class _CreateServiceReportState extends State with TickerPr const SizedBox( height: 8, ), - ASubTitle(_subtitle.workingHours), + ASubTitle(context.translation.workingHours), const SizedBox(height: 8), Row( children: [ @@ -443,10 +443,10 @@ class _CreateServiceReportState extends State with TickerPr child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(_subtitle.deviceSN), + ASubTitle(context.translation.deviceSN), _validate && _serviceReport.device?.id == null ? ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ) : const SizedBox.shrink(), @@ -494,7 +494,7 @@ class _CreateServiceReportState extends State with TickerPr child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(_subtitle.invoiceNumber), + ASubTitle(context.translation.invoiceNumber), const SizedBox( height: 8, ), @@ -502,7 +502,7 @@ class _CreateServiceReportState extends State with TickerPr initialValue: _serviceReport?.invoiceNumber, textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, - validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord, + validator: (value) => Validator.hasValue(value) ? null : context.translation.requiredWord, textInputType: TextInputType.number, onSaved: (value) { _serviceReport.invoiceNumber = value; @@ -518,7 +518,7 @@ class _CreateServiceReportState extends State with TickerPr child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(_subtitle.invoiceCode), + ASubTitle(context.translation.invoiceCode), const SizedBox( height: 4, ), @@ -526,7 +526,7 @@ class _CreateServiceReportState extends State with TickerPr initialValue: _serviceReport?.invoiceCode, textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, - validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord, + validator: (value) => Validator.hasValue(value) ? null : context.translation.requiredWord, textInputType: TextInputType.text, onSaved: (value) { _serviceReport.invoiceCode = value; @@ -538,7 +538,7 @@ class _CreateServiceReportState extends State with TickerPr ], ), const SizedBox(height: 8), - ASubTitle(_subtitle.faultDescription), + ASubTitle(context.translation.faultDescription), const SizedBox( height: 4, ), @@ -560,7 +560,7 @@ class _CreateServiceReportState extends State with TickerPr // textAlign: TextAlign.center, // controller: _faultController, // style: Theme.of(context).textTheme.titleMedium, - // validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord, + // validator: (value) => Validator.hasValue(value) ? null : context.translation.requiredWord, // textInputType: TextInputType.multiline, // onSaved: (value) { // _serviceReport.faultDescriptionId = int.tryParse(value) ?? 0; @@ -593,7 +593,7 @@ class _CreateServiceReportState extends State with TickerPr hintText: _serviceReport.faultDescription?.workPerformed ?? "", controller: _workPreformedController, style: Theme.of(context).textTheme.titleMedium, - validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord, + validator: (value) => Validator.hasValue(value) ? null : context.translation.requiredWord, textInputType: TextInputType.multiline, onSaved: (value) { _serviceReport.workPreformed = value; @@ -614,7 +614,7 @@ class _CreateServiceReportState extends State with TickerPr const ASubTitle("Failure Reason"), _validate && _serviceReport.reason?.id == null ? ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ) : const SizedBox.shrink(), @@ -650,7 +650,7 @@ class _CreateServiceReportState extends State with TickerPr const SizedBox(height: 8), MultiFilesPicker(label: "Attachments", files: _files), const SizedBox(height: 8), - ASubTitle(_subtitle.repairLocation), + ASubTitle(context.translation.repairLocation), const SizedBox(height: 4), ServiceReportRepairLocation( initialValue: _serviceReport.repairLocation, @@ -684,7 +684,7 @@ class _CreateServiceReportState extends State with TickerPr // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ - // ASubTitle(_subtitle.workingHours), + // ASubTitle(context.translation.workingHours), // const SizedBox( // height: 8, // ), @@ -708,7 +708,7 @@ class _CreateServiceReportState extends State with TickerPr // // style: Theme.of(context).textTheme.subtitle1, // // validator: (value) => // // Validator.isNumeric(value) - // // ? null : _subtitle.requiredWord, + // // ? null : context.translation.requiredWord, // // textInputType: TextInputType.number, // // onSaved: (value){ // // _serviceReport.workHours = value; @@ -722,7 +722,7 @@ class _CreateServiceReportState extends State with TickerPr child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(_subtitle.travelingHours), + ASubTitle(context.translation.travelingHours), const SizedBox( height: 4, ), @@ -733,7 +733,7 @@ class _CreateServiceReportState extends State with TickerPr style: Theme.of(context).textTheme.subtitle1, // validator: (value) => // Validator.isNumeric(value) - // ? null : _subtitle.requiredWord, + // ? null : context.translation.requiredWord, textInputType: TextInputType.number, onSaved: (value) { _serviceReport.travelingHours = double.tryParse(value) ?? 0.0; @@ -754,7 +754,7 @@ class _CreateServiceReportState extends State with TickerPr // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ - // ASubTitle(_subtitle.operatingHours), + // ASubTitle(context.translation.operatingHours), // const SizedBox(height: 4,), // ATextFormField( // initialValue: _serviceReport?.operatingHours, @@ -763,7 +763,7 @@ class _CreateServiceReportState extends State with TickerPr // style: Theme.of(context).textTheme.subtitle1, // validator: (value) => // Validator.isNumeric(value) - // ? null : _subtitle.requiredWord, + // ? null : context.translation.requiredWord, // textInputType: TextInputType.number, // onSaved: (value){ // _serviceReport.operatingHours = value; @@ -777,7 +777,7 @@ class _CreateServiceReportState extends State with TickerPr // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ - // ASubTitle(_subtitle.jobSheetNumber), + // ASubTitle(context.translation.jobSheetNumber), // const SizedBox(height: 4,), // ATextFormField( // initialValue: _serviceReport?.jobSheetNumber, @@ -862,10 +862,10 @@ class _CreateServiceReportState extends State with TickerPr child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(_subtitle.partNumberName), + ASubTitle(context.translation.partNumberName), _validate && _serviceReport.parts == null ? ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ) : const SizedBox.shrink(), @@ -888,8 +888,8 @@ class _CreateServiceReportState extends State with TickerPr ), Row( children: [ - Expanded(flex: 3, child: Text(_subtitle.number)), - Expanded(flex: 1, child: Text(_subtitle.quantity)), + Expanded(flex: 3, child: Text(context.translation.number)), + Expanded(flex: 1, child: Text(context.translation.quantity)), ], ), Column( @@ -913,7 +913,7 @@ class _CreateServiceReportState extends State with TickerPr ], ), AButton( - text: _subtitle.submit, + text: context.translation.submit, onPressed: () async { _validate = true; // if (!_formKey.currentState.validate()) { @@ -942,12 +942,12 @@ class _CreateServiceReportState extends State with TickerPr setState(() {}); if (status >= 200 && status < 300) { Fluttertoast.showToast( - msg: _subtitle.requestCompleteSuccessfully, + msg: context.translation.successfulRequestMessage, ); Navigator.of(context).pop(); Navigator.of(context).pop(); } else { - String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle); + String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: context.translation); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text(errorMessage), )); diff --git a/lib/views/pages/user/requests/report/edit_service_report.dart b/lib/views/pages/user/requests/report/edit_service_report.dart index ae74092f..8e6d3475 100644 --- a/lib/views/pages/user/requests/report/edit_service_report.dart +++ b/lib/views/pages/user/requests/report/edit_service_report.dart @@ -12,6 +12,7 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/report/servic import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/controllers/validator/validator.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/call_request_for_work_order_model.dart'; import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/part.dart'; @@ -59,8 +60,7 @@ class _EditServiceReportState extends State with TickerProvid ServiceReport _serviceReport; bool _isLoading = false; bool _showCommentField = false; - - Subtitle _subtitle; + List _images = []; final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); @@ -109,7 +109,7 @@ class _EditServiceReportState extends State with TickerProvid (element) => element.value == _callRequestForWorkOrder?.assetType, orElse: () => null, ); - _subtitle = AppLocalization.of(context).subtitle; + return Scaffold( key: _scaffoldKey, body: SafeArea( @@ -130,7 +130,7 @@ class _EditServiceReportState extends State with TickerProvid child: Padding( padding: const EdgeInsets.all(8.0), child: Text( - _subtitle.editServiceReport, + context.translation.editServiceReport, style: Theme.of(context).textTheme.headline5.copyWith(color: AColors.cyan, fontSize: 28, fontWeight: FontWeight.bold), ), ), @@ -155,21 +155,21 @@ class _EditServiceReportState extends State with TickerProvid spacing: 10, children: [ ASubTitle( - "${_subtitle.callId}: ${widget.request.requestCode}", + "${context.translation.callId}: ${widget.request.requestCode}", font: 14, ), ASubTitle( - "${_subtitle.assetNumber}: ${widget.request.deviceNumber}", + "${context.translation.assetNumber}: ${widget.request.deviceNumber}", font: 14, ), widget.request.deviceSerialNumber == null ? const SizedBox() : ASubTitle( - "${_subtitle.deviceSN}: ${widget.request.deviceSerialNumber}", + "${context.translation.deviceSN}: ${widget.request.deviceSerialNumber}", font: 14, ), Text( - "${_subtitle.customer}: ${widget.request.hospitalName}", + "${context.translation.customer}: ${widget.request.hospitalName}", style: Theme.of(context).textTheme.subtitle1.copyWith( fontWeight: FontWeight.bold, fontSize: 12, @@ -203,10 +203,10 @@ class _EditServiceReportState extends State with TickerProvid // // child: Column( // // crossAxisAlignment: CrossAxisAlignment.start, // // children: [ - // // ASubTitle(_subtitle.reportType), + // // ASubTitle(context.translation.reportType), // // _validate && _serviceReport.type == null // // ? ASubTitle( - // // _subtitle.requiredWord, + // // context.translation.requiredWord, // // color: Colors.red, // // ) // // : const SizedBox.shrink(), @@ -230,10 +230,10 @@ class _EditServiceReportState extends State with TickerProvid // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ - // ASubTitle(_subtitle.visitDate), + // ASubTitle(context.translation.visitDate), // _validate && _serviceReport.visitDate == null // ? ASubTitle( - // _subtitle.requiredWord, + // context.translation.requiredWord, // color: Colors.red, // ) // : const SizedBox.shrink(), @@ -266,10 +266,10 @@ class _EditServiceReportState extends State with TickerProvid child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(_subtitle.deviceSN), + ASubTitle(context.translation.deviceSN), _validate && _serviceReport.device?.id == null ? ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ) : const SizedBox.shrink(), @@ -285,10 +285,10 @@ class _EditServiceReportState extends State with TickerProvid ), ), const SizedBox(height: 8), - ASubTitle(_subtitle.assetType), + ASubTitle(context.translation.assetType), _validate && _serviceReport.assetType == null ? ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ) : const SizedBox.shrink(), @@ -330,11 +330,11 @@ class _EditServiceReportState extends State with TickerProvid child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // ASubTitle(_subtitle.reportStatus), + // ASubTitle(context.translation.reportStatus), ASubTitle("Equipment Status"), _validate && _serviceReport.equipmentStatus == null ? ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ) : const SizedBox.shrink(), @@ -371,10 +371,10 @@ class _EditServiceReportState extends State with TickerProvid child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(_subtitle.callLastSituation), + ASubTitle(context.translation.callLastSituation), _validate && _serviceReport.callLastSituation == null ? ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ) : const SizedBox.shrink(), @@ -473,7 +473,7 @@ class _EditServiceReportState extends State with TickerProvid // ), // _validate && _serviceReport.engineer == null // ? ASubTitle( - // _subtitle.requiredWord, + // context.translation.requiredWord, // color: Colors.red, // ) // : const SizedBox.shrink(), @@ -497,10 +497,10 @@ class _EditServiceReportState extends State with TickerProvid // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ - // ASubTitle(_subtitle.reportStatus), + // ASubTitle(context.translation.reportStatus), // _validate && _serviceReport.equipmentStatus == null // ? ASubTitle( - // _subtitle.requiredWord, + // context.translation.requiredWord, // color: Colors.red, // ) // : const SizedBox.shrink(), @@ -527,10 +527,10 @@ class _EditServiceReportState extends State with TickerProvid // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ - // ASubTitle(_subtitle.callLastSituation), + // ASubTitle(context.translation.callLastSituation), // _validate && _serviceReport.callLastSituation == null // ? ASubTitle( - // _subtitle.requiredWord, + // context.translation.requiredWord, // color: Colors.red, // ) // : const SizedBox.shrink(), @@ -567,7 +567,7 @@ class _EditServiceReportState extends State with TickerProvid child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(_subtitle.invoiceNumber), + ASubTitle(context.translation.invoiceNumber), const SizedBox( height: 8, ), @@ -575,7 +575,7 @@ class _EditServiceReportState extends State with TickerProvid initialValue: _serviceReport?.invoiceNumber, textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, - validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord, + validator: (value) => Validator.hasValue(value) ? null : context.translation.requiredWord, textInputType: TextInputType.number, onSaved: (value) { _serviceReport.invoiceNumber = value; @@ -591,7 +591,7 @@ class _EditServiceReportState extends State with TickerProvid child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(_subtitle.invoiceCode), + ASubTitle(context.translation.invoiceCode), const SizedBox( height: 4, ), @@ -599,7 +599,7 @@ class _EditServiceReportState extends State with TickerProvid initialValue: _serviceReport?.invoiceCode, textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, - validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord, + validator: (value) => Validator.hasValue(value) ? null : context.translation.requiredWord, textInputType: TextInputType.text, onSaved: (value) { _serviceReport.invoiceCode = value; @@ -614,7 +614,7 @@ class _EditServiceReportState extends State with TickerProvid // const SizedBox(height: 8,), // Row( // children: [ - // ASubTitle(_subtitle.faultDescription), + // ASubTitle(context.translation.faultDescription), // Expanded( // child: SizedBox( // height: 32 * AppStyle.getScaleFactor(context), @@ -634,7 +634,7 @@ class _EditServiceReportState extends State with TickerProvid // style: Theme.of(context).textTheme.subtitle1, // validator: (value) => // Validator.hasValue(value) - // ? null : _subtitle.requiredWord, + // ? null : context.translation.requiredWord, // textInputType: TextInputType.multiline, // onSaved: (value){ // _serviceReport.faultDescriptionId = value; @@ -643,7 +643,7 @@ class _EditServiceReportState extends State with TickerProvid // const SizedBox(height: 8,), // Row( // children: [ - // ASubTitle(_subtitle.workPreformed), + // ASubTitle(context.translation.workPreformed), // Expanded( // child: SizedBox( // height: 32 * AppStyle.getScaleFactor(context), @@ -663,7 +663,7 @@ class _EditServiceReportState extends State with TickerProvid // style: Theme.of(context).textTheme.subtitle1, // validator: (value) => // Validator.hasValue(value) - // ? null : _subtitle.requiredWord, + // ? null : context.translation.requiredWord, // textInputType: TextInputType.multiline, // onSaved: (value){ // _serviceReport.workPreformed = value; @@ -671,7 +671,7 @@ class _EditServiceReportState extends State with TickerProvid // ), // const SizedBox(height: 8,), const SizedBox(height: 8), - ASubTitle(_subtitle.workingHours), + ASubTitle(context.translation.workingHours), const SizedBox(height: 8), Row( children: [ @@ -708,7 +708,7 @@ class _EditServiceReportState extends State with TickerProvid height: 8 * AppStyle.getScaleFactor(context), ), const SizedBox(height: 8), - ASubTitle(_subtitle.faultDescription), + ASubTitle(context.translation.faultDescription), const SizedBox( height: 4, ), @@ -732,7 +732,7 @@ class _EditServiceReportState extends State with TickerProvid hintText: _serviceReport.faultDescription?.workPerformed ?? "", controller: _workPreformedController, style: Theme.of(context).textTheme.subtitle1, - validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord, + validator: (value) => Validator.hasValue(value) ? null : context.translation.requiredWord, textInputType: TextInputType.multiline, onSaved: (value) { // _serviceReport.workPreformed = value; @@ -752,7 +752,7 @@ class _EditServiceReportState extends State with TickerProvid const SizedBox( height: 8, ), - ASubTitle(_subtitle.attachImage), + ASubTitle(context.translation.attachImage), const SizedBox( height: 4, ), @@ -772,7 +772,7 @@ class _EditServiceReportState extends State with TickerProvid height: 8, ), const SizedBox(height: 8), - ASubTitle(_subtitle.repairLocation), + ASubTitle(context.translation.repairLocation), const SizedBox(height: 4), ServiceReportRepairLocation( initialValue: _serviceReport.repairLocation, @@ -787,7 +787,7 @@ class _EditServiceReportState extends State with TickerProvid ), ATextFormField( initialValue: _serviceReport?.travelingExpense?.toString(), - hintText: _subtitle.travelingExpense, + hintText: context.translation.travelingExpense, textAlign: TextAlign.center, style: Theme.of(context).textTheme.titleMedium, textInputType: TextInputType.number, @@ -800,7 +800,7 @@ class _EditServiceReportState extends State with TickerProvid ), const SizedBox(height: 8), - ASubTitle(_subtitle.travelingHours), + ASubTitle(context.translation.travelingHours), const SizedBox(height: 4), ATextFormField( initialValue: _serviceReport?.travelingHours?.toString(), @@ -809,7 +809,7 @@ class _EditServiceReportState extends State with TickerProvid style: Theme.of(context).textTheme.subtitle1, // validator: (value) => // Validator.isNumeric(value) - // ? null : _subtitle.requiredWord, + // ? null : context.translation.requiredWord, textInputType: TextInputType.number, onSaved: (value) { _serviceReport.travelingHours = double.tryParse(value) ?? 0.0; @@ -822,7 +822,7 @@ class _EditServiceReportState extends State with TickerProvid // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ - // ASubTitle(_subtitle.workingHours), + // ASubTitle(context.translation.workingHours), // const SizedBox( // height: 8, // ), @@ -846,7 +846,7 @@ class _EditServiceReportState extends State with TickerProvid // // style: Theme.of(context).textTheme.subtitle1, // // validator: (value) => // // Validator.isNumeric(value) - // // ? null : _subtitle.requiredWord, + // // ? null : context.translation.requiredWord, // // textInputType: TextInputType.number, // // onSaved: (value){ // // _serviceReport.workHours = value; @@ -860,7 +860,7 @@ class _EditServiceReportState extends State with TickerProvid // // child: Column( // // crossAxisAlignment: CrossAxisAlignment.start, // // children: [ - // // ASubTitle(_subtitle.travelingHours), + // // ASubTitle(context.translation.travelingHours), // // const SizedBox(height: 4,), // // ATextFormField( // // initialValue: _serviceReport?.travelingHours, @@ -869,7 +869,7 @@ class _EditServiceReportState extends State with TickerProvid // // style: Theme.of(context).textTheme.subtitle1, // // validator: (value) => // // Validator.isNumeric(value) - // // ? null : _subtitle.requiredWord, + // // ? null : context.translation.requiredWord, // // textInputType: TextInputType.number, // // onSaved: (value){ // // _serviceReport.travelingHours = value; @@ -890,7 +890,7 @@ class _EditServiceReportState extends State with TickerProvid // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ - // ASubTitle(_subtitle.operatingHours), + // ASubTitle(context.translation.operatingHours), // const SizedBox(height: 4,), // ATextFormField( // initialValue: _serviceReport?.operatingHours, @@ -899,7 +899,7 @@ class _EditServiceReportState extends State with TickerProvid // style: Theme.of(context).textTheme.subtitle1, // validator: (value) => // Validator.isNumeric(value) - // ? null : _subtitle.requiredWord, + // ? null : context.translation.requiredWord, // textInputType: TextInputType.number, // onSaved: (value){ // _serviceReport.operatingHours = value; @@ -913,7 +913,7 @@ class _EditServiceReportState extends State with TickerProvid // child: Column( // crossAxisAlignment: CrossAxisAlignment.start, // children: [ - // ASubTitle(_subtitle.jobSheetNumber), + // ASubTitle(context.translation.jobSheetNumber), // const SizedBox(height: 4,), // ATextFormField( // initialValue: _serviceReport?.jobSheetNumber, @@ -1002,10 +1002,10 @@ class _EditServiceReportState extends State with TickerProvid child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(_subtitle.partNumberName), + ASubTitle(context.translation.partNumberName), _validate && _serviceReport.parts == null ? ASubTitle( - _subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ) : const SizedBox.shrink(), @@ -1029,8 +1029,8 @@ class _EditServiceReportState extends State with TickerProvid ), Row( children: [ - Expanded(flex: 3, child: Text(_subtitle.number)), - Expanded(flex: 1, child: Text(_subtitle.quantity)), + Expanded(flex: 3, child: Text(context.translation.number)), + Expanded(flex: 1, child: Text(context.translation.quantity)), ], ), Column( @@ -1052,7 +1052,7 @@ class _EditServiceReportState extends State with TickerProvid ), ), AButton( - text: _subtitle.update, + text: context.translation.update, onPressed: () async { if (_serviceReport?.workingHours == null) { await Fluttertoast.showToast(msg: "Working Hours Timer Isn't Started"); @@ -1079,12 +1079,12 @@ class _EditServiceReportState extends State with TickerProvid setState(() {}); if (status >= 200 && status < 300) { Fluttertoast.showToast( - msg: _subtitle.requestCompleteSuccessfully, + msg: context.translation.successfulRequestMessage, ); Navigator.of(context).pop(); Navigator.of(context).pop(); } else { - String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle); + String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: context.translation); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text(errorMessage), )); diff --git a/lib/views/pages/user/requests/report/future_service_report.dart b/lib/views/pages/user/requests/report/future_service_report.dart index a54e3566..c290d9bd 100644 --- a/lib/views/pages/user/requests/report/future_service_report.dart +++ b/lib/views/pages/user/requests/report/future_service_report.dart @@ -4,6 +4,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_request/search_work_order.dart'; import 'package:test_sa/models/service_request/service_request.dart'; @@ -31,11 +32,11 @@ class _FutureServiceReportState extends State { Widget build(BuildContext context) { _userProvider = Provider.of(context); _settingProvider = Provider.of(context); - Subtitle subtitle = AppLocalization.of(context).subtitle; - ServiceRequestsProvider().getSingleServiceReport(reportId: widget.workOrder.id, user: _userProvider.user, host: _settingProvider.host, subtitle: subtitle); + + ServiceRequestsProvider().getSingleServiceReport(reportId: widget.workOrder.id, user: _userProvider.user, host: _settingProvider.host, subtitle: context.translation); return Scaffold( body: FutureBuilder( - future: ServiceRequestsProvider().getSingleServiceReport(reportId: widget.workOrder.id, user: _userProvider.user, host: _settingProvider.host, subtitle: subtitle), + future: ServiceRequestsProvider().getSingleServiceReport(reportId: widget.workOrder.id, user: _userProvider.user, host: _settingProvider.host, subtitle: context.translation), builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.hasError) { return FailedLoading( diff --git a/lib/views/pages/user/requests/request_details.dart b/lib/views/pages/user/requests/request_details.dart index 457c9d9c..922dddfb 100644 --- a/lib/views/pages/user/requests/request_details.dart +++ b/lib/views/pages/user/requests/request_details.dart @@ -43,7 +43,6 @@ class RequestDetailsPage extends StatelessWidget { @override Widget build(BuildContext context) { - Subtitle _subtitle = AppLocalization.of(context).subtitle; UserProvider _userProvider = Provider.of(context); SettingProvider _settingProvider = Provider.of(context); List workOrders = []; @@ -85,7 +84,7 @@ class RequestDetailsPage extends StatelessWidget { 8.height, Text(serviceRequest.deviceEnName, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), Text( - '${_subtitle.assetNumber}: ${serviceRequest.device.number}', + '${context.translation.assetNumber}: ${serviceRequest.device.number}', style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), ), Text( @@ -155,7 +154,7 @@ class RequestDetailsPage extends StatelessWidget { return DefaultTabController( length: 2, child: Scaffold( - appBar: const DefaultAppBar(title: TranslationKeys.serviceRequest), + appBar: DefaultAppBar(title: context.translation.serviceRequest), backgroundColor: const Color(0xfff8f9fb), body: SafeArea( child: FutureBuilder( @@ -176,7 +175,7 @@ class RequestDetailsPage extends StatelessWidget { Expanded( child: Center( child: Text( - _subtitle.details, + context.translation.details, style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), ), ), @@ -229,7 +228,7 @@ class RequestDetailsPage extends StatelessWidget { // barrierDismissible: false, // builder: (BuildContext context) { // return CupertinoAlertDialog( - // title: Text(_subtitle.updatingDots), + // title: Text(context.translation.updatingDots), // content: Center(child: CircularProgressIndicator()), // ); // }, @@ -242,7 +241,7 @@ class RequestDetailsPage extends StatelessWidget { // ); // Navigator.of(context).pop(); // Fluttertoast.showToast( - // msg: HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle), + // msg: HttpStatusManger.getStatusMessage(status: status, subtitle: context.translation), // ); }, ), @@ -262,10 +261,10 @@ class RequestDetailsPage extends StatelessWidget { ).paddingOnly(top: 4, bottom: 4), TabBar(labelColor: AColors.primaryColor, tabs: [ Tab( - text: _subtitle.general, + text: context.translation.general, ), Tab( - text: _subtitle.serviceRequestInformation, + text: context.translation.serviceRequestInformation, ), ]), SizedBox( @@ -281,7 +280,7 @@ class RequestDetailsPage extends StatelessWidget { children: [ informationCard(), RequestInfoRow( - title: _subtitle.callId, + title: context.translation.callId, info: serviceRequest.requestCode, ), RequestInfoRow( @@ -289,36 +288,36 @@ class RequestDetailsPage extends StatelessWidget { info: serviceRequest.deviceNumber, ), RequestInfoRow( - title: _subtitle.assetName, + title: context.translation.assetName, info: serviceRequest.deviceEnName, ), RequestInfoRow( - title: _subtitle.deviceModel, + title: context.translation.deviceModel, info: serviceRequest.deviceModel, ), RequestInfoRow( - title: _subtitle.engineerName, + title: context.translation.engineerName, info: serviceRequest.engineerName, ), RequestInfoRow( - title: _subtitle.engineerPhone, + title: context.translation.engineerPhone, info: serviceRequest.engineerMobile, ), RequestInfoRow( - title: _subtitle.date, + title: context.translation.date, info: serviceRequest.date, ), serviceRequest.nextVisitDate == null ? SizedBox.shrink() : RequestInfoRow( - title: _subtitle.nextVisitDate, + title: context.translation.next, info: DateFormat('EE dd/MM/yyyy').format(serviceRequest.nextVisitDate), ), Row( children: [ Expanded( child: Text( - "${_subtitle.status} : ", + "${context.translation.status} : ", style: Theme.of(context).textTheme.subtitle1, textScaleFactor: AppStyle.getScaleFactor(context), ), @@ -330,23 +329,23 @@ class RequestDetailsPage extends StatelessWidget { color: Theme.of(context).primaryColor, ), RequestInfoRow( - title: _subtitle.hospital, + title: context.translation.hospital, info: serviceRequest.hospitalName, ), RequestInfoRow( - title: _subtitle.unite, + title: context.translation.unite, info: serviceRequest.departmentName, ), // RequestInfoRow( - // title: _subtitle.deviceArName, + // title: context.translation.deviceArName, // content: serviceRequest.deviceArName, // ), // RequestInfoRow( - // title: _subtitle.deviceName, + // title: context.translation.deviceName, // content: serviceRequest.deviceEnName, // ), RequestInfoRow( - title: _subtitle.maintenanceIssue, + title: context.translation.maintenanceIssue, content: serviceRequest.callComments, ), if (serviceRequest.audio?.isNotEmpty == true) @@ -358,13 +357,13 @@ class RequestDetailsPage extends StatelessWidget { // child: Padding( // padding: EdgeInsets.all(32), // child: AButton( - // text: _subtitle.duplicateRequest, + // text: context.translation.duplicateRequest, // onPressed: () async { // bool result = await showDialog( // context: context, // builder: (_) => AAlertDialog( - // title: _subtitle.duplicateAlert, - // content: _subtitle.duplicateAlertMessage, + // title: context.translation.duplicateAlert, + // content: context.translation.duplicateAlertMessage, // ) // ); // if(result == true){ @@ -383,7 +382,7 @@ class RequestDetailsPage extends StatelessWidget { // ScaffoldMessenger.of(context).showSnackBar( // SnackBar( // content: Text( - // HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle) + // HttpStatusManger.getStatusMessage(status: status, subtitle: context.translation) // ) // ) // ); @@ -394,7 +393,7 @@ class RequestDetailsPage extends StatelessWidget { // ) ], ).expanded, - AppFilledButton(label: TranslationKeys.login, maxWidth: true, onPressed: () {}).paddingOnly(left: 16, right: 16, bottom: 24), + AppFilledButton(label: context.translation.login, maxWidth: true, onPressed: () {}).paddingOnly(left: 16, right: 16, bottom: 24), ], ), // workOrders.isEmpty ? @@ -432,36 +431,36 @@ class RequestDetailsPage extends StatelessWidget { child: Column( children: [ RequestInfoRow( - title: _subtitle.callId, + title: context.translation.callId, content: serviceRequest.requestCode, ), RequestInfoRow( - title: _subtitle.orderWorkNumber, + title: context.translation.orderWorkNumber, info: workOrders[index].workOrderNo.toString(), ), RequestInfoRow( - title: _subtitle.visitDate, + title: context.translation.visitDate, info: workOrders[index].visitDate, ), - RequestInfoRow(title: _subtitle.assignedEmployee, info: workOrders[index].assignedEmployee?.name ?? ""), + RequestInfoRow(title: context.translation.assignedEmployee, info: workOrders[index].assignedEmployee?.name ?? ""), RequestInfoRow( - title: _subtitle.assetSN, + title: context.translation.assetSN, info: workOrders[index].callRequest.asset.assetSerialNo, ), RequestInfoRow( - title: _subtitle.assetName, + title: context.translation.assetName, info: workOrders[index].callRequest.asset.modelDefinition.assetName, ), RequestInfoRow( - title: _subtitle.assetNumber, + title: context.translation.assetNumber, info: workOrders[index].callRequest.asset.assetNumber, ), RequestInfoRow( - title: _subtitle.model, + title: context.translation.model, info: workOrders[index].callRequest.asset.modelDefinition.modelName, ), RequestInfoRow( - title: _subtitle.site, + title: context.translation.site, info: workOrders[index].callRequest.asset.site.custName, ), RequestInfoRow( @@ -472,7 +471,7 @@ class RequestDetailsPage extends StatelessWidget { ? Padding( padding: EdgeInsets.all(32), child: AButton( - text: _subtitle.editServiceReport, + text: context.translation.editServiceReport, onPressed: serviceRequest.statusValue == 5 || serviceRequest.statusValue == 3 ? null : () { @@ -514,7 +513,7 @@ class RequestDetailsPage extends StatelessWidget { children: [ Expanded( child: Center( - child: ASubTitle(_subtitle.dataNotFound), + child: ASubTitle(context.translation.dataNotFound), ), ), if (_userProvider.user.type == UsersTypes.engineer) diff --git a/lib/views/pages/user/requests/requests_page.dart b/lib/views/pages/user/requests/requests_page.dart index 98a205d3..2c110230 100644 --- a/lib/views/pages/user/requests/requests_page.dart +++ b/lib/views/pages/user/requests/requests_page.dart @@ -4,6 +4,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/enums/translation_keys.dart'; import 'package:test_sa/models/service_request/service_request_search.dart'; import 'package:test_sa/models/subtitle.dart'; @@ -14,6 +15,7 @@ import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/requests/service_request_list.dart'; import 'package:test_sa/views/widgets/search/service_request_search_bar.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; class ServiceRequestsPage extends StatefulWidget { static final String id = "/service-requests"; @@ -34,14 +36,13 @@ class _ServiceRequestsPageState extends State with TickerPr _serviceRequestsProvider = Provider.of(context); _userProvider = Provider.of(context); _settingProvider = Provider.of(context); - Subtitle _subtitle = AppLocalization.of(context).subtitle; if (_firstTime) { _serviceRequestsProvider.reset(); _firstTime = false; } return Scaffold( - appBar: const DefaultAppBar(title: TranslationKeys.serviceRequest), + appBar: DefaultAppBar(title: context.translation.serviceRequest), backgroundColor: const Color(0xfff8f9fb), body: SafeArea( child: LoadingManager( diff --git a/lib/views/pages/user/visits/pantry/edit_pentry.dart b/lib/views/pages/user/visits/pantry/edit_pentry.dart index a27b8308..1ccf44c2 100644 --- a/lib/views/pages/user/visits/pantry/edit_pentry.dart +++ b/lib/views/pages/user/visits/pantry/edit_pentry.dart @@ -5,6 +5,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/regular_visits_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/pantry/calibration_tools.dart'; import 'package:test_sa/models/pantry/pentry.dart'; import 'package:test_sa/models/pantry/pm_kit.dart'; @@ -32,7 +33,6 @@ class EditPentry extends StatefulWidget { class _EditPentryState extends State with SingleTickerProviderStateMixin { bool _isLoading = false; bool _validate = false; - Subtitle _subtitle; UserProvider _userProvider; SettingProvider _settingProvider; RegularVisitsProvider _regularVisitsProvider; @@ -56,13 +56,13 @@ class _EditPentryState extends State with SingleTickerProviderStateM setState(() {}); if (status >= 200 && status < 300) { Fluttertoast.showToast( - msg: _subtitle.requestCompleteSuccessfully, + msg: context.translation.successfulRequestMessage, ); Navigator.of(context).pop(); Navigator.of(context).pop(); } else { // String errorMessage = HttpStatusManger.getStatusMessage( - // status: status, subtitle: _subtitle); + // status: status, subtitle: context.translation); // Fluttertoast.showToast( // msg: errorMessage, // ); @@ -87,7 +87,6 @@ class _EditPentryState extends State with SingleTickerProviderStateM @override Widget build(BuildContext context) { - _subtitle = AppLocalization.of(context).subtitle; _userProvider = Provider.of(context); _settingProvider = Provider.of(context); _regularVisitsProvider = Provider.of(context); @@ -162,7 +161,7 @@ class _EditPentryState extends State with SingleTickerProviderStateM children: [ if (_tabController.index != 0) ASmallButton( - text: _subtitle.back, + text: context.translation.back, onPressed: () { _tabController.animateTo( _tabController.index - 1, @@ -173,7 +172,7 @@ class _EditPentryState extends State with SingleTickerProviderStateM const Spacer(), if (_tabController.index != _tabController.length - 1) ASmallButton( - text: _subtitle.next, + text: context.translation.next, onPressed: () { _tabController.animateTo( _tabController.index + 1, @@ -183,7 +182,7 @@ class _EditPentryState extends State with SingleTickerProviderStateM ), if (_tabController.index == _tabController.length - 1) ASmallButton( - text: _subtitle.update, + text: context.translation.update, onPressed: _onSubmit, ), ], diff --git a/lib/views/pages/user/visits/pantry/future_edit_pently.dart b/lib/views/pages/user/visits/pantry/future_edit_pently.dart index 1f050f58..dca08d02 100644 --- a/lib/views/pages/user/visits/pantry/future_edit_pently.dart +++ b/lib/views/pages/user/visits/pantry/future_edit_pently.dart @@ -4,6 +4,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/regular_visits_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/pantry/pentry.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; @@ -28,14 +29,14 @@ class _FutureEditPentryState extends State { _userProvider = Provider.of(context); _settingProvider = Provider.of(context); //String requestId = ModalRoute.of(context).settings.arguments; - Subtitle subtitle = AppLocalization.of(context).subtitle; + return Scaffold( body: FutureBuilder( future: RegularVisitsProvider().getPently(user: _userProvider.user, host: _settingProvider.host, id: widget.visit.id), builder: (BuildContext context, AsyncSnapshot snapshot) { if (snapshot.hasError) { return FailedLoading( - message: subtitle.failedToCompleteRequest, + message: context.translation.failedToCompleteRequest, onReload: () { setState(() {}); }, diff --git a/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart b/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart index c841bbf3..b45c3de8 100644 --- a/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart +++ b/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart @@ -7,6 +7,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/preventive_maintenance_visits_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/models/visits/visits_search.dart'; @@ -30,14 +31,13 @@ class _PreventiveMaintenanceVisitsPageState extends State(context); _userProvider = Provider.of(context); _settingProvider = Provider.of(context); - _subtitle = AppLocalization.of(context).subtitle; + return Scaffold( body: SafeArea( child: LoadingManager( @@ -68,7 +68,7 @@ class _PreventiveMaintenanceVisitsPageState extends State= 200 && status < 300) { Fluttertoast.showToast( - msg: _subtitle.preventiveMaintenanceUpdatedSuccessfully, + msg: context.translation.preventiveMaintenanceUpdatedSuccessfully, toastLength: Toast.LENGTH_LONG, gravity: ToastGravity.BOTTOM, ); } else { Fluttertoast.showToast( - msg: HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle), + msg: HttpStatusManger.getStatusMessage(status: status, subtitle: context.translation), toastLength: Toast.LENGTH_LONG, gravity: ToastGravity.BOTTOM, ); diff --git a/lib/views/pages/user/visits/regular_visits_page.dart b/lib/views/pages/user/visits/regular_visits_page.dart index c2ded666..628dd099 100644 --- a/lib/views/pages/user/visits/regular_visits_page.dart +++ b/lib/views/pages/user/visits/regular_visits_page.dart @@ -7,6 +7,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/regular_visits_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/models/visits/visits_search.dart'; @@ -31,14 +32,13 @@ class _RegularVisitsPageState extends State with TickerProvid UserProvider _userProvider; SettingProvider _settingProvider; bool _expandedSearch = false; - Subtitle _subtitle; @override Widget build(BuildContext context) { _visitsProvider = Provider.of(context); _settingProvider = Provider.of(context); _userProvider = Provider.of(context); - _subtitle = AppLocalization.of(context).subtitle; + return Scaffold( body: SafeArea( child: LoadingManager( @@ -68,7 +68,7 @@ class _RegularVisitsPageState extends State with TickerProvid Expanded( child: Center( child: Text( - _subtitle.preventiveMaintenance, + context.translation.preventiveMaintenance, style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), ), ), @@ -111,7 +111,7 @@ class _RegularVisitsPageState extends State with TickerProvid child: Padding( padding: const EdgeInsets.all(8.0), child: AButton( - text: _subtitle.clearSearch, + text: context.translation.clearSearch, onPressed: () { _visitsProvider.visitsSearch = VisitsSearch(); _visitsProvider.reset(); @@ -136,7 +136,7 @@ class _RegularVisitsPageState extends State with TickerProvid builder: (context) { return UpdateVisitsGroupSheet( visits: visits, - title: _subtitle.updateRegularVisits, + title: context.translation.updateRegularVisits, ); }, ) as VisitsGroup; @@ -146,7 +146,7 @@ class _RegularVisitsPageState extends State with TickerProvid barrierDismissible: false, builder: (BuildContext context) { return CupertinoAlertDialog( - title: Text(_subtitle.updatingDots), + title: Text(context.translation.updatingDots), content: Center(child: CircularProgressIndicator()), ); }, @@ -155,13 +155,13 @@ class _RegularVisitsPageState extends State with TickerProvid Navigator.of(context).pop(); if (status >= 200 && status < 300) { Fluttertoast.showToast( - msg: _subtitle.preventiveMaintenanceUpdatedSuccessfully, + msg: context.translation.preventiveMaintenanceUpdatedSuccessfully, toastLength: Toast.LENGTH_LONG, gravity: ToastGravity.BOTTOM, ); } else { Fluttertoast.showToast( - msg: HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle), + msg: HttpStatusManger.getStatusMessage(status: status, subtitle: context.translation), toastLength: Toast.LENGTH_LONG, gravity: ToastGravity.BOTTOM, ); diff --git a/lib/views/pages/user/visits/update_visits_group_sheet.dart b/lib/views/pages/user/visits/update_visits_group_sheet.dart index 35e3e81a..359859d7 100644 --- a/lib/views/pages/user/visits/update_visits_group_sheet.dart +++ b/lib/views/pages/user/visits/update_visits_group_sheet.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visits_group.dart'; @@ -34,7 +35,7 @@ class _UpdateVisitsGroupSheetState extends State { VisitsGroup _group = VisitsGroup(); // File _image; - Subtitle _subtitle; + @override void initState() { @@ -45,7 +46,7 @@ class _UpdateVisitsGroupSheetState extends State { @override Widget build(BuildContext context) { - _subtitle = AppLocalization.of(context).subtitle; + return Container( height: MediaQuery.of(context).size.height / 1.3, padding: EdgeInsets.symmetric( @@ -61,13 +62,13 @@ class _UpdateVisitsGroupSheetState extends State { children: [ Expanded( child: Text( - widget.title ?? _subtitle.updateVisitsGroup, + widget.title ?? context.translation.updateVisitsGroup, style: Theme.of(context).textTheme.subtitle1, textScaleFactor: AppStyle.getScaleFactor(context), ), ), ASmallButton( - text: _subtitle.cancel, + text: context.translation.cancel, onPressed: () { Navigator.of(context).pop(); }, @@ -218,7 +219,7 @@ class _UpdateVisitsGroupSheetState extends State { children: [ Expanded( child: Text( - "${_subtitle.sn}: " + visit.deviceSerialNumber ?? _subtitle.noSerialNumberFound, + "${context.translation.sn}: " + visit.deviceSerialNumber ?? context.translation.noSerialNumberFound, style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontSize: 16, fontWeight: FontWeight.bold), ), ), @@ -232,7 +233,7 @@ class _UpdateVisitsGroupSheetState extends State { ), ), AButton( - text: _subtitle.update, + text: context.translation.update, onPressed: () { Navigator.of(context).pop(_group); }, diff --git a/lib/views/pages/user/visits/visit_details.dart b/lib/views/pages/user/visits/visit_details.dart index e75e826d..6b9499da 100644 --- a/lib/views/pages/user/visits/visit_details.dart +++ b/lib/views/pages/user/visits/visit_details.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; -import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; @@ -26,7 +26,6 @@ class VisitDetailsPage extends StatelessWidget { @override Widget build(BuildContext context) { - Subtitle subtitle = AppLocalization.of(context).subtitle; UserProvider userProvider = Provider.of(context); return Scaffold( @@ -42,7 +41,7 @@ class VisitDetailsPage extends StatelessWidget { Expanded( child: Center( child: Text( - subtitle.visitInformation, + context.translation.visitInformation, style: Theme.of(context).textTheme.titleLarge.copyWith(color: AColors.white, fontStyle: FontStyle.italic), ), ), @@ -118,7 +117,7 @@ class VisitDetailsPage extends StatelessWidget { height: 8, ), RequestInfoRow( - title: subtitle.code, + title: context.translation.code, info: visit.serialNumber, ), RequestInfoRow( @@ -126,26 +125,26 @@ class VisitDetailsPage extends StatelessWidget { info: visit.deviceNumber, ), RequestInfoRow( - title: subtitle.deviceName, + title: context.translation.deviceName, content: visit.deviceEnglishName, ), RequestInfoRow( - title: subtitle.deviceSN, + title: context.translation.deviceSN, info: visit.deviceSerialNumber, ), RequestInfoRow( - title: subtitle.expectDate, + title: context.translation.expectDate, info: visit.expectDate, ), RequestInfoRow( - title: subtitle.actualDate, + title: context.translation.actualDate, info: visit.actualDate, ), Row( children: [ Expanded( child: Text( - "${subtitle.status} : ", + "${context.translation.status} : ", style: Theme.of(context).textTheme.titleMedium.copyWith(fontWeight: FontWeight.bold), textScaleFactor: AppStyle.getScaleFactor(context), ), @@ -159,15 +158,15 @@ class VisitDetailsPage extends StatelessWidget { color: Theme.of(context).primaryColor, ), RequestInfoRow( - title: subtitle.contactStatus, + title: context.translation.contactStatus, info: visit.assignTo, ), RequestInfoRow( - title: subtitle.engineerName, + title: context.translation.engineerName, info: visit.employName, ), RequestInfoRow( - title: subtitle.hospital, + title: context.translation.hospital, content: visit.hospitalName, ), ], diff --git a/lib/views/widgets/date_and_time/from_to_date_bar.dart b/lib/views/widgets/date_and_time/from_to_date_bar.dart index fb222b68..e846699c 100644 --- a/lib/views/widgets/date_and_time/from_to_date_bar.dart +++ b/lib/views/widgets/date_and_time/from_to_date_bar.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/sizing.dart'; @@ -30,7 +31,7 @@ class _FromToDateBarState extends State { @override Widget build(BuildContext context) { - Subtitle _subtitle = AppLocalization.of(context).subtitle; + return Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ @@ -38,7 +39,7 @@ class _FromToDateBarState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - _subtitle.from, + context.translation.from, style: Theme.of(context).textTheme.bodyText1.copyWith(fontSize: 12, fontWeight: FontWeight.normal), textScaleFactor: AppStyle.getScaleFactor(context), ), @@ -57,7 +58,7 @@ class _FromToDateBarState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - _subtitle.to, + context.translation.to, style: Theme.of(context).textTheme.bodyText1.copyWith(fontSize: 12, fontWeight: FontWeight.normal), textScaleFactor: AppStyle.getScaleFactor(context), ), diff --git a/lib/views/widgets/departments/department_button.dart b/lib/views/widgets/departments/department_button.dart index 5aa8b0e4..6ab0106d 100644 --- a/lib/views/widgets/departments/department_button.dart +++ b/lib/views/widgets/departments/department_button.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; @@ -14,7 +15,7 @@ class DepartmentButton extends StatelessWidget { @override Widget build(BuildContext context) { - Subtitle _subtitle = AppLocalization.of(context).subtitle; + return ElevatedButton( style: ElevatedButton.styleFrom( elevation: 0, @@ -31,7 +32,7 @@ class DepartmentButton extends StatelessWidget { child: Padding( padding: const EdgeInsets.symmetric(horizontal: 8), child: Text( - department?.name ?? _subtitle.pickUnite, + department?.name ?? context.translation.pickUnite, style: Theme.of(context).textTheme.bodyText1, textScaleFactor: AppStyle.getScaleFactor(context), textDirection: TextDirection.rtl, diff --git a/lib/views/widgets/departments/single_department_picker.dart b/lib/views/widgets/departments/single_department_picker.dart index c1d56fdd..a9c3500e 100644 --- a/lib/views/widgets/departments/single_department_picker.dart +++ b/lib/views/widgets/departments/single_department_picker.dart @@ -3,6 +3,7 @@ import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/departments_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/widgets/departments/department_item.dart'; @@ -28,7 +29,6 @@ class _SingleDepartmentPickerState extends State { Widget build(BuildContext context) { _departmentsProvider = Provider.of(context); _settingProvider = Provider.of(context); - Subtitle _subtitle = AppLocalization.of(context).subtitle; if (_firstTime && _departmentsProvider.departments != null) { _searchableList.addAll(_departmentsProvider.departments); _firstTime = false; @@ -54,7 +54,7 @@ class _SingleDepartmentPickerState extends State { Padding( padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), child: ATextFormField( - hintText: _subtitle.searchByName, + hintText: context.translation.searchByName, style: Theme.of(context).textTheme.headline6, suffixIcon: Icon(Icons.search_rounded), onChange: (value) { @@ -67,7 +67,7 @@ class _SingleDepartmentPickerState extends State { Expanded( child: _searchableList.isEmpty ? NoItemFound( - message: _subtitle.noUniteFound, + message: context.translation.noUniteFound, ) : ListView.builder( padding: EdgeInsets.zero, diff --git a/lib/views/widgets/device_trancfer/device_transfer_info_section.dart b/lib/views/widgets/device_trancfer/device_transfer_info_section.dart index a57d0ee6..9e1539f6 100644 --- a/lib/views/widgets/device_trancfer/device_transfer_info_section.dart +++ b/lib/views/widgets/device_trancfer/device_transfer_info_section.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/widgets/loaders/image_loader.dart'; @@ -19,16 +20,15 @@ class DeviceTransferInfoSection extends StatelessWidget { @override Widget build(BuildContext context) { info.userName = Provider.of(context).user.username; - final subtitle = AppLocalization.of(context).subtitle; info.attachments ??= []; return Column( children: [ RequestInfoRow( - title: subtitle.hospital, + title: context.translation.hospital, info: info.client.name, ), RequestInfoRow( - title: subtitle.department, + title: context.translation.department, info: info.department.name, ), // RequestInfoRow( @@ -36,11 +36,11 @@ class DeviceTransferInfoSection extends StatelessWidget { // info: info.userName, // ), RequestInfoRow( - title: subtitle.workingHours, + title: context.translation.workingHours, info: info.workingHours, ), RequestInfoRow( - title: subtitle.travelingHours, + title: context.translation.travelingHours, info: info.travelingHours, ), RequestInfoRow( @@ -53,7 +53,7 @@ class DeviceTransferInfoSection extends StatelessWidget { ), RequestInfoRow( title: "Signature", - info: info.engSignature?.isEmpty != false ? subtitle.noDateFound : null, + info: info.engSignature?.isEmpty != false ? context.translation.noDateFound : null, contentWidget: info.engSignature?.isEmpty != false ? null : ImageLoader(url: info.engSignature), ), Padding( @@ -65,7 +65,7 @@ class DeviceTransferInfoSection extends StatelessWidget { ), ), RequestInfoRow( - title: subtitle.status, + title: context.translation.status, infoWidget: StatusLabel(label: info.status?.name, backgroundColor: AColors.getGasStatusColor(info.status?.id)), ), ], diff --git a/lib/views/widgets/device_trancfer/device_transfer_item.dart b/lib/views/widgets/device_trancfer/device_transfer_item.dart index 8061f679..6614aeaa 100644 --- a/lib/views/widgets/device_trancfer/device_transfer_item.dart +++ b/lib/views/widgets/device_trancfer/device_transfer_item.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/user.dart'; @@ -18,7 +19,6 @@ class DeviceTransferItem extends StatelessWidget { @override Widget build(BuildContext context) { - Subtitle _subtitle = AppLocalization.of(context).subtitle; User _user = Provider.of(context, listen: false).user; Color itemColor = index % 2 == 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; @@ -71,7 +71,7 @@ class DeviceTransferItem extends StatelessWidget { children: [ Expanded( child: Text( - _subtitle.from, + context.translation.from, style: Theme.of(context).textTheme.subtitle2.copyWith( color: onItemColor, ), @@ -110,7 +110,7 @@ class DeviceTransferItem extends StatelessWidget { children: [ Expanded( child: Text( - _subtitle.to, + context.translation.to, style: Theme.of(context).textTheme.subtitle2.copyWith( color: onItemColor, ), diff --git a/lib/views/widgets/device_trancfer/device_transfer_list.dart b/lib/views/widgets/device_trancfer/device_transfer_list.dart index a90c74aa..5dc983b7 100644 --- a/lib/views/widgets/device_trancfer/device_transfer_list.dart +++ b/lib/views/widgets/device_trancfer/device_transfer_list.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart'; @@ -17,9 +18,8 @@ class DeviceTransferList extends StatelessWidget { @override Widget build(BuildContext context) { if (items.isEmpty) { - Subtitle subtitle = AppLocalization.of(context).subtitle; return NoItemFound( - message: subtitle.noServiceRequestFound, + message: context.translation.noServiceRequestFound, ); } return LazyLoading( diff --git a/lib/views/widgets/dialogs/dialog.dart b/lib/views/widgets/dialogs/dialog.dart index 38c8e4c6..065fd5af 100644 --- a/lib/views/widgets/dialogs/dialog.dart +++ b/lib/views/widgets/dialogs/dialog.dart @@ -9,7 +9,7 @@ class AAlertDialog extends StatelessWidget { @override Widget build(BuildContext context) { - // Subtitle _subtitle = AppLocalization.of(context).subtitle; + // return CupertinoAlertDialog( title: title != null ? Text(title) : null, content: content != null ? Text(content) : null, diff --git a/lib/views/widgets/equipment/auto_complete_devices_field.dart b/lib/views/widgets/equipment/auto_complete_devices_field.dart index 0d45aa6e..db0ee66f 100644 --- a/lib/views/widgets/equipment/auto_complete_devices_field.dart +++ b/lib/views/widgets/equipment/auto_complete_devices_field.dart @@ -43,7 +43,7 @@ class _AutoCompleteDeviceFieldState extends State { _settingProvider = Provider.of(context); _userProvider = Provider.of(context); _devicesProvider = Provider.of(context); - //Subtitle _subtitle = AppLocalization.of(context).subtitle; + // return LoadingManager( isLoading: _devicesProvider.isLoading, isFailedLoading: _devicesProvider.devices == null, diff --git a/lib/views/widgets/equipment/auto_complete_models_field.dart b/lib/views/widgets/equipment/auto_complete_models_field.dart index 7b2c7555..a211a04c 100644 --- a/lib/views/widgets/equipment/auto_complete_models_field.dart +++ b/lib/views/widgets/equipment/auto_complete_models_field.dart @@ -45,7 +45,7 @@ class _AutoCompleteModelFieldState extends State { _settingProvider = Provider.of(context); _userProvider = Provider.of(context); _devicesProvider = Provider.of(context); - //Subtitle _subtitle = AppLocalization.of(context).subtitle; + // return Container( padding: const EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( diff --git a/lib/views/widgets/equipment/device_button.dart b/lib/views/widgets/equipment/device_button.dart index 8a8b78c0..3a0e9fe4 100644 --- a/lib/views/widgets/equipment/device_button.dart +++ b/lib/views/widgets/equipment/device_button.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; @@ -15,7 +16,7 @@ class DeviceButton extends StatelessWidget { @override Widget build(BuildContext context) { - Subtitle _subtitle = AppLocalization.of(context).subtitle; + return ElevatedButton( style: ElevatedButton.styleFrom( elevation: 0, @@ -38,7 +39,7 @@ class DeviceButton extends StatelessWidget { child: Padding( padding: const EdgeInsets.symmetric(horizontal: 6), child: Text( - _subtitle.pickDevice, + context.translation.pickDevice, style: Theme.of(context).textTheme.subtitle1, textScaleFactor: AppStyle.getScaleFactor(context), textDirection: TextDirection.rtl, @@ -50,7 +51,7 @@ class DeviceButton extends StatelessWidget { child: ListTile( contentPadding: EdgeInsets.all(0), title: Text( - "${_subtitle.sn} : " + device.serialNumber, + "${context.translation.sn} : " + device.serialNumber, style: Theme.of(context).textTheme.subtitle1, ), subtitle: Column( @@ -60,28 +61,28 @@ class DeviceButton extends StatelessWidget { color: Theme.of(context).textTheme.subtitle1.color, ), Text( - "${_subtitle.assetNumber} : ${device.number}", + "${context.translation.assetNumber} : ${device.number}", style: Theme.of(context).textTheme.subtitle2, ), Divider( color: Theme.of(context).textTheme.subtitle1.color, ), Text( - "${_subtitle.assetName} : ${device.modelDefinition.assetName}", + "${context.translation.assetName} : ${device.modelDefinition.assetName}", style: Theme.of(context).textTheme.subtitle2, ), Divider( color: Theme.of(context).textTheme.subtitle1.color, ), Text( - "${_subtitle.brand} : ${device.modelDefinition.manufacturerName}", + "${context.translation.brand} : ${device.modelDefinition.manufacturerName}", style: Theme.of(context).textTheme.subtitle2, ), Divider( color: Theme.of(context).textTheme.subtitle1.color, ), Text( - "${_subtitle.model} : ${device.modelDefinition.modelName}", + "${context.translation.model} : ${device.modelDefinition.modelName}", style: Theme.of(context).textTheme.subtitle2, ), ], diff --git a/lib/views/widgets/equipment/device_item.dart b/lib/views/widgets/equipment/device_item.dart index 19838675..5e75cbb8 100644 --- a/lib/views/widgets/equipment/device_item.dart +++ b/lib/views/widgets/equipment/device_item.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; @@ -13,7 +14,7 @@ class DeviceItem extends StatelessWidget { @override Widget build(BuildContext context) { - Subtitle _subtitle = AppLocalization.of(context).subtitle; + return Padding( padding: EdgeInsets.symmetric(horizontal: 16, vertical: 6), child: ElevatedButton( @@ -28,7 +29,7 @@ class DeviceItem extends StatelessWidget { }, child: ListTile( title: Text( - "${_subtitle.assetName} : \n${device.modelDefinition.assetName}", + "${context.translation.assetName} : \n${device.modelDefinition.assetName}", style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white), ), subtitle: Column( @@ -38,21 +39,21 @@ class DeviceItem extends StatelessWidget { color: Theme.of(context).scaffoldBackgroundColor, ), Text( - "${_subtitle.assetNumber} : ${device.number}", + "${context.translation.assetNumber} : ${device.number}", style: Theme.of(context).textTheme.subtitle1.copyWith(color: AColors.white), ), Divider( color: Theme.of(context).scaffoldBackgroundColor, ), Text( - "${_subtitle.brand} : ${device.modelDefinition.manufacturerName}", + "${context.translation.brand} : ${device.modelDefinition.manufacturerName}", style: Theme.of(context).textTheme.subtitle1.copyWith(color: AColors.white), ), Divider( color: Theme.of(context).scaffoldBackgroundColor, ), Text( - "${_subtitle.model} : ${device.modelDefinition.modelName}", + "${context.translation.model} : ${device.modelDefinition.modelName}", style: Theme.of(context).textTheme.subtitle1.copyWith(color: AColors.white), ), ], diff --git a/lib/views/widgets/equipment/single_device_picker.dart b/lib/views/widgets/equipment/single_device_picker.dart index 2acfae14..a3aa58f5 100644 --- a/lib/views/widgets/equipment/single_device_picker.dart +++ b/lib/views/widgets/equipment/single_device_picker.dart @@ -4,6 +4,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/devices_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/widgets/equipment/device_item.dart'; @@ -29,7 +30,7 @@ class _SingleDevicePickerState extends State { List _searchableList = []; List _initList = []; bool _firstTime = true; - Subtitle _subtitle; + TextEditingController numberController = TextEditingController(); TextEditingController snController = TextEditingController(); @@ -81,7 +82,7 @@ class _SingleDevicePickerState extends State { _searchableList.addAll(_devicesProvider.devices); _initList.addAll(_devicesProvider.devices); } - _subtitle = AppLocalization.of(context).subtitle; + return Scaffold( resizeToAvoidBottomInset: false, body: SafeArea( @@ -118,7 +119,7 @@ class _SingleDevicePickerState extends State { height: 8, ), ATextFormField( - hintText: _subtitle.searchBySn, + hintText: context.translation.searchBySn, controller: snController, style: Theme.of(context).textTheme.subtitle1, suffixIcon: const Icon(Icons.search_rounded), @@ -137,7 +138,7 @@ class _SingleDevicePickerState extends State { Expanded( child: _searchableList.isEmpty ? NoItemFound( - message: _subtitle.noDeviceFound, + message: context.translation.noDeviceFound, ) : LazyLoading( nextPage: _devicesProvider.nextPage, diff --git a/lib/views/widgets/gas_refill/gas_refill_create_details_item.dart b/lib/views/widgets/gas_refill/gas_refill_create_details_item.dart index 3d913f65..8825f45b 100644 --- a/lib/views/widgets/gas_refill/gas_refill_create_details_item.dart +++ b/lib/views/widgets/gas_refill/gas_refill_create_details_item.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/gas_refill/gas_refill_details.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/widgets/app_text_form_field.dart'; @@ -29,7 +30,6 @@ class _GasRefillCreateDetailsItemState extends State @override Widget build(BuildContext context) { - final subtitle = AppLocalization.of(context).subtitle; final startEditing = widget.isUpdate && (widget.model.selectedForEditing ?? false); return Form( key: _formKey, @@ -58,7 +58,7 @@ class _GasRefillCreateDetailsItemState extends State ], ), if (startEditing) const SizedBox(height: 16), - if (startEditing) ASubTitle(subtitle.deliveredQuantity), + if (startEditing) ASubTitle(context.translation.deliveredQuantity), if (startEditing) const SizedBox(height: 4), if (startEditing) ATextFormField( @@ -78,7 +78,7 @@ class _GasRefillCreateDetailsItemState extends State if (startEditing) const SizedBox(height: 8), if (startEditing) AButton( - text: subtitle.edit, + text: context.translation.edit, onPressed: () { _formKey.currentState?.save(); widget.onPressed(); diff --git a/lib/views/widgets/gas_refill/gas_refill_item.dart b/lib/views/widgets/gas_refill/gas_refill_item.dart index 7622ab35..86861808 100644 --- a/lib/views/widgets/gas_refill/gas_refill_item.dart +++ b/lib/views/widgets/gas_refill/gas_refill_item.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; -import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; @@ -15,7 +15,6 @@ class GasRefillItem extends StatelessWidget { @override Widget build(BuildContext context) { - Subtitle subtitle = AppLocalization.of(context).subtitle; Color itemColor = index % 2 == 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; @@ -50,7 +49,7 @@ class GasRefillItem extends StatelessWidget { children: [ Expanded( child: Text( - subtitle.hospital, + context.translation.hospital, style: Theme.of(context).textTheme.titleSmall.copyWith( color: onItemColor, ), @@ -69,7 +68,7 @@ class GasRefillItem extends StatelessWidget { Row( children: [ Expanded( - child: Text(subtitle.status, style: Theme.of(context).textTheme.titleSmall.copyWith(color: onItemColor)), + child: Text(context.translation.status, style: Theme.of(context).textTheme.titleSmall.copyWith(color: onItemColor)), ), if (item.status?.id != null) StatusLabel(label: item.status.name, backgroundColor: AColors.getGasStatusColor(item.status.id)), ], diff --git a/lib/views/widgets/gas_refill/gas_refill_list.dart b/lib/views/widgets/gas_refill/gas_refill_list.dart index f805e67c..519cb0bf 100644 --- a/lib/views/widgets/gas_refill/gas_refill_list.dart +++ b/lib/views/widgets/gas_refill/gas_refill_list.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart'; @@ -22,9 +23,8 @@ class _GasRefillListState extends State { @override Widget build(BuildContext context) { if (widget.items.length == 0) { - Subtitle subtitle = AppLocalization.of(context).subtitle; return NoItemFound( - message: subtitle.noServiceRequestFound, + message: context.translation.noServiceRequestFound, ); } return LazyLoading( diff --git a/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart b/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart index d71b2612..b0399a9e 100644 --- a/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart +++ b/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/validator/validator.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/gas_refill/gas_refill_details.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/widgets/app_text_form_field.dart'; @@ -17,7 +18,7 @@ class GasRefillUpdateDetailsItem extends StatelessWidget { @override Widget build(BuildContext context) { - Subtitle subtitle = AppLocalization.of(context).subtitle; + return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -34,10 +35,10 @@ class GasRefillUpdateDetailsItem extends StatelessWidget { ? Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - ASubTitle(subtitle.quantity), + ASubTitle(context.translation.quantity), if (validate && details.deliveredQuantity == null) ASubTitle( - subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), SizedBox( diff --git a/lib/views/widgets/hospitals/hospital_auto_complete_field.dart b/lib/views/widgets/hospitals/hospital_auto_complete_field.dart index a8ae2f22..3c622193 100644 --- a/lib/views/widgets/hospitals/hospital_auto_complete_field.dart +++ b/lib/views/widgets/hospitals/hospital_auto_complete_field.dart @@ -4,6 +4,7 @@ import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/hospitals_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; @@ -53,7 +54,7 @@ class _HospitalAutoCompleteFieldState extends State { @override Widget build(BuildContext context) { _settingProvider = Provider.of(context); - Subtitle _subtitle = AppLocalization.of(context).subtitle; + return Container( padding: EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( @@ -72,7 +73,7 @@ class _HospitalAutoCompleteFieldState extends State { controller: _controller, textAlign: TextAlign.center, decoration: InputDecoration( - hintText: _subtitle.hospital, + hintText: context.translation.hospital, border: InputBorder.none, disabledBorder: InputBorder.none, focusedBorder: InputBorder.none, diff --git a/lib/views/widgets/hospitals/hospital_auto_complete_field_new.dart b/lib/views/widgets/hospitals/hospital_auto_complete_field_new.dart index 6ca612a4..def00466 100644 --- a/lib/views/widgets/hospitals/hospital_auto_complete_field_new.dart +++ b/lib/views/widgets/hospitals/hospital_auto_complete_field_new.dart @@ -4,6 +4,7 @@ import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/hospitals_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; @@ -56,7 +57,7 @@ class _HospitalAutoCompleteFieldState extends State { @override Widget build(BuildContext context) { _settingProvider = Provider.of(context); - Subtitle _subtitle = AppLocalization.of(context).subtitle; + return Container( padding: EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( @@ -76,7 +77,7 @@ class _HospitalAutoCompleteFieldState extends State { controller: _controller, textAlign: TextAlign.center, decoration: InputDecoration( - hintText: _subtitle.hospital, + hintText: context.translation.hospital, border: InputBorder.none, disabledBorder: InputBorder.none, focusedBorder: InputBorder.none, diff --git a/lib/views/widgets/hospitals/hospital_button.dart b/lib/views/widgets/hospitals/hospital_button.dart index 33ce319c..60cce6b8 100644 --- a/lib/views/widgets/hospitals/hospital_button.dart +++ b/lib/views/widgets/hospitals/hospital_button.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; @@ -14,7 +15,6 @@ class HospitalButton extends StatelessWidget { @override Widget build(BuildContext context) { - Subtitle _subtitle = AppLocalization.of(context).subtitle; return ElevatedButton( style: ElevatedButton.styleFrom( elevation: 0, @@ -29,7 +29,7 @@ class HospitalButton extends StatelessWidget { child: Padding( padding: const EdgeInsets.symmetric(horizontal: 8), child: Text( - hospital?.name ?? _subtitle.pickHospital, + hospital?.name ?? context.translation.pickHospital, style: Theme.of(context).textTheme.bodyText1.copyWith(fontSize: 14, color: AColors.grey3A), // textScaleFactor: AppStyle.getScaleFactor(context), textDirection: TextDirection.rtl, diff --git a/lib/views/widgets/hospitals/single_hospital_picker.dart b/lib/views/widgets/hospitals/single_hospital_picker.dart index afe1f924..9ca9d723 100644 --- a/lib/views/widgets/hospitals/single_hospital_picker.dart +++ b/lib/views/widgets/hospitals/single_hospital_picker.dart @@ -3,6 +3,7 @@ import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/hospitals_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/widgets/hospitals/hospital_item.dart'; @@ -33,7 +34,7 @@ class _SingleHospitalPickerState extends State { _searchableList.addAll(_hospitalsProvider.hospitals); _firstTime = false; } - Subtitle _subtitle = AppLocalization.of(context).subtitle; + return Scaffold( resizeToAvoidBottomInset: false, body: LoadingManager( @@ -54,7 +55,7 @@ class _SingleHospitalPickerState extends State { Padding( padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), child: ATextFormField( - hintText: _subtitle.searchByName, + hintText: context.translation.searchByName, style: Theme.of(context).textTheme.headline6, suffixIcon: Icon(Icons.search_rounded), onChange: (value) { @@ -67,7 +68,7 @@ class _SingleHospitalPickerState extends State { Expanded( child: _searchableList.isEmpty ? NoItemFound( - message: _subtitle.noHospitalFound, + message: context.translation.noHospitalFound, ) : ListView.builder( padding: EdgeInsets.zero, diff --git a/lib/views/widgets/images/mini_one_file_picker.dart b/lib/views/widgets/images/mini_one_file_picker.dart index c831fab2..d26be140 100644 --- a/lib/views/widgets/images/mini_one_file_picker.dart +++ b/lib/views/widgets/images/mini_one_file_picker.dart @@ -4,7 +4,8 @@ import 'package:file_picker/file_picker.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; -import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/sizing.dart'; @@ -22,8 +23,7 @@ class AMiniOneFilePicker extends StatefulWidget { class _AMiniOneFilePickerState extends State { File _file; - Subtitle _subtitle; - + @override void initState() { super.initState(); @@ -32,7 +32,7 @@ class _AMiniOneFilePickerState extends State { @override Widget build(BuildContext context) { - _subtitle = AppLocalization.of(context).subtitle; + return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -55,7 +55,7 @@ class _AMiniOneFilePickerState extends State { children: [ const SizedBox(height: 4), Text( - _subtitle.requiredFile, + context.translation.requiredFile, style: Theme.of(context).textTheme.titleLarge.copyWith(color: Colors.red), textScaleFactor: AppStyle.getScaleFactor(context), ), @@ -75,12 +75,12 @@ class _AMiniOneFilePickerState extends State { child: Padding( padding: const EdgeInsets.all(8.0), child: Text( - _file == null ? _subtitle.pickFile : _file.path.split("/").last, + _file == null ? context.translation.pickFile : _file.path.split("/").last, textScaleFactor: AppStyle.getScaleFactor(context), ), ), onPressed: () async { - onFilePicker(_subtitle); + onFilePicker(context.translation); }, ), ), @@ -88,7 +88,7 @@ class _AMiniOneFilePickerState extends State { ); } - fromFilePicker(Subtitle subtitle) async { + fromFilePicker(AppLocalizations subtitle) async { FilePickerResult result = await FilePicker.platform.pickFiles( type: FileType.custom, allowedExtensions: ['jpg', 'jpeg', 'png', 'pdf', 'doc', 'docx', 'xlsx', 'pptx'], @@ -102,7 +102,7 @@ class _AMiniOneFilePickerState extends State { } } - onFilePicker(Subtitle subtitle) async { + onFilePicker(AppLocalizations subtitle) async { ImageSource source = await showDialog( context: context, builder: (dialogContext) => CupertinoAlertDialog( diff --git a/lib/views/widgets/images/multi_image_picker.dart b/lib/views/widgets/images/multi_image_picker.dart index aa3bfefc..c0885083 100644 --- a/lib/views/widgets/images/multi_image_picker.dart +++ b/lib/views/widgets/images/multi_image_picker.dart @@ -6,11 +6,13 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:image_picker/image_picker.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/buttons/app_flat_button.dart'; +import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'multi_image_picker_item.dart'; @@ -32,7 +34,7 @@ class _MultiFilesPickerState extends State with TickerProvider @override Widget build(BuildContext context) { _size = MediaQuery.of(context).size; - Subtitle subtitle = AppLocalization.of(context).subtitle; + return (widget.enabled == false && (widget.files?.isEmpty ?? false)) ? const SizedBox() : Container( @@ -52,7 +54,7 @@ class _MultiFilesPickerState extends State with TickerProvider children: [ Expanded( child: Text( - widget.label ?? subtitle.images, + widget.label ?? context.translation.images, style: Theme.of(context).textTheme.headline6.copyWith( fontSize: 14, ), @@ -61,11 +63,11 @@ class _MultiFilesPickerState extends State with TickerProvider ), if (widget.enabled) AFlatButton( - text: subtitle.add, + text: context.translation.add, onPressed: widget.enabled ? () { // onImagePick(_subtitle); - onFilePicker(subtitle); + onFilePicker(context.translation); } : null, ), @@ -80,7 +82,7 @@ class _MultiFilesPickerState extends State with TickerProvider crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - subtitle.imagesRequired, + context.translation.imagesRequired, style: Theme.of(context).textTheme.headline6.copyWith( fontSize: 14, color: AColors.red, @@ -112,7 +114,7 @@ class _MultiFilesPickerState extends State with TickerProvider onPressed: widget.enabled ? () { // onImagePick(_subtitle); - onFilePicker(subtitle); + onFilePicker(context.translation); } : null, child: Center( @@ -150,7 +152,7 @@ class _MultiFilesPickerState extends State with TickerProvider ); } - fromFilePicker(Subtitle subtitle) async { + fromFilePicker(AppLocalizations subtitle) async { FilePickerResult result = await FilePicker.platform.pickFiles( type: FileType.custom, allowMultiple: true, @@ -164,7 +166,7 @@ class _MultiFilesPickerState extends State with TickerProvider } } - onFilePicker(Subtitle subtitle) async { + onFilePicker(AppLocalizations subtitle) async { if (widget.files.length >= 5) { Fluttertoast.showToast(msg: subtitle.maxImagesNumberIs5); return; diff --git a/lib/views/widgets/images/one_image_picker.dart b/lib/views/widgets/images/one_image_picker.dart index de5124d0..d4b60349 100644 --- a/lib/views/widgets/images/one_image_picker.dart +++ b/lib/views/widgets/images/one_image_picker.dart @@ -4,6 +4,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:image_picker/image_picker.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/sizing.dart'; @@ -21,7 +22,6 @@ class AOneImagePicker extends StatefulWidget { class _AOneImagePickerState extends State { File _image; - Subtitle _subtitle; @override void initState() { @@ -31,7 +31,7 @@ class _AOneImagePickerState extends State { @override Widget build(BuildContext context) { - _subtitle = AppLocalization.of(context).subtitle; + return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -58,7 +58,7 @@ class _AOneImagePickerState extends State { height: 4, ), Text( - _subtitle.requiredImage, + context.translation.requiredImage, style: Theme.of(context).textTheme.headline6.copyWith(color: Colors.red), textScaleFactor: AppStyle.getScaleFactor(context), ), @@ -79,7 +79,7 @@ class _AOneImagePickerState extends State { ), child: _image == null ? Text( - _subtitle.pickImage, + context.translation.pickImage, style: Theme.of(context).textTheme.headline6, textScaleFactor: AppStyle.getScaleFactor(context), ) diff --git a/lib/views/widgets/loaders/loading_manager.dart b/lib/views/widgets/loaders/loading_manager.dart index 7ab67a60..8572355b 100644 --- a/lib/views/widgets/loaders/loading_manager.dart +++ b/lib/views/widgets/loaders/loading_manager.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/subtitle.dart'; import 'app_loading.dart'; @@ -45,7 +46,6 @@ class _LoadingManagerState extends State { @override Widget build(BuildContext context) { - Subtitle subtitle = AppLocalization.of(context).subtitle; Widget placeHolder; // to load data if load not start if (widget.isLoading != true && widget.stateCode == null) { @@ -61,7 +61,7 @@ class _LoadingManagerState extends State { } else if (widget.isFailedLoading && !widget.isNotPage) { // if failed return failed widget placeHolder = FailedLoading( - message: HttpStatusManger.getStatusMessage(status: widget.stateCode, subtitle: subtitle), + message: HttpStatusManger.getStatusMessage(status: widget.stateCode, subtitle: context.translation), onReload: widget.onRefresh, ); } diff --git a/lib/views/widgets/parts/auto_complete_parts_field.dart b/lib/views/widgets/parts/auto_complete_parts_field.dart index 71bf0098..1ac563ff 100644 --- a/lib/views/widgets/parts/auto_complete_parts_field.dart +++ b/lib/views/widgets/parts/auto_complete_parts_field.dart @@ -43,7 +43,7 @@ class _AutoCompletePartsFieldState extends State { _settingProvider = Provider.of(context); _userProvider = Provider.of(context); _partsProvider = Provider.of(context); - //Subtitle _subtitle = AppLocalization.of(context).subtitle; + return Container( padding: const EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( diff --git a/lib/views/widgets/parts/part_item.dart b/lib/views/widgets/parts/part_item.dart index 0d98b0e0..bade7554 100644 --- a/lib/views/widgets/parts/part_item.dart +++ b/lib/views/widgets/parts/part_item.dart @@ -17,7 +17,7 @@ class PartItem extends StatefulWidget { class _PartItemState extends State { @override Widget build(BuildContext context) { - //final _subtitle = AppLocalization.of(context).subtitle; + return Column( children: [ const Divider(), diff --git a/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart b/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart index 0691e452..55c9093a 100644 --- a/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart +++ b/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart @@ -43,7 +43,7 @@ class _AutoCompleteDeviceNumberFieldState extends State(context); _userProvider = Provider.of(context); _devicesProvider = Provider.of(context); - //Subtitle _subtitle = AppLocalization.of(context).subtitle; + // return Container( padding: const EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( diff --git a/lib/views/widgets/pentry/pentry_calibration_tool_form.dart b/lib/views/widgets/pentry/pentry_calibration_tool_form.dart index 27033ba2..9ea520ac 100644 --- a/lib/views/widgets/pentry/pentry_calibration_tool_form.dart +++ b/lib/views/widgets/pentry/pentry_calibration_tool_form.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/pantry/calibration_tools.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; @@ -26,7 +27,7 @@ class PentryCalibrationToolForm extends StatefulWidget { class _PentryCalibrationToolFormState extends State { @override Widget build(BuildContext context) { - final subtitle = AppLocalization.of(context).subtitle; + final userProvider = Provider.of(context); return ListView.builder( padding: EdgeInsets.only( @@ -35,7 +36,7 @@ class _PentryCalibrationToolFormState extends State { itemBuilder: (context, index) { if (index == widget.models.length) { return AButton( - text: subtitle.add, + text: context.translation.add, onPressed: () { widget.models.add(CalibrationTool()); setState(() {}); @@ -53,7 +54,7 @@ class _PentryCalibrationToolFormState extends State { if (index != 0) ASmallButton( color: Theme.of(context).colorScheme.error, - text: subtitle.delete, + text: context.translation.delete, onPressed: () { widget.models.remove(model); setState(() {}); diff --git a/lib/views/widgets/pentry/pentry_info_form.dart b/lib/views/widgets/pentry/pentry_info_form.dart index f5f1f6a5..2cfc7076 100644 --- a/lib/views/widgets/pentry/pentry_info_form.dart +++ b/lib/views/widgets/pentry/pentry_info_form.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/pantry/pentry.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/app_text_form_field.dart'; @@ -34,7 +35,7 @@ class _PentryInfoFormState extends State { @override Widget build(BuildContext context) { widget.model?.files ??= []; - final subtitle = AppLocalization.of(context).subtitle; + final userProvider = Provider.of(context); return Padding( padding: EdgeInsets.only( @@ -49,7 +50,7 @@ class _PentryInfoFormState extends State { const ASubTitle("PPM Visit Status"), if (widget.enableValidate && widget.model.ppmVisitStatus == null) ASubTitle( - subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), const SizedBox( @@ -69,7 +70,7 @@ class _PentryInfoFormState extends State { const ASubTitle("Timer"), if (widget.enableValidate && widget.model?.timer?.endAt == null) ASubTitle( - subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), const SizedBox( @@ -89,7 +90,7 @@ class _PentryInfoFormState extends State { const ASubTitle("Status"), if (widget.enableValidate && widget.model.status == null) ASubTitle( - subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), const SizedBox( @@ -107,7 +108,7 @@ class _PentryInfoFormState extends State { const ASubTitle("Actual Visit Date"), if (widget.enableValidate && widget.model.actualVisitDate == null) ASubTitle( - subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), const SizedBox( @@ -128,7 +129,7 @@ class _PentryInfoFormState extends State { const ASubTitle("Expected Visit Date"), if (widget.enableValidate && widget.model.expectedVisitDate == null) ASubTitle( - subtitle.requiredWord, + context.translation.requiredWord, color: Colors.red, ), const SizedBox( diff --git a/lib/views/widgets/pentry/pentry_pm_kit_form.dart b/lib/views/widgets/pentry/pentry_pm_kit_form.dart index 2f83c8fa..28cadeeb 100644 --- a/lib/views/widgets/pentry/pentry_pm_kit_form.dart +++ b/lib/views/widgets/pentry/pentry_pm_kit_form.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/pantry/pm_kit.dart'; import 'package:test_sa/views/app_style/sizing.dart'; @@ -26,7 +27,7 @@ class PentryPMKitForm extends StatefulWidget { class _PentryPMKitFormState extends State { @override Widget build(BuildContext context) { - final subtitle = AppLocalization.of(context).subtitle; + return ListView.builder( padding: EdgeInsets.only( top: 12 * AppStyle.getScaleFactor(context), @@ -39,7 +40,7 @@ class _PentryPMKitFormState extends State { itemBuilder: (context, index) { if (index == widget.models.length) { return AButton( - text: subtitle.add, + text: context.translation.add, onPressed: () { widget.models.add(PMKit()); setState(() {}); @@ -57,7 +58,7 @@ class _PentryPMKitFormState extends State { if (index != 0) ASmallButton( color: Theme.of(context).colorScheme.error, - text: subtitle.delete, + text: context.translation.delete, onPressed: () { widget.models.remove(model); setState(() {}); diff --git a/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart b/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart index 6bf2d43e..3d74dd78 100644 --- a/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart +++ b/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/pantry/ppm_check_list.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/app_text_form_field.dart'; @@ -25,7 +26,7 @@ class PentryPPMCheckListForm extends StatefulWidget { class _PentryPPMCheckListFormState extends State { @override Widget build(BuildContext context) { - final subtitle = AppLocalization.of(context).subtitle; + return ListView.builder( padding: EdgeInsets.only( top: 12 * AppStyle.getScaleFactor(context), left: 12 * AppStyle.getScaleFactor(context), right: 12 * AppStyle.getScaleFactor(context), bottom: 80 * AppStyle.getScaleFactor(context)), @@ -33,7 +34,7 @@ class _PentryPPMCheckListFormState extends State { itemBuilder: (context, index) { if (index == widget.models.length) { return AButton( - text: subtitle.add, + text: context.translation.add, onPressed: () { widget.models.add(PPMCheckList()); setState(() {}); @@ -52,7 +53,7 @@ class _PentryPPMCheckListFormState extends State { if (index != 0) ASmallButton( color: Theme.of(context).colorScheme.error, - text: subtitle.delete, + text: context.translation.delete, onPressed: () { widget.models.remove(model); setState(() {}); @@ -79,7 +80,7 @@ class _PentryPPMCheckListFormState extends State { const SizedBox( height: 8, ), - ASubTitle(subtitle.status), + ASubTitle(context.translation.status), const SizedBox( height: 4, ), diff --git a/lib/views/widgets/requests/service_request_item.dart b/lib/views/widgets/requests/service_request_item.dart index 6faf7340..7bf8e964 100644 --- a/lib/views/widgets/requests/service_request_item.dart +++ b/lib/views/widgets/requests/service_request_item.dart @@ -30,7 +30,6 @@ class ServiceRequestItem extends StatelessWidget { @override Widget build(BuildContext context) { - Subtitle _subtitle = AppLocalization.of(context).subtitle; User _user = Provider.of(context, listen: false).user; final servicesProvider = Provider.of(context, listen: false); final settingProvider = Provider.of(context, listen: false); @@ -66,13 +65,13 @@ class ServiceRequestItem extends StatelessWidget { ], ), 8.height, - Text(context.translate(TranslationKeys.serviceRequest), style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), + Text(context.translation.serviceRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), Text( - '${_subtitle.assetName}: ${request.deviceEnName}', + '${context.translation.assetName}: ${request.deviceEnName}', style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), ), Text( - '${_subtitle.assetNumber}: ${request.device.number}', + '${context.translation.assetNumber}: ${request.device.number}', style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), ), Text( diff --git a/lib/views/widgets/requests/service_request_list.dart b/lib/views/widgets/requests/service_request_list.dart index ffb12374..b8b24d47 100644 --- a/lib/views/widgets/requests/service_request_list.dart +++ b/lib/views/widgets/requests/service_request_list.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; @@ -17,10 +18,9 @@ class ServiceRequestsList extends StatelessWidget { @override Widget build(BuildContext context) { - Subtitle _subtitle = AppLocalization.of(context).subtitle; if (requests.length == 0) { return NoItemFound( - message: _subtitle.noServiceRequestFound, + message: context.translation.noServiceRequestFound, ); } return LazyLoading( diff --git a/lib/views/widgets/requests/service_request_update_dialog.dart b/lib/views/widgets/requests/service_request_update_dialog.dart index ce8cae93..df047691 100644 --- a/lib/views/widgets/requests/service_request_update_dialog.dart +++ b/lib/views/widgets/requests/service_request_update_dialog.dart @@ -7,6 +7,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; @@ -30,7 +31,7 @@ class ServiceRequestsUpdateDialog extends StatefulWidget { class _ServiceRequestsUpdateDialogState extends State with TickerProviderStateMixin { DateTime _dateTime; Lookup _employee; - Subtitle _subtitle; + UserProvider _userProvider; SettingProvider _settingProvider; ServiceRequestsProvider _serviceRequestsProvider; @@ -40,7 +41,7 @@ class _ServiceRequestsUpdateDialogState extends State(context, listen: false); _settingProvider = Provider.of(context, listen: false); _serviceRequestsProvider = Provider.of(context, listen: false); @@ -88,13 +89,13 @@ class _ServiceRequestsUpdateDialogState extends State wi @override Widget build(BuildContext context) { - Subtitle subtitle = AppLocalization.of(context).subtitle; + return Padding( padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), child: ClipRRect( @@ -58,13 +59,13 @@ class AssetTransferSearchDialogState extends State wi mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ ASmallButton( - text: subtitle.cancel, + text: context.translation.cancel, onPressed: () { Navigator.of(context).pop(); }, ), ASmallButton( - text: subtitle.search, + text: context.translation.search, onPressed: () { if (!_formKey.currentState.validate()) { return; @@ -94,7 +95,7 @@ class AssetTransferSearchDialogState extends State wi SizedBox(height: 8.0 * AppStyle.getScaleFactor(context)), ATextFormField( initialValue: _search.title, - hintText: subtitle.title, + hintText: context.translation.title, style: Theme.of(context).textTheme.titleLarge, textInputAction: TextInputAction.search, onAction: () { @@ -163,7 +164,7 @@ class AssetTransferSearchDialogState extends State wi SizedBox(height: 8.0 * AppStyle.getScaleFactor(context)), ATextFormField( initialValue: _search.room, - hintText: subtitle.room, + hintText: context.translation.room, style: Theme.of(context).textTheme.titleLarge, textInputAction: TextInputAction.search, onAction: () { @@ -184,7 +185,7 @@ class AssetTransferSearchDialogState extends State wi padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), child: AButton( padding: EdgeInsets.zero, - text: subtitle.clearSearch, + text: context.translation.clearSearch, onPressed: () { _search = DeviceTransferSearch(); Navigator.of(context).pop(_search); diff --git a/lib/views/widgets/search/service_request_search_bar.dart b/lib/views/widgets/search/service_request_search_bar.dart index 682b4177..acf54c04 100644 --- a/lib/views/widgets/search/service_request_search_bar.dart +++ b/lib/views/widgets/search/service_request_search_bar.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_request/service_request_search.dart'; import 'package:test_sa/models/subtitle.dart'; @@ -61,7 +62,7 @@ class _ServiceRequestsSearchDialogState extends State with TickerProv @override Widget build(BuildContext context) { - Subtitle _subtitle = AppLocalization.of(context).subtitle; + DateTime today = DateTime.now(); return SizedBox( height: MediaQuery.of(context).size.height / 1.3, @@ -72,13 +73,13 @@ class _VisitsSearchDialogState extends State with TickerProv mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ ASmallButton( - text: _subtitle.cancel, + text: context.translation.cancel, onPressed: () { Navigator.of(context).pop(); }, ), ASmallButton( - text: _subtitle.search, + text: context.translation.search, onPressed: () { if (!_formKey.currentState.validate()) { return; @@ -102,7 +103,7 @@ class _VisitsSearchDialogState extends State with TickerProv ), ATextFormField( initialValue: _search.deviceNumber, - hintText: _subtitle.assetNumber, + hintText: context.translation.assetNumber, style: Theme.of(context).textTheme.headline6, textInputAction: TextInputAction.search, onAction: () { @@ -121,7 +122,7 @@ class _VisitsSearchDialogState extends State with TickerProv ), ATextFormField( initialValue: _search.deviceName, - hintText: _subtitle.assetName, + hintText: context.translation.assetName, style: Theme.of(context).textTheme.headline6, textInputAction: TextInputAction.search, onAction: () { @@ -140,7 +141,7 @@ class _VisitsSearchDialogState extends State with TickerProv ), ATextFormField( initialValue: _search.deviceSerialNumber, - hintText: _subtitle.serialNumber, + hintText: context.translation.serialNumber, style: Theme.of(context).textTheme.headline6, textInputAction: TextInputAction.search, onAction: () { @@ -213,7 +214,7 @@ class _VisitsSearchDialogState extends State with TickerProv SizedBox( height: 8.0 * AppStyle.getScaleFactor(context), ), - ASubTitle(_subtitle.status), + ASubTitle(context.translation.status), SizedBox( height: 4.0 * AppStyle.getScaleFactor(context), ), @@ -250,7 +251,7 @@ class _VisitsSearchDialogState extends State with TickerProv SizedBox( height: 8.0 * AppStyle.getScaleFactor(context), ), - ASubTitle(_subtitle.contactStatus), + ASubTitle(context.translation.contactStatus), SizedBox( height: 4.0 * AppStyle.getScaleFactor(context), ), @@ -287,7 +288,7 @@ class _VisitsSearchDialogState extends State with TickerProv SizedBox( height: 8.0 * AppStyle.getScaleFactor(context), ), - ASubTitle(_subtitle.actualDate), + ASubTitle(context.translation.actualDate), SizedBox( height: 4.0 * AppStyle.getScaleFactor(context), ), @@ -304,7 +305,7 @@ class _VisitsSearchDialogState extends State with TickerProv SizedBox( height: 8.0 * AppStyle.getScaleFactor(context), ), - ASubTitle(_subtitle.expectDate), + ASubTitle(context.translation.expectDate), SizedBox( height: 4.0 * AppStyle.getScaleFactor(context), ), @@ -324,7 +325,7 @@ class _VisitsSearchDialogState extends State with TickerProv padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), child: AButton( padding: EdgeInsets.zero, - text: _subtitle.clearSearch, + text: context.translation.clearSearch, onPressed: () { _search = VisitsSearch(); Navigator.of(context).pop(_search); diff --git a/lib/views/widgets/visits/visit_item.dart b/lib/views/widgets/visits/visit_item.dart index fc8e2052..b4546039 100644 --- a/lib/views/widgets/visits/visit_item.dart +++ b/lib/views/widgets/visits/visit_item.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; @@ -24,7 +25,7 @@ class VisitItem extends StatelessWidget { UserProvider userProvider = Provider.of(context); Color itemColor = index % 2 == 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; - Subtitle subtitle = AppLocalization.of(context).subtitle; + return Padding( padding: const EdgeInsets.symmetric(vertical: 4), child: ElevatedButton( @@ -138,11 +139,11 @@ class VisitItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - subtitle.expectDate, + context.translation.expectDate, style: Theme.of(context).textTheme.titleLarge.copyWith(color: onItemColor, fontSize: 14), ), Text( - visit.expectDate ?? subtitle.noDateFound, + visit.expectDate ?? context.translation.noDateFound, style: Theme.of(context).textTheme.titleLarge.copyWith(color: onItemColor, fontSize: 14), ), ], @@ -152,11 +153,11 @@ class VisitItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - subtitle.actualDate, + context.translation.actualDate, style: Theme.of(context).textTheme.titleLarge.copyWith(color: onItemColor, fontSize: 14), ), Text( - visit.actualDate ?? subtitle.noDateFound, + visit.actualDate ?? context.translation.noDateFound, style: Theme.of(context).textTheme.titleLarge.copyWith(color: onItemColor, fontSize: 14), ), ], diff --git a/lib/views/widgets/visits/visits_list.dart b/lib/views/widgets/visits/visits_list.dart index bb327679..0fd150be 100644 --- a/lib/views/widgets/visits/visits_list.dart +++ b/lib/views/widgets/visits/visits_list.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/views/app_style/sizing.dart'; @@ -31,10 +32,9 @@ class _VisitsListState extends State { @override Widget build(BuildContext context) { - Subtitle subtitle = AppLocalization.of(context).subtitle; if (widget.visits.isEmpty) { return NoItemFound( - message: subtitle.noVisitsFound, + message: context.translation.noVisitsFound, ); } return Stack( diff --git a/pubspec.yaml b/pubspec.yaml index 33ea18a3..7a84b17e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -92,6 +92,7 @@ flutter: # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. + generate: true uses-material-design: true assets: - assets/