loclization

main_design2.0
nextwo 2 years ago
parent 63cbbe48d1
commit 4ec0b27afa

@ -11,4 +11,5 @@ extension BuildContextExtension on BuildContext {
List<String> get getIssues => [translation.reason1, translation.reason2, translation.reason3, translation.reason4, translation.reason5]; List<String> get getIssues => [translation.reason1, translation.reason2, translation.reason3, translation.reason4, translation.reason5];
bool get isDark => Provider.of<SettingProvider>(this).theme == "dark"; bool get isDark => Provider.of<SettingProvider>(this).theme == "dark";
bool get isAr => Provider.of<SettingProvider>(this).language == "ar";
} }

@ -306,5 +306,49 @@
"requesterName" : "اسم الطالب", "requesterName" : "اسم الطالب",
"updateWorkOrder" : "تعديل طلب العمل", "updateWorkOrder" : "تعديل طلب العمل",
"createPreventiveMaintenanceRequest" : "إنشاء طلب صيانة وقائية", "createPreventiveMaintenanceRequest" : "إنشاء طلب صيانة وقائية",
"createNewRequest" : "إنشاء طلب جديد" "createNewRequest" : "إنشاء طلب جديد",
"helpCenter" : "مركز المساعدة",
"rateUs": "قيمنا",
"settings" : " الاعدادات",
"reportBg" : "ابلاغ عن خطا",
"whatsNew" : "ماهو الجديد",
"logout" : "خروج",
"arabic" : "عربي",
"lightTheme" : "وضع النهاري",
"myProfile" : "الملف الشخصي",
"viewDetails" : "عرض التفاصيل",
"requests" : "طلبات",
"highPriorityRequests" : "طلبات ذات\nاولوية عاليه",
"newRequests" : " طلبات\nجديدة",
"completedRequests" : "طلبات\nمكتملة",
"overdueRequests": "طلبات\nمتاخره",
"highPriority" : "اولوية عالية",
"lowPriority" : "اولوية منخفضة",
"inProgress": "قيد التنفيذ",
"completed" : "مكتملة",
"open" : "مفتوح",
"requestType":"نوع الطلب",
"requestNo": "رقم الطلب",
"assignedTo" : "تعيين الى",
"viewComments" : "عرض التعليقات",
"viewWorkOrder" : "عرض جميع طلبات العمل",
"serviceDetails": "تفاصيل الخدمات",
"waitingForQuotation" : "في انتظار السؤال",
"gasRequest" : "طلب غاز",
"createWorkOrder" : "إنشاء طلب عمل",
"commentHere" : "علق هنا",
"nurseSignature" : "توقيع الممرض",
"actualVisitDate": "تاريخ الزيارة الفعلي",
"ppmVisit": "موعد زيارة الصيانة الوقائية",
"timer": "مؤقت",
"deviceStatus" : "حالة الجهاز",
"addAsset" : "اضافة جهاز",
"calibrationDate" : "موعد المعايرة",
"asset" : "جهاز",
"addItem" : "اضافة عنصر",
"item" : "عنصر",
"serialNo" : "رقم التسلسلي",
"measuredValue": "القيمة المقاسه"
} }

@ -150,6 +150,7 @@
"updateVisitsGroup": "Update Visits Group", "updateVisitsGroup": "Update Visits Group",
"updatingDots": "Updating ...", "updatingDots": "Updating ...",
"expectedVisitDate": "Next Visit Date", "expectedVisitDate": "Next Visit Date",
"actualVisitDate": "Actual Visit Date",
"visitInformation": "Visit Information", "visitInformation": "Visit Information",
"travelingHours": "Traveling Hours", "travelingHours": "Traveling Hours",
"workingHours": "Working Hours", "workingHours": "Working Hours",
@ -261,7 +262,6 @@
"workOrders" : "Work Orders", "workOrders" : "Work Orders",
"viewWorkOrder" : "View All Work Order", "viewWorkOrder" : "View All Work Order",
"createWorkOrder" : "Create Work Order", "createWorkOrder" : "Create Work Order",
"viewWorkOrder" : "View All Work Order",
"serviceDetails": "Service Details", "serviceDetails": "Service Details",
"priority" : "Priority", "priority" : "Priority",
"equipmentStatus" : "Equipment Status", "equipmentStatus" : "Equipment Status",
@ -310,5 +310,45 @@
"requesterName" : "Requester Name", "requesterName" : "Requester Name",
"updateWorkOrder" : "Update Work Order", "updateWorkOrder" : "Update Work Order",
"createPreventiveMaintenanceRequest" : "Create Preventive Maintenance Request", "createPreventiveMaintenanceRequest" : "Create Preventive Maintenance Request",
"createNewRequest" : "Create New Request" "createNewRequest" : "Create New Request",
"helpCenter" : "Help Center",
"rateUs": "Rate Us",
"settings" : "Settings",
"reportBg" : "Report a bug",
"whatsNew" : "What's New",
"logout" : "Logout",
"arabic" : "Arabic",
"lightTheme" : "Light Theme",
"myProfile" : "My Profile",
"viewDetails" : "View Details",
"requests" : "Requests",
"highPriorityRequests" : "High Priority\nRequests",
"newRequests" : "New Request\nRequests",
"completedRequests" : "completed\nRequests",
"overdueRequests": "overdue\nRequests",
"highPriority" : "High Priority",
"lowPriority" : "Low Priority",
"inProgress": "In Progress",
"completed" : "completed",
"open" : "Open",
"requestType":"Request Type",
"requestNo": "Request No",
"assignedTo" : "Assigned To",
"waitingForQuotation" : "Waiting for quotation",
"gasRequest" : "Gas Request",
"viewComments" : "View Comments",
"commentHere" : "Comment Here",
"nurseSignature" : "Nurse Signature",
"ppmVisit": "PPM Visit Status",
"timer": "Timer",
"deviceStatus" : "Device Status",
"addAsset" : "Add Asset",
"calibrationDate" : "Calibration Date",
"asset" : "Asset",
"addItem" : "Add Item",
"item" : "Item",
"measuredValue": "Measured Value"
} }

@ -57,22 +57,31 @@ class AppDrawer extends StatelessWidget {
18.height, 18.height,
1.divider, 1.divider,
ListView( ListView(
// "settings" : " Settings",
// "ReportBug " : "Report a bug",
// "whatsNew" : "What's New",
// "logout" : "Logout"
// "settings" : " الاعدادات",
// "ReportBug " "ابلاغ عن خطا",
// "whatsNew" : "ماهو الجديد",
// "logout" : "خروج"
padding: const EdgeInsets.only(top: 24), padding: const EdgeInsets.only(top: 24),
children: [ children: [
drawerItem("drawer_notification", "Notification").onPress(() => Navigator.of(context).pushNamed(NotificationsPage.id)), drawerItem("drawer_notification", context.translation.notifications).onPress(() => Navigator.of(context).pushNamed(NotificationsPage.id)),
18.height, 18.height,
drawerItem("help_center", "Help Center") /*.onPress(() => Navigator.of(context).pushNamed(HelpCenterPage.id))*/, drawerItem("help_center", context.translation.helpCenter) /*.onPress(() => Navigator.of(context).pushNamed(HelpCenterPage.id))*/,
18.height, 18.height,
drawerItem("rate_us", "Rate Us"), drawerItem("rate_us", context.translation.rateUs),
18.height, 18.height,
drawerItem("setting", "Settings").onPress(() => Navigator.of(context).pushNamed(SettingsPage.id)), drawerItem("setting", context.translation.settings).onPress(() => Navigator.of(context).pushNamed(SettingsPage.id)),
18.height, 18.height,
drawerItem("report", "Report a bug") /*.onPress(() => Navigator.of(context).pushNamed(ReportBugPage.id))*/, drawerItem("report", context.translation.reportBg) /*.onPress(() => Navigator.of(context).pushNamed(ReportBugPage.id))*/,
18.height, 18.height,
drawerItem("whats_new", "What's New"), drawerItem("whats_new", context.translation.whatsNew),
], ],
).expanded, ).expanded,
drawerItem("logout", "Logout", color: AppColor.red50).onPress(() async { drawerItem("logout", context.translation.logout, color: AppColor.red50).onPress(() async {
bool result = await showDialog( bool result = await showDialog(
context: context, context: context,
builder: (_) => AAlertDialog(title: context.translation.signOut, content: context.translation.logoutAlert), builder: (_) => AAlertDialog(title: context.translation.signOut, content: context.translation.logoutAlert),

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
@ -18,16 +19,16 @@ class RequestsFragment extends StatelessWidget {
padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16), padding: const EdgeInsets.only(left: 16, right: 16, bottom: 16),
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 191 / 237, crossAxisSpacing: 16, mainAxisSpacing: 16), gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 191 / 237, crossAxisSpacing: 16, mainAxisSpacing: 16),
children: [ children: [
gridItem("12", "high_priority", "High Priority\nRequests"), gridItem("12", "high_priority",context.translation.highPriorityRequests,context),
gridItem("12", "overdue", "Overdue\nRequests"), gridItem("12", "overdue", context.translation.overdueRequests,context),
gridItem("12", "new_request", "New\nRequests"), gridItem("12", "new_request", context.translation.newRequests,context),
gridItem("12", "complete_request", "Completed\nRequests"), gridItem("12", "complete_request", context.translation.completedRequests ,context),
], ],
), ),
); );
} }
Widget gridItem(String value, String icon, String title) { Widget gridItem(String value, String icon, String title, BuildContext context) {
return Container( return Container(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
decoration: ShapeDecoration( decoration: ShapeDecoration(
@ -66,7 +67,7 @@ class RequestsFragment extends StatelessWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
'View Details', context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
), ),
4.width, 4.width,

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_advanced_switch/flutter_advanced_switch.dart'; import 'package:flutter_advanced_switch/flutter_advanced_switch.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_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/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart';
@ -34,8 +35,8 @@ class _SettingsPageState extends State<SettingsPage> {
langController ??= ValueNotifier<bool>(_settingProvider.language == "ar") langController ??= ValueNotifier<bool>(_settingProvider.language == "ar")
..addListener(() async { ..addListener(() async {
/// TODO : uncomment the below lines to support the another language /// TODO : uncomment the below lines to support the another language
// await _settingProvider.setLanguage(_settingProvider.language == "ar" ? "en" : "ar"); await _settingProvider.setLanguage(_settingProvider.language == "ar" ? "en" : "ar");
// langController.value = _settingProvider.language == "ar"; langController.value = _settingProvider.language == "ar";
}); });
themeController ??= ValueNotifier<bool>(_settingProvider.theme == "light") themeController ??= ValueNotifier<bool>(_settingProvider.theme == "light")
..addListener(() async { ..addListener(() async {
@ -43,7 +44,7 @@ class _SettingsPageState extends State<SettingsPage> {
themeController.value = _settingProvider.theme == "light"; themeController.value = _settingProvider.theme == "light";
}); });
return Scaffold( return Scaffold(
appBar: const DefaultAppBar(title: "Settings"), appBar: DefaultAppBar(title: context.translation.settings),
body: Card( body: Card(
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
@ -51,7 +52,7 @@ class _SettingsPageState extends State<SettingsPage> {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
"Arabic".heading5(context), context.translation.arabic.heading5(context),
AdvancedSwitch( AdvancedSwitch(
controller: langController, controller: langController,
activeColor: AppColor.green50.withOpacity(0.5), activeColor: AppColor.green50.withOpacity(0.5),
@ -62,7 +63,7 @@ class _SettingsPageState extends State<SettingsPage> {
height: 24.toScreenHeight, height: 24.toScreenHeight,
/// TODO : remove the below attribute to enable the switch /// TODO : remove the below attribute to enable the switch
enabled: false, //enabled: false,
disabledOpacity: 1, disabledOpacity: 1,
), ),
], ],
@ -73,7 +74,7 @@ class _SettingsPageState extends State<SettingsPage> {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
"Light Theme".heading5(context), context.translation.lightTheme.heading5(context),
AdvancedSwitch( AdvancedSwitch(
controller: themeController, controller: themeController,
activeColor: AppColor.green50.withOpacity(0.5), activeColor: AppColor.green50.withOpacity(0.5),

@ -153,16 +153,17 @@ class _GasRefillDetailsPageState extends State<GasRefillDetailsPage> {
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
///TBD
Text( Text(
'Gas Request:', context.translation.gasRequest,
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
), ),
Text( Text(
'Cylinder Size: ${widget.model.gazRefillDetails[0].cylinderSize.value}', '${context.translation.cylinderSize}: ${widget.model.gazRefillDetails[0].cylinderSize.value}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
), ),
Text( Text(
'Site: ${widget.model.site.name}', '${context.translation.site}: ${widget.model.site.name}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
), ),
], ],
@ -174,11 +175,11 @@ class _GasRefillDetailsPageState extends State<GasRefillDetailsPage> {
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1), const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height, 8.height,
Text( Text(
'Request Quantity: ${widget.model.gazRefillDetails[0].requestedQty}', '${context.translation.requestedQuantity}: ${widget.model.gazRefillDetails[0].requestedQty}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
), ),
Text( Text(
'Delivered Quantity: ${widget.model.gazRefillDetails[0].deliverdQty}', '${context.translation.deliveredQuantity}: ${widget.model.gazRefillDetails[0].deliverdQty}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
), ),
8.height, 8.height,
@ -203,7 +204,7 @@ class _GasRefillDetailsPageState extends State<GasRefillDetailsPage> {
child: Row( child: Row(
children: [ children: [
Text( Text(
'Comment here...', '${context.translation.commentHere}...',
style: AppTextStyles.heading6.copyWith( style: AppTextStyles.heading6.copyWith(
color: AppColor.neutral50.withOpacity(.6), color: AppColor.neutral50.withOpacity(.6),
), ),
@ -222,7 +223,7 @@ class _GasRefillDetailsPageState extends State<GasRefillDetailsPage> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
'View Comments', '${context.translation.viewComments}',
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
), ),
4.width, 4.width,

@ -44,7 +44,7 @@ class _ProfilePageState extends State<ProfilePage> {
} }
return Scaffold( return Scaffold(
key: _scaffoldKey, key: _scaffoldKey,
appBar: const DefaultAppBar(title: "My Profile"), appBar: DefaultAppBar(title: context.translation.myProfile),
body: LoadingManager( body: LoadingManager(
isLoading: _userProvider.isLoading, isLoading: _userProvider.isLoading,
isFailedLoading: false, isFailedLoading: false,

@ -94,11 +94,11 @@ class _ServiceRequestDetailsPageState extends State<ServiceRequestDetailsPage> {
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
), ),
Text( Text(
'Request Type: ${widget.serviceRequest.type.name}', '${context.translation.requestType}: ${widget.serviceRequest.type.name}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
), ),
Text( Text(
'Request No: ${widget.serviceRequest.requestCode}', '${context.translation.requestNo}: ${widget.serviceRequest.requestCode}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
), ),
], ],
@ -107,7 +107,7 @@ class _ServiceRequestDetailsPageState extends State<ServiceRequestDetailsPage> {
crossAxisAlignment: CrossAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end,
children: [ children: [
if (_userProvider.user.type == UsersTypes.normal_user) if (_userProvider.user.type == UsersTypes.normal_user)
"edit".toSvgAsset(width: 48).onPress(() { context.translation.code.toSvgAsset(width: 48).onPress(() {
Navigator.push(context, MaterialPageRoute(builder: (context) => UpdateServiceRequestPage(serviceRequest: widget.serviceRequest))); Navigator.push(context, MaterialPageRoute(builder: (context) => UpdateServiceRequestPage(serviceRequest: widget.serviceRequest)));
}), }),
if (_userProvider.user.type == UsersTypes.engineer) 16.height, if (_userProvider.user.type == UsersTypes.engineer) 16.height,
@ -120,11 +120,11 @@ class _ServiceRequestDetailsPageState extends State<ServiceRequestDetailsPage> {
const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1), const Divider(color: Color(0xFFEAF1F4), height: 1, thickness: 1),
8.height, 8.height,
Text( Text(
'Manufacture: ${widget.serviceRequest.device.modelDefinition.manufacturerName}', '${context.translation.manufacture}: ${widget.serviceRequest.device.modelDefinition.manufacturerName}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
), ),
Text( Text(
'Model: ${widget.serviceRequest.device.modelDefinition.modelName}', '${context.translation.model}: ${widget.serviceRequest.device.modelDefinition.modelName}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
), ),
8.height, 8.height,
@ -166,7 +166,7 @@ class _ServiceRequestDetailsPageState extends State<ServiceRequestDetailsPage> {
child: Row( child: Row(
children: [ children: [
Text( Text(
'Comment here...', '${context.translation.viewComments}...',
style: AppTextStyles.heading6.copyWith( style: AppTextStyles.heading6.copyWith(
color: AppColor.neutral50.withOpacity(.6), color: AppColor.neutral50.withOpacity(.6),
), ),
@ -185,7 +185,7 @@ class _ServiceRequestDetailsPageState extends State<ServiceRequestDetailsPage> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
'View Comments', context.translation.viewComments,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
), ),
4.width, 4.width,

@ -67,7 +67,7 @@ class WorkOrderDetailsPage extends StatelessWidget {
Text('${context.translation.assetNumber}: ${workOrder.callRequest.asset.assetNumber ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), Text('${context.translation.assetNumber}: ${workOrder.callRequest.asset.assetNumber ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${context.translation.model}: ${workOrder.callRequest.asset.modelDefinition.modelName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), Text('${context.translation.model}: ${workOrder.callRequest.asset.modelDefinition.modelName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${context.translation.site}: ${workOrder.callRequest.asset.site.custName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), Text('${context.translation.site}: ${workOrder.callRequest.asset.site.custName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('${"Call last Situation"}: ${workOrder.calllastSituation.name ?? '' ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), Text('${context.translation.callLastSituation}: ${workOrder.calllastSituation.name ?? '' ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
], ],
).paddingAll(16), ).paddingAll(16),
), ),

@ -84,7 +84,7 @@ class WorkOrderListPage extends StatelessWidget {
], ],
).expanded, ).expanded,
if (_userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) if (_userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)
"edit".toSvgAsset(height: 48, width: 48).onPress(() { context.translation.edit.toSvgAsset(height: 48, width: 48).onPress(() {
Navigator.of(context).push( Navigator.of(context).push(
MaterialPageRoute(builder: (_) => UpdateServiceReport(request: serviceRequest, workOrder: workOrders[index])), MaterialPageRoute(builder: (_) => UpdateServiceReport(request: serviceRequest, workOrder: workOrders[index])),
); );
@ -117,7 +117,7 @@ class WorkOrderListPage extends StatelessWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
'View Details', context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
), ),
4.width, 4.width,

@ -64,15 +64,15 @@ class VisitDetailsPage extends StatelessWidget {
Text(visit.deviceEnglishName, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), Text(visit.deviceEnglishName, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
8.height, 8.height,
Text('${context.translation.assetNumber}: ${visit.deviceNumber}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), Text('${context.translation.assetNumber}: ${visit.deviceNumber}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('Asset Serial No.: ${visit.deviceSerialNumber}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), Text('${context.translation.assetSN}: ${visit.deviceSerialNumber}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('Code: ${visit.serialNumber}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), Text('${context.translation.code}: ${visit.serialNumber}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
const Divider().defaultStyle(context), const Divider().defaultStyle(context),
Text('Expected Date: ${visit.expectDate?.toServiceRequestDetailsFormat}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), Text('${context.translation.expectDate}: ${visit.expectDate?.toServiceRequestDetailsFormat}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('Actual Date: ${visit.actualDate?.toServiceRequestDetailsFormat}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), Text('${context.translation.actualDate}: ${visit.actualDate?.toServiceRequestDetailsFormat}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
const Divider().defaultStyle(context), const Divider().defaultStyle(context),
Text('Assigned to: ${visit.assignTo}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), Text('${context.translation.assignedTo}: ${visit.assignTo}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('Engineer Name: ${visit.employName}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), Text('${context.translation.engineerName}: ${visit.employName}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
Text('Site: ${visit.hospitalName}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), Text('${context.translation.site}: ${visit.hospitalName}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))),
], ],
).paddingAll(16), ).paddingAll(16),
), ),

@ -68,7 +68,7 @@ class DeviceTransferItem extends StatelessWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
'View Details', context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
), ),
4.width, 4.width,

@ -1,5 +1,6 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
class AAlertDialog extends StatelessWidget { class AAlertDialog extends StatelessWidget {
final String title; final String title;
@ -16,14 +17,14 @@ class AAlertDialog extends StatelessWidget {
actions: <Widget>[ actions: <Widget>[
TextButton( TextButton(
// child: Text(_subtitle.confirm), // child: Text(_subtitle.confirm),
child: const Text("Confirm"), child: Text(context.translation.confirm),
onPressed: () { onPressed: () {
Navigator.of(context).pop(true); Navigator.of(context).pop(true);
}, },
), ),
TextButton( TextButton(
// child: Text(_subtitle.cancel), // child: Text(_subtitle.cancel),
child: const Text("Cancel"), child: Text(context.translation.cancel),
onPressed: () { onPressed: () {
Navigator.of(context).pop(false); Navigator.of(context).pop(false);
}, },

@ -74,7 +74,7 @@ class AssetItemListView extends StatelessWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
'View Details', context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
), ),
4.width, 4.width,

@ -125,7 +125,7 @@ class _SingleDevicePickerState extends State<SingleDevicePicker> {
})), })),
16.width, 16.width,
Text( Text(
'Filter', context.translation.filter,
style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)), style: AppTextStyles.bodyText2.copyWith(color: const Color(0xFF4A8DB7)),
).onPress(() async { ).onPress(() async {
final result = await Navigator.push(context, MaterialPageRoute(builder: (context) => AssetFilterScreen(data: _searchAsset))); final result = await Navigator.push(context, MaterialPageRoute(builder: (context) => AssetFilterScreen(data: _searchAsset)));

@ -54,7 +54,7 @@ class GasRefillItem extends StatelessWidget {
8.height, 8.height,
Text(context.translation.gasRefillRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), Text(context.translation.gasRefillRequest, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
Text( Text(
'Gas Type: ${item.gazRefillDetails[0].gasType.name}', '${context.translation.gasType}: ${item.gazRefillDetails[0].gasType.name}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
), ),
Text( Text(
@ -66,7 +66,7 @@ class GasRefillItem extends StatelessWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
'View Details', context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
), ),
4.width, 4.width,

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
class FailedLoading extends StatelessWidget { class FailedLoading extends StatelessWidget {
@ -14,7 +15,7 @@ class FailedLoading extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Text( Text(
message ?? "Error Request Failed", message ?? context.translation.httpError,
style: Theme.of(context).textTheme.subtitle1, style: Theme.of(context).textTheme.subtitle1,
textScaleFactor: AppStyle.getScaleFactor(context), textScaleFactor: AppStyle.getScaleFactor(context),
), ),
@ -22,7 +23,7 @@ class FailedLoading extends StatelessWidget {
height: 16, height: 16,
), ),
OutlinedButton( OutlinedButton(
child: Text("try again"), child: Text(context.translation.tryAgain),
onPressed: onReload, onPressed: onReload,
) )
], ],

@ -31,7 +31,7 @@ class _PentryCalibrationToolFormState extends State<PentryCalibrationToolForm> {
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index == widget.models.length) { if (index == widget.models.length) {
return AppFilledButton( return AppFilledButton(
label: "Add Asset", label: context.translation.addAsset,
maxWidth: true, maxWidth: true,
textColor: Colors.white, textColor: Colors.white,
buttonColor: context.isDark ? AppColor.neutral60 : AppColor.neutral50, buttonColor: context.isDark ? AppColor.neutral60 : AppColor.neutral50,
@ -56,7 +56,7 @@ class _PentryCalibrationToolFormState extends State<PentryCalibrationToolForm> {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
"Asset ${index + 1}".heading5(context), "${context.translation.asset} ${index + 1}".heading5(context),
"trash".toSvgAsset(height: 20, width: 15).onPress(() { "trash".toSvgAsset(height: 20, width: 15).onPress(() {
widget.models.remove(model); widget.models.remove(model);
setState(() {}); setState(() {});
@ -73,7 +73,7 @@ class _PentryCalibrationToolFormState extends State<PentryCalibrationToolForm> {
), ),
8.height, 8.height,
ADatePicker( ADatePicker(
label: "Calibration Date", label: context.translation.calibrationDate,
date: model.dataOfTesting, date: model.dataOfTesting,
onDatePicker: (date) { onDatePicker: (date) {
model.dataOfTesting = date; model.dataOfTesting = date;

@ -36,7 +36,7 @@ class _PentryPMKitFormState extends State<PentryPMKitForm> {
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index == widget.models.length) { if (index == widget.models.length) {
return AppFilledButton( return AppFilledButton(
label: "Add Item", label: context.translation.addItem,
maxWidth: true, maxWidth: true,
textColor: Colors.white, textColor: Colors.white,
buttonColor: context.isDark ? AppColor.neutral60 : AppColor.neutral50, buttonColor: context.isDark ? AppColor.neutral60 : AppColor.neutral50,
@ -62,7 +62,7 @@ class _PentryPMKitFormState extends State<PentryPMKitForm> {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
"Item ${index + 1}".heading5(context), "${context.translation.item} ${index + 1}".heading5(context),
"trash".toSvgAsset(width: 15, height: 20).onPress(() { "trash".toSvgAsset(width: 15, height: 20).onPress(() {
widget.models.remove(model); widget.models.remove(model);
setState(() {}); setState(() {});

@ -30,13 +30,13 @@ class _PentryPMChecklistFormState extends State<PentryPMChecklistForm> {
child: ExpansionTile( child: ExpansionTile(
shape: const Border(), shape: const Border(),
title: (model.title ?? "").heading5(context), title: (model.title ?? "").heading5(context),
subtitle: "Status ${model.status?.name}".bodyText(context), subtitle: "${context.translation.status} ${model.status?.name}".bodyText(context),
initiallyExpanded: index == 0, initiallyExpanded: index == 0,
iconColor: AppColor.neutral50, iconColor: AppColor.neutral50,
collapsedIconColor: AppColor.neutral50, collapsedIconColor: AppColor.neutral50,
childrenPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), childrenPadding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight),
children: [ children: [
AppTextFormField(labelText: "Measured Value", initialValue: model.measuredValue, enable: false), AppTextFormField(labelText: context.translation.measuredValue, initialValue: model.measuredValue, enable: false),
8.height, 8.height,
AppTextFormField(labelText: context.translation.comment, initialValue: model.comment, enable: false), AppTextFormField(labelText: context.translation.comment, initialValue: model.comment, enable: false),
8.height, 8.height,

@ -41,7 +41,7 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
SingleItemDropDownMenu<Lookup, PPMVisitStatusProvider>( SingleItemDropDownMenu<Lookup, PPMVisitStatusProvider>(
context: context, context: context,
initialValue: widget.model.ppmVisitStatus, initialValue: widget.model.ppmVisitStatus,
title: "PPM Visit Status", title: context.translation.ppmVisit,
onSelect: (value) { onSelect: (value) {
if (value != null) { if (value != null) {
widget.model.ppmVisitStatus = value; widget.model.ppmVisitStatus = value;
@ -50,6 +50,7 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
), ),
8.height, 8.height,
AppTimer( AppTimer(
label: context.translation.timer,
timer: widget.model.timer, timer: widget.model.timer,
enabled: widget.model.timer.endAt == null, enabled: widget.model.timer.endAt == null,
onChange: (timer) async { onChange: (timer) async {
@ -61,7 +62,7 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
SingleItemDropDownMenu<Lookup, PPMDeviceStatusProvider>( SingleItemDropDownMenu<Lookup, PPMDeviceStatusProvider>(
context: context, context: context,
initialValue: widget.model.status, initialValue: widget.model.status,
title: "Device Status", title: context.translation.deviceStatus,
onSelect: (value) { onSelect: (value) {
if (value != null) { if (value != null) {
widget.model.status = value; widget.model.status = value;
@ -70,7 +71,7 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
), ),
8.height, 8.height,
ADatePicker( ADatePicker(
label: "Actual Visit Date", label: context.translation.actualVisitDate,
date: widget.model.actualVisitDate, date: widget.model.actualVisitDate,
from: DateTime.now().subtract(const Duration(days: 30)), from: DateTime.now().subtract(const Duration(days: 30)),
onDatePicker: (date) { onDatePicker: (date) {
@ -81,7 +82,7 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
), ),
8.height, 8.height,
ADatePicker( ADatePicker(
label: "Expected Visit Date", label: context.translation.expectedVisitDate,
date: widget.model.expectedVisitDate, date: widget.model.expectedVisitDate,
from: DateTime.now().subtract(const Duration(days: 30)), from: DateTime.now().subtract(const Duration(days: 30)),
onDatePicker: (date) { onDatePicker: (date) {
@ -105,7 +106,7 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
// }, // },
// ), // ),
8.height, 8.height,
MultiFilesPicker(label: "Attach Image", files: widget.model.files), MultiFilesPicker(label: context.translation.attachImage, files: widget.model.files),
// AMiniOneFilePicker( // AMiniOneFilePicker(
// //error: _validate && _serviceReport.image == null, // //error: _validate && _serviceReport.image == null,
// file: widget.model.file, // file: widget.model.file,
@ -115,7 +116,7 @@ class _PentryTBSFormState extends State<PentryTBSForm> {
// ), // ),
8.height, 8.height,
ESignature( ESignature(
title: "Nurse Signature", title: context.translation.nurseSignature,
oldSignature: widget.model.signatureNurse, oldSignature: widget.model.signatureNurse,
newSignature: widget.model.localNurseSignature, newSignature: widget.model.localNurseSignature,
onChange: (signature) { onChange: (signature) {

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/app_style/sizing.dart';
@ -14,8 +15,13 @@ class StatusLabel extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (id == 82) label = "High Priority"; if (id == 82) label = context.translation.highPriority;
if (id == 81) label = "Low Priority"; if (id == 81) label = context.translation.lowPriority;
if (label.toLowerCase() == 'In progress'.toLowerCase()) label = context.translation.inProgress;
if (label.toLowerCase() == 'Complete'.toLowerCase()) label = context.translation.completed;
if (label.toLowerCase() == 'Open'.toLowerCase()) label = context.translation.open;
if (label.toLowerCase() == 'Closed'.toLowerCase()) label = context.translation.closed;
if (label.toLowerCase() == 'Waiting for quotation'.toLowerCase()) label = context.translation.waitingForQuotation;
print("label:$label:$id"); print("label:$label:$id");
return Container( return Container(
@ -26,7 +32,7 @@ class StatusLabel extends StatelessWidget {
borderRadius: BorderRadius.circular(50), borderRadius: BorderRadius.circular(50),
), ),
), ),
child: Text(label.toUpperCase(), style: AppTextStyles.overline.copyWith(color: textColor)), child: Text(label, style: AppTextStyles.overline.copyWith(color: textColor)),
); );
} }

@ -70,11 +70,11 @@ class ServiceRequestItem extends StatelessWidget {
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
), ),
Text( Text(
'Request Type: ${request.type.name}', '${context.translation.requestType}: ${request.type.name}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
), ),
Text( Text(
'Request No: ${request.requestCode}', '${context.translation.requestNo}: ${request.requestCode}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
), ),
8.height, 8.height,
@ -82,7 +82,7 @@ class ServiceRequestItem extends StatelessWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
'View Details', context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
), ),
4.width, 4.width,

@ -61,11 +61,11 @@ class VisitItem extends StatelessWidget {
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)),
), ),
Text( Text(
'Asset Serial No.: ${visit.deviceSerialNumber}', '${context.translation.assetSN}: ${visit.deviceSerialNumber}',
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)),
), ),
Text( Text(
'Code: ${visit.serialNumber}', '${context.translation.code}: ${visit.serialNumber}',
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)),
), ),
16.height, 16.height,
@ -73,7 +73,7 @@ class VisitItem extends StatelessWidget {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
'View Details', context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)),
), ),
4.width, 4.width,
@ -88,7 +88,7 @@ class VisitItem extends StatelessWidget {
Column( Column(
children: [ children: [
if (userProvider.user.type == UsersTypes.engineer && visit.status.value != 5 && visit.status.value != 3) if (userProvider.user.type == UsersTypes.engineer && visit.status.value != 5 && visit.status.value != 3)
"edit".toSvgAsset(height: 48, width: 48).onPress(() { context.translation.edit.toSvgAsset(height: 48, width: 48).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => EditPentry(visit: visit, pentry: visit.pentry))); Navigator.of(context).push(MaterialPageRoute(builder: (_) => EditPentry(visit: visit, pentry: visit.pentry)));
}), }),
Text(visit.createdOn != null ? visit.createdOn.toServiceRequestCardFormat : "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))), Text(visit.createdOn != null ? visit.createdOn.toServiceRequestCardFormat : "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))),

Loading…
Cancel
Save