adding i18n to all other pages batch3

This commit is contained in:
Azmat-7860
2026-10-03 12:12:31 +05:30
parent 3fbeb606a8
commit cce6bb2ccb
16 changed files with 2037 additions and 201 deletions
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import '../../l10n/app_localizations.dart';
import '../../providers/token_manager.dart';
import 'Bookmarks_api_service.dart';
@@ -24,7 +25,8 @@ class _CreateEntityScreenState extends State<CreateEntityScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Create Bookmarks')),
appBar: AppBar(
title: Text(AppLocalizations.of(context)!.createBookmarks)),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16),
@@ -70,11 +72,14 @@ class _CreateEntityScreenState extends State<CreateEntityScreen> {
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text('Failed to create entity: $e'),
title: Text(AppLocalizations.of(context)!
.error),
content: Text(AppLocalizations.of(context)!
.failedCreateEntity(e.toString())),
actions: [
TextButton(
child: const Text('OK'),
child: Text(AppLocalizations.of(context)!
.ok),
onPressed: () {
Navigator.of(context).pop();
},
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import '../../Utils/image_constant.dart';
import '../../Utils/size_utils.dart';
import '../../l10n/app_localizations.dart';
import '../../providers/token_manager.dart';
import '../../theme/app_decoration.dart';
import '../../theme/app_style.dart';
@@ -46,11 +47,12 @@ class _bookmarks_entity_list_screenState
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text('Failed to fetch entities: $e'),
title: Text(AppLocalizations.of(context)!.error),
content: Text(AppLocalizations.of(context)!
.failedFetchEntities(e.toString())),
actions: [
TextButton(
child: const Text('OK'),
child: Text(AppLocalizations.of(context)!.ok),
onPressed: () {
Navigator.of(context).pop();
},
@@ -74,11 +76,12 @@ class _bookmarks_entity_list_screenState
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text('Failed to delete entity: $e'),
title: Text(AppLocalizations.of(context)!.error),
content: Text(AppLocalizations.of(context)!
.deleteEntityFailed(e.toString())),
actions: [
TextButton(
child: const Text('OK'),
child: Text(AppLocalizations.of(context)!.ok),
onPressed: () {
Navigator.of(context).pop();
},
@@ -105,10 +108,12 @@ class _bookmarks_entity_list_screenState
Navigator.pop(context);
}),
centerTitle: true,
title: AppbarTitle(text: "Bookmarks")),
title: AppbarTitle(
text: AppLocalizations.of(context)!.bookmarksTitle)),
body: entities.isEmpty
? const Center(
child: Text('No BookMarks found.'),
? Center(
child: Text(
AppLocalizations.of(context)!.noBookmarks),
)
: Container(
width: double.maxFinite,
@@ -315,8 +320,9 @@ class _bookmarks_entity_list_screenState
})
: Container(
height: MediaQuery.of(context).size.height,
child: const Center(
child: Text("No Databases available"),
child: Center(
child: Text(AppLocalizations.of(context)!
.noDatabases),
)),
)
]))
@@ -422,11 +428,12 @@ class _bookmarks_entity_list_screenState
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text('Failed to launch URL: $e'),
title: Text(AppLocalizations.of(context)!.error),
content: Text(AppLocalizations.of(context)!
.failedLaunchUrl(e.toString())),
actions: [
TextButton(
child: const Text('OK'),
child: Text(AppLocalizations.of(context)!.ok),
onPressed: () {
Navigator.of(context).pop();
},
@@ -519,7 +526,8 @@ class _bookmarks_entity_list_screenState
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Additional Fields'),
title: Text(
AppLocalizations.of(context)!.additionalFields),
content: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
@@ -535,7 +543,7 @@ class _bookmarks_entity_list_screenState
),
actions: [
TextButton(
child: const Text('Close'),
child: Text(AppLocalizations.of(context)!.close),
onPressed: () {
Navigator.of(context).pop();
},
@@ -3,6 +3,7 @@ import 'dart:math';
import 'package:flutter/services.dart';
import '../../l10n/app_localizations.dart';
import '../../providers/token_manager.dart';
import 'Bookmarks_api_service.dart';
@@ -27,7 +28,8 @@ class _UpdateEntityScreenState extends State<UpdateEntityScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Update Bookmarks')),
appBar: AppBar(
title: Text(AppLocalizations.of(context)!.updateBookmarks)),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16),
@@ -41,7 +43,8 @@ class _UpdateEntityScreenState extends State<UpdateEntityScreen> {
const InputDecoration(labelText: 'bookmark_firstletter'),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter a bookmark_firstletter';
return AppLocalizations.of(context)!.pleaseEnterThis(
'bookmark_firstletter');
}
return null;
},
@@ -55,7 +58,8 @@ class _UpdateEntityScreenState extends State<UpdateEntityScreen> {
decoration: const InputDecoration(labelText: 'bookmark_link'),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter a bookmark_link';
return AppLocalizations.of(context)!.pleaseEnterThis(
'bookmark_link');
}
return null;
},
@@ -70,7 +74,8 @@ class _UpdateEntityScreenState extends State<UpdateEntityScreen> {
const InputDecoration(labelText: 'fileupload_field'),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter a fileupload_field';
return AppLocalizations.of(context)!.pleaseEnterThis(
'fileupload_field');
}
return null;
},
@@ -99,11 +104,14 @@ class _UpdateEntityScreenState extends State<UpdateEntityScreen> {
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text('Failed to update entity: $e'),
title: Text(AppLocalizations.of(context)!
.error),
content: Text(AppLocalizations.of(context)!
.failedUpdateEntity(e.toString())),
actions: [
TextButton(
child: const Text('OK'),
child: Text(AppLocalizations.of(context)!
.ok),
onPressed: () {
Navigator.of(context).pop();
},
+24 -12
View File
@@ -7,6 +7,7 @@ import 'dart:convert';
import '../../Utils/image_constant.dart';
import '../../Utils/size_utils.dart';
import '../../l10n/app_localizations.dart';
import '../../providers/token_manager.dart';
import '../../resources/api_constants.dart';
import '../../theme/app_style.dart';
@@ -95,17 +96,21 @@ class _RaisedTicketScreenState extends State<RaisedTicketScreen> {
)
],
centerTitle: true,
title: AppbarTitle(text: "Raised Tickets")),
title: AppbarTitle(
text: AppLocalizations.of(context)!.raisedTickets)),
body: ListView.builder(
itemCount: tickets.length,
itemBuilder: (context, index) {
final ticket = tickets[index];
return ListTile(
title: Text(
'Ticket ID: ${ticket['ticketid']}',
AppLocalizations.of(context)!
.ticketIdRow(ticket['ticketid'].toString()),
style: const TextStyle(fontSize: 12),
),
subtitle: Text('Ticket Name: ${ticket['ticketname']}',
subtitle: Text(
AppLocalizations.of(context)!
.ticketNameRow(ticket['ticketname'].toString()),
style: const TextStyle(fontSize: 10)),
// Add more fields as needed
);
@@ -210,7 +215,9 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
Navigator.pop(context);
}),
centerTitle: true,
title: AppbarTitle(text: "Raise a Ticket")),
title: AppbarTitle(
text:
AppLocalizations.of(context)!.raiseTicket)),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
@@ -221,13 +228,14 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text("Title",
Text(AppLocalizations.of(context)!.ticketTitle,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroyMedium16Bluegray900),
CustomTextFormField(
focusNode: FocusNode(),
hintText: "Enter Title",
hintText: AppLocalizations.of(context)!
.enterTicketTitle,
controller: titleController,
margin: getMargin(top: 6))
])),
@@ -237,13 +245,16 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text("Description",
Text(
AppLocalizations.of(context)!
.ticketDescription,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroyMedium16Bluegray900),
CustomTextFormField(
focusNode: FocusNode(),
hintText: "Enter Description",
hintText: AppLocalizations.of(context)!
.enterTicketDescription,
controller: descriptionController,
margin: getMargin(top: 6))
])),
@@ -253,19 +264,20 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text("Project Name",
Text(AppLocalizations.of(context)!.projectName,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroyMedium16Bluegray900),
CustomTextFormField(
focusNode: FocusNode(),
hintText: "Enter Project Name",
hintText: AppLocalizations.of(context)!
.enterProjectName,
controller: projectNameController,
margin: getMargin(top: 6))
])), // Adjusted the spacing
Row(
children: <Widget>[
Text('Pick Screenshot of issue'),
Text(AppLocalizations.of(context)!.pickScreenshot),
IconButton(
onPressed: () {
_pickImage(); // Call the function to pick an image
@@ -279,7 +291,7 @@ class _TicketFormScreenState extends State<TicketFormScreen> {
),
CustomButton(
height: getVerticalSize(50),
text: "Submit",
text: AppLocalizations.of(context)!.submit,
margin: getMargin(top: 24, bottom: 5),
onTap: () async {
submitTicket(screenshot);
@@ -1,6 +1,8 @@
import 'package:flutter/material.dart';
import 'dart:convert';
import '../../l10n/app_localizations.dart';
// class ReportEditor extends StatefulWidget {
// @override
// _ReportEditorState createState() => _ReportEditorState();
@@ -687,7 +689,8 @@ class _ReportEditorState extends State<ReportEditor> {
await pdfFile.writeAsBytes(pdfBytes);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('PDF saved to ${pdfFile.path}'),
content: Text(AppLocalizations.of(context)!
.pdfSaved(pdfFile.path)),
),
);
}
@@ -696,7 +699,8 @@ class _ReportEditorState extends State<ReportEditor> {
Widget build(BuildContext context) {
return Scaffold(
key: _scaffoldKey,
appBar: AppBar(title: Text('Report Editor')),
appBar: AppBar(
title: Text(AppLocalizations.of(context)!.reportEditor)),
body: Row(
children: <Widget>[
Container(
@@ -705,21 +709,27 @@ class _ReportEditorState extends State<ReportEditor> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Drag and Drop Fields:'),
Text(AppLocalizations.of(context)!.dragDropFields),
Draggable<String>(
data: 'Title',
child: DragField(text: 'Title'),
feedback: DragField(text: 'Title'),
child: DragField(
text: AppLocalizations.of(context)!.dragTitle),
feedback: DragField(
text: AppLocalizations.of(context)!.dragTitle),
),
Draggable<String>(
data: 'Phone Number',
child: DragField(text: 'Phone Number'),
feedback: DragField(text: 'Phone Number'),
child: DragField(
text: AppLocalizations.of(context)!.dragPhone),
feedback: DragField(
text: AppLocalizations.of(context)!.dragPhone),
),
Draggable<String>(
data: 'Date',
child: DragField(text: 'Date'),
feedback: DragField(text: 'Date'),
child: DragField(
text: AppLocalizations.of(context)!.dragDate),
feedback: DragField(
text: AppLocalizations.of(context)!.dragDate),
),
],
),
@@ -743,7 +753,8 @@ class _ReportEditorState extends State<ReportEditor> {
),
Align(
alignment: Alignment.bottomRight,
child: Text('Scale Bar Report Editor'),
child: Text(AppLocalizations.of(context)!
.scaleBarTitle),
),
...droppedFields.asMap().entries.map((entry) {
final index = entry.key;
@@ -924,14 +935,17 @@ class _EditableFieldState extends State<EditableField> {
children: [
TextFormField(
controller: keyController,
decoration: InputDecoration(labelText: 'Key'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!.keyLabel),
onChanged: (value) {
widget.onEdit(value, valueController.text);
},
),
TextFormField(
controller: valueController,
decoration: InputDecoration(labelText: 'Value'),
decoration: InputDecoration(
labelText:
AppLocalizations.of(context)!.valueLabel),
onChanged: (value) {
widget.onEdit(keyController.text, value);
},
@@ -955,7 +969,8 @@ class DraggableTarget extends StatelessWidget {
child: DragTarget<String>(
builder: (context, candidateData, rejectedData) {
return Center(
child: Text('Drop Here', style: TextStyle(fontSize: 24)),
child: Text(AppLocalizations.of(context)!.dropHere,
style: TextStyle(fontSize: 24)),
);
},
onAccept: (String field) {
+31 -8
View File
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import '../../Utils/image_constant.dart';
import '../../Utils/size_utils.dart';
import '../../l10n/app_localizations.dart';
import '../../widgets/app_bar/appbar_image.dart';
import '../../widgets/app_bar/appbar_title.dart';
import '../../widgets/app_bar/custom_app_bar.dart';
@@ -24,20 +25,42 @@ class SetupScreen extends StatelessWidget {
Navigator.pop(context);
}),
centerTitle: true,
title: AppbarTitle(text: "Setup Screen")),
title: AppbarTitle(
text: AppLocalizations.of(context)!.setupScreen)),
body: SingleChildScrollView(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
buildSetupBlock(context, 'User Maintenance', SysParameter()),
buildSetupBlock(context, 'User Group Maintenance', SysParameter()),
buildSetupBlock(context, 'Menu Maintenance', SysParameter()),
buildSetupBlock(context, 'Menu Access', SysParameter()),
buildSetupBlock(context, 'System Parameter', SysParameter()),
buildSetupBlock(context, 'Access Type', SysParameter()),
buildSetupBlock(
context,
AppLocalizations.of(context)!.userMaintenance,
SysParameter()),
buildSetupBlock(
context,
AppLocalizations.of(context)!.userGroupMaintenance,
SysParameter()),
buildSetupBlock(
context,
AppLocalizations.of(context)!.menuMaintenance,
SysParameter()),
buildSetupBlock(
context,
AppLocalizations.of(context)!.menuAccess,
SysParameter()),
buildSetupBlock(
context,
AppLocalizations.of(context)!.sysParamTitle,
SysParameter()),
buildSetupBlock(
context,
AppLocalizations.of(context)!.accessType,
SysParameter()),
// buildSetupBlock(context, 'Report', ReportPage()),
buildSetupBlock(context, 'Dashboard', SysParameter()),
buildSetupBlock(
context,
AppLocalizations.of(context)!.dashboardMenu,
SysParameter()),
],
),
),
@@ -5,6 +5,7 @@ import 'package:image_picker/image_picker.dart';
import '../../Utils/image_constant.dart';
import '../../Utils/size_utils.dart';
import '../../l10n/app_localizations.dart';
import '../../providers/token_manager.dart';
import '../../theme/app_style.dart';
import '../../widgets/app_bar/appbar_image.dart';
@@ -139,11 +140,12 @@ class _SysParameterState extends State<SysParameter> {
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text('Please select an image.'),
title: Text(AppLocalizations.of(context)!.error),
content: Text(
AppLocalizations.of(context)!.selectImage),
actions: [
TextButton(
child: const Text('OK'),
child: Text(AppLocalizations.of(context)!.ok),
onPressed: () {
Navigator.of(context).pop();
},
@@ -171,11 +173,12 @@ class _SysParameterState extends State<SysParameter> {
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text('Failed to upload image: $e'),
title: Text(AppLocalizations.of(context)!.error),
content: Text(AppLocalizations.of(context)!
.failedUploadImage(e.toString())),
actions: [
TextButton(
child: const Text('OK'),
child: Text(AppLocalizations.of(context)!.ok),
onPressed: () {
Navigator.of(context).pop();
},
@@ -201,8 +204,9 @@ class _SysParameterState extends State<SysParameter> {
onTap: () {
Navigator.pop(context);
}),
centerTitle: true,
title: AppbarTitle(text: "System Parameter")),
centerTitle: true,
title: AppbarTitle(
text: AppLocalizations.of(context)!.sysParamTitle)),
body: Material(child:SingleChildScrollView( // Wrap the form in a SingleChildScrollView
scrollDirection: Axis.vertical, // Allow vertical scrolling
child:Padding(
@@ -211,131 +215,159 @@ class _SysParameterState extends State<SysParameter> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
_buildFieldWithTooltip(
fieldName: 'Scheduler Timer',
fieldName: AppLocalizations.of(context)!.schedulerTimer,
controller: schedulerTimerController,
tooltip: 'Tooltip for Scheduler Timer',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.schedulerTimer),
),
_buildFieldWithTooltip(
fieldName: 'Lease Tax Code',
fieldName: AppLocalizations.of(context)!.leaseTaxCode,
controller: leaseTaxCodeController,
tooltip: 'Tooltip for Lease Tax Code',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.leaseTaxCode),
),
_buildFieldWithTooltip(
fieldName: 'Vessel Confirmation Process Limit',
fieldName:
AppLocalizations.of(context)!.vesselConfProcessLimit,
controller: vesselConfirmationController,
tooltip: 'Tooltip for Vessel Confirmation Process Limit',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.vesselConfProcessLimit),
),
_buildFieldWithTooltip(
fieldName: 'Row To Display',
fieldName: AppLocalizations.of(context)!.rowToDisplay,
controller: rowToDisplayController,
tooltip: 'Tooltip for Row To Display',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.rowToDisplay),
),
_buildFieldWithTooltip(
fieldName: 'Link To Display',
fieldName: AppLocalizations.of(context)!.linkToDisplay,
controller: linkToDisplayController,
tooltip: 'Tooltip for Link To Display',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.linkToDisplay),
),
_buildFieldWithTooltip(
fieldName: 'Row To Add',
fieldName: AppLocalizations.of(context)!.rowToAdd,
controller: rowToAddController,
tooltip: 'Tooltip for Row To Add',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.rowToAdd),
),
_buildFieldWithTooltip(
fieldName: 'LOV Row To Display',
fieldName: AppLocalizations.of(context)!.lovRowToDisplay,
controller: lovRowToDisplayController,
tooltip: 'Tooltip for LOV Row To Display',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.lovRowToDisplay),
),
_buildFieldWithTooltip(
fieldName: 'LOV Link To Display',
fieldName: AppLocalizations.of(context)!.lovLinkToDisplay,
controller: lovLinkToDisplayController,
tooltip: 'Tooltip for LOV Link To Display',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.lovLinkToDisplay),
),
_buildFieldWithTooltip(
fieldName: 'OID Server Name',
fieldName: AppLocalizations.of(context)!.oidServerName,
controller: oidServerNameController,
tooltip: 'Tooltip for OID Server Name',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.oidServerName),
),
_buildFieldWithTooltip(
fieldName: 'OID Base',
fieldName: AppLocalizations.of(context)!.oidBase,
controller: oidBaseController,
tooltip: 'Tooltip for OID Base',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.oidBase),
),
_buildFieldWithTooltip(
fieldName: 'OID Admin User',
fieldName: AppLocalizations.of(context)!.oidAdminUser,
controller: oidAdminUserController,
tooltip: 'Tooltip for OID Admin User',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.oidAdminUser),
),
_buildFieldWithTooltip(
fieldName: 'OID Server Port',
fieldName: AppLocalizations.of(context)!.oidServerPort,
controller: oidServerPortController,
tooltip: 'Tooltip for OID Server Port',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.oidServerPort),
),
_buildFieldWithTooltip(
fieldName: 'User Default Group',
fieldName: AppLocalizations.of(context)!.userDefaultGroup,
controller: userDefaultGroupController,
tooltip: 'Tooltip for User Default Group',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.userDefaultGroup),
),
_buildFieldWithTooltip(
fieldName: 'Default Department',
fieldName: AppLocalizations.of(context)!.defaultDepartment,
controller: defaultDepartmentController,
tooltip: 'Tooltip for Default Department',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.defaultDepartment),
),
_buildFieldWithTooltip(
fieldName: 'Default Position',
fieldName: AppLocalizations.of(context)!.defaultPosition,
controller: defaultPositionController,
tooltip: 'Tooltip for Default Position',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.defaultPosition),
),
_buildFieldWithTooltip(
fieldName: 'Single Charge',
fieldName: AppLocalizations.of(context)!.singleCharge,
controller: singleChargeController,
tooltip: 'Tooltip for Single Charge',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.singleCharge),
),
_buildFieldWithTooltip(
fieldName: 'First Day of The Week',
fieldName: AppLocalizations.of(context)!.firstDayOfWeek,
controller: firstDayOfWeekController,
tooltip: 'Tooltip for First Day of The Week',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.firstDayOfWeek),
),
_buildFieldWithTooltip(
fieldName: 'Hour per Shift',
fieldName: AppLocalizations.of(context)!.hourPerShift,
controller: hourPerShiftController,
tooltip: 'Tooltip for Hour per Shift',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.hourPerShift),
),
_buildFieldWithTooltip(
fieldName: 'CN Billing Frequency',
fieldName:
AppLocalizations.of(context)!.cnBillingFrequency,
controller: cnBillingFrequencyController,
tooltip: 'Tooltip for CN Billing Frequency',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.cnBillingFrequency),
),
_buildFieldWithTooltip(
fieldName: 'Billing Department Code',
fieldName:
AppLocalizations.of(context)!.billingDepartmentCode,
controller: billingDepartmentCodeController,
tooltip: 'Tooltip for Billing Department Code',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.billingDepartmentCode),
),
_buildFieldWithTooltip(
fieldName: 'Base Price List',
fieldName: AppLocalizations.of(context)!.basePriceList,
controller: basePriceListController,
tooltip: 'Tooltip for Base Price List',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.basePriceList),
),
_buildFieldWithTooltip(
fieldName: 'Non-Container Service Order Auto-Approval Department Code',
fieldName: AppLocalizations.of(context)!
.nonContainerServiceOrder,
controller: nonContainerServiceController,
tooltip: 'Tooltip for Non-Container Service Order Auto-Approval Department Code',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.nonContainerServiceOrder),
),
_buildFieldWithTooltip(
fieldName: 'EDI MAE Scheduler ON/OFF',
fieldName: AppLocalizations.of(context)!.ediMaeScheduler,
controller: ediMaeSchedulerController,
tooltip: 'Tooltip for EDI MAE Scheduler ON/OFF',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.ediMaeScheduler),
),
_buildFieldWithTooltip(
fieldName: 'EDI Scheduler ON/OFF',
fieldName: AppLocalizations.of(context)!.ediScheduler,
controller: ediSchedulerController,
tooltip: 'Tooltip for EDI Scheduler ON/OFF',
tooltip: AppLocalizations.of(context)!.tooltipFor(
AppLocalizations.of(context)!.ediScheduler),
),
_buildFieldWithTooltip(
fieldName: 'Company Name',
fieldName: AppLocalizations.of(context)!.companyName,
controller: companynameController,
tooltip: 'Company Name',
tooltip: AppLocalizations.of(context)!.companyName,
),
Text("Is Registration Allowed?",
Text(AppLocalizations.of(context)!.regAllowed,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
@@ -351,7 +383,7 @@ class _SysParameterState extends State<SysParameter> {
});
},
),
Text("Yes",
Text(AppLocalizations.of(context)!.yes,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
@@ -365,7 +397,7 @@ class _SysParameterState extends State<SysParameter> {
});
},
),
Text("No",
Text(AppLocalizations.of(context)!.no,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
@@ -381,12 +413,13 @@ class _SysParameterState extends State<SysParameter> {
backgroundColor: _imageBytes==null?MaterialStateProperty.all<Color>(Colors.red):MaterialStateProperty.all<Color>(Colors.green), // Change to the desired color
),
child: _imageBytes == null
? Text("Pick a Company Logo",
? Text(AppLocalizations.of(context)!.pickCompanyLogo,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
.txtGilroyMedium16Bluegray800)
: Text("Company Logo uploaded Successful",
: Text(
AppLocalizations.of(context)!.logoUploadSuccess,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
@@ -394,10 +427,10 @@ class _SysParameterState extends State<SysParameter> {
),
Tooltip(
message: 'Allow customer code for MSC taulia CSV generation',
message: AppLocalizations.of(context)!.mscTooltip,
child: Column(
children: [
Text("i",
Text(AppLocalizations.of(context)!.miscInfoLabel,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
@@ -420,7 +453,7 @@ class _SysParameterState extends State<SysParameter> {
CustomButton(
height: getVerticalSize(50),
text: "Save",
text: AppLocalizations.of(context)!.saveBtn,
margin: getMargin(top: 24, bottom: 5),
onTap: () async {
formData['regitrationAllowed'] = isRegistrationAllow;
@@ -469,12 +502,17 @@ class _SysParameterState extends State<SysParameter> {
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text(
'Failed to ${widget.sysparameter == null ? 'create' : 'update'} project: $e'),
title: Text(
AppLocalizations.of(context)!.error),
content: Text(widget.sysparameter == null
? AppLocalizations.of(context)!
.failedCreateProject(e.toString())
: AppLocalizations.of(context)!
.failedUpdateProject(e.toString())),
actions: [
TextButton(
child: const Text('OK'),
child: Text(
AppLocalizations.of(context)!.ok),
onPressed: () {
Navigator.of(context).pop();
},
+48 -21
View File
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import '../../l10n/app_localizations.dart';
import '../../providers/token_manager.dart';
import 'dynamic_form_service.dart';
@@ -49,7 +50,7 @@ class _EditFormState extends State<EditForm> {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Edit Form'),
title: Text(AppLocalizations.of(context)!.editForm),
),
body: SingleChildScrollView(
child: Padding(
@@ -58,16 +59,21 @@ class _EditFormState extends State<EditForm> {
children: [
TextFormField(
controller: formNameController,
decoration: InputDecoration(labelText: 'Form Name'),
decoration: InputDecoration(
labelText:
AppLocalizations.of(context)!.formName),
),
TextFormField(
controller: formDescController,
decoration: InputDecoration(labelText: 'Form Description'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!
.formDescription),
),
DropdownButtonFormField<String>(
value: relatedToController.text,
decoration:
const InputDecoration(labelText: 'Select Related To'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!
.selectRelatedTo),
items: [
...relatedToFixedDropdown.map<DropdownMenuItem<String>>(
(item) {
@@ -86,8 +92,9 @@ class _EditFormState extends State<EditForm> {
),
DropdownButtonFormField<String>(
value: pageEventController.text,
decoration:
const InputDecoration(labelText: 'Select Page Event'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!
.selectPageEvent),
items: [
...pageEventFixedDropdown.map<DropdownMenuItem<String>>(
(item) {
@@ -106,22 +113,41 @@ class _EditFormState extends State<EditForm> {
),
TextFormField(
controller: buttonCaptionController,
decoration: InputDecoration(labelText: 'Button Caption'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!
.buttonCaption),
),
const Text('Components Details'),
Text(AppLocalizations.of(context)!.componentsDetails),
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: DataTable(
columns: const <DataColumn>[
DataColumn(label: Text('Label')),
DataColumn(label: Text('Type')),
DataColumn(label: Text('Mapping')),
DataColumn(label: Text('Mandatory')),
DataColumn(label: Text('Readonly')),
DataColumn(label: Text('Drop Values')),
DataColumn(label: Text('SP')),
DataColumn(label: Text('Actions'), numeric: false), // Add Actions column
columns: <DataColumn>[
DataColumn(
label: Text(
AppLocalizations.of(context)!.colLabel)),
DataColumn(
label: Text(
AppLocalizations.of(context)!.colType)),
DataColumn(
label: Text(
AppLocalizations.of(context)!.colMapping)),
DataColumn(
label: Text(
AppLocalizations.of(context)!.colMandatory)),
DataColumn(
label: Text(
AppLocalizations.of(context)!.colReadonly)),
DataColumn(
label: Text(
AppLocalizations.of(context)!.colDropValues)),
DataColumn(
label: Text(
AppLocalizations.of(context)!.colSP)),
DataColumn(
label: Text(AppLocalizations.of(context)!
.colActions),
numeric: false), // Add Actions column
],
rows: components.asMap().entries.map((entry) {
final index = entry.key;
@@ -228,7 +254,8 @@ class _EditFormState extends State<EditForm> {
components.removeAt(index);
});
},
child: Text('Delete'),
child: Text(
AppLocalizations.of(context)!.delete),
),
),
],
@@ -250,7 +277,7 @@ class _EditFormState extends State<EditForm> {
});
setState(() {}); // Refresh the UI to show the new row
},
child: Text('Add Row'),
child: Text(AppLocalizations.of(context)!.addRow),
),
ElevatedButton(
@@ -266,7 +293,7 @@ class _EditFormState extends State<EditForm> {
apiService.updateDynamicForm(token!, widget.formData['form_id'], widget.formData);
Navigator.of(context).pop();
},
child: Text('Update'),
child: Text(AppLocalizations.of(context)!.update),
),
],
),
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import '../../Utils/image_constant.dart';
import '../../Utils/size_utils.dart';
import '../../l10n/app_localizations.dart';
import '../../providers/token_manager.dart';
import '../../theme/app_style.dart';
import '../../widgets/app_bar/appbar_image.dart';
@@ -51,7 +52,9 @@ class _CreateFormState extends State<CreateForm> {
Navigator.pop(context);
}),
centerTitle: true,
title: AppbarTitle(text: "Create Dynamic Form"),),
title: AppbarTitle(
text: AppLocalizations.of(context)!
.createDynamicForm),),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16.0),
@@ -63,14 +66,15 @@ class _CreateFormState extends State<CreateForm> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text("Form Name",
Text(AppLocalizations.of(context)!.formName,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
.txtGilroyMedium16Bluegray900),
CustomTextFormField(
focusNode: FocusNode(),
hintText: "Enter Form Name",
hintText: AppLocalizations.of(context)!
.enterFormName,
controller: formNameController,
margin: getMargin(top: 6))
])),
@@ -80,14 +84,17 @@ class _CreateFormState extends State<CreateForm> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text("Form Description",
Text(
AppLocalizations.of(context)!
.formDescription,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
.txtGilroyMedium16Bluegray900),
CustomTextFormField(
focusNode: FocusNode(),
hintText: "Enter Form Description",
hintText: AppLocalizations.of(context)!
.enterFormDescription,
controller: formDescController,
margin: getMargin(top: 6))
])),
@@ -99,7 +106,7 @@ class _CreateFormState extends State<CreateForm> {
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
"Select Related To",
AppLocalizations.of(context)!.selectRelatedTo,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroyMedium16Bluegray900,
@@ -132,7 +139,7 @@ class _CreateFormState extends State<CreateForm> {
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
"Select Page Event",
AppLocalizations.of(context)!.selectPageEvent,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle.txtGilroyMedium16Bluegray900,
@@ -163,29 +170,46 @@ class _CreateFormState extends State<CreateForm> {
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text("Button Caption",
Text(
AppLocalizations.of(context)!
.buttonCaption,
overflow: TextOverflow.ellipsis,
textAlign: TextAlign.left,
style: AppStyle
.txtGilroyMedium16Bluegray900),
CustomTextFormField(
focusNode: FocusNode(),
hintText: "Enter Button Caption",
hintText: AppLocalizations.of(context)!
.enterButtonCaption,
controller: buttonCaptionController,
margin: getMargin(top: 6))
])),
const Text('Components Details'),
Text(AppLocalizations.of(context)!.componentsDetails),
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: DataTable(
columns: const <DataColumn>[
DataColumn(label: Text('Label')),
DataColumn(label: Text('Type')),
DataColumn(label: Text('Mapping')),
DataColumn(label: Text('Mandatory')),
DataColumn(label: Text('Readonly')),
DataColumn(label: Text('Drop Values')),
DataColumn(label: Text('SP')),
columns: <DataColumn>[
DataColumn(
label: Text(
AppLocalizations.of(context)!.colLabel)),
DataColumn(
label: Text(
AppLocalizations.of(context)!.colType)),
DataColumn(
label: Text(
AppLocalizations.of(context)!.colMapping)),
DataColumn(
label: Text(
AppLocalizations.of(context)!.colMandatory)),
DataColumn(
label: Text(
AppLocalizations.of(context)!.colReadonly)),
DataColumn(
label: Text(
AppLocalizations.of(context)!.colDropValues)),
DataColumn(
label: Text(
AppLocalizations.of(context)!.colSP)),
],
rows: components.asMap().entries.map((entry) {
final index = entry.key;
@@ -201,8 +225,9 @@ class _CreateFormState extends State<CreateForm> {
)),
DataCell(
DropdownButtonFormField<String>(
decoration:
const InputDecoration(labelText: 'Select Type'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!
.selectType),
items: [
...typeFixedDropdown.map<DropdownMenuItem<String>>(
(item) {
@@ -223,8 +248,9 @@ class _CreateFormState extends State<CreateForm> {
),
DataCell(
DropdownButtonFormField<String>(
decoration:
const InputDecoration(labelText: 'Select Mapping'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!
.selectMapping),
items: [
...mappingFixedDropdown.map<DropdownMenuItem<String>>(
(item) {
@@ -251,8 +277,9 @@ class _CreateFormState extends State<CreateForm> {
)),
DataCell(
DropdownButtonFormField<String>(
decoration:
const InputDecoration(labelText: 'Select Read Only'),
decoration: InputDecoration(
labelText: AppLocalizations.of(context)!
.selectReadOnly),
items: [
...truefalseFixedDropdown.map<DropdownMenuItem<String>>(
(item) {
@@ -290,7 +317,7 @@ class _CreateFormState extends State<CreateForm> {
),
CustomButton(
height: getVerticalSize(50),
text: "Add Row",
text: AppLocalizations.of(context)!.addRow,
margin: getMargin(top: 24, bottom: 5),
onTap: () async {
components.add({
@@ -308,7 +335,7 @@ class _CreateFormState extends State<CreateForm> {
CustomButton(
height: getVerticalSize(50),
text: "Create Dynamic Form",
text: AppLocalizations.of(context)!.createDynamicForm,
margin: getMargin(top: 24, bottom: 5),
onTap: () async {
final dynamicFormData = {
@@ -3,6 +3,7 @@ import 'package:flutter/rendering.dart';
import '../../Utils/color_constants.dart';
import '../../Utils/image_constant.dart';
import '../../Utils/size_utils.dart';
import '../../l10n/app_localizations.dart';
import '../../providers/token_manager.dart';
import '../../widgets/app_bar/appbar_image.dart';
import '../../widgets/app_bar/appbar_title.dart';
@@ -58,11 +59,12 @@ class _DynamicFormState extends State<DynamicForm> {
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error'),
content: Text('Failed to delete entity: $e'),
title: Text(AppLocalizations.of(context)!.error),
content: Text(AppLocalizations.of(context)!
.deleteEntityFailed(e.toString())),
actions: [
TextButton(
child: const Text('OK'),
child: Text(AppLocalizations.of(context)!.ok),
onPressed: () {
Navigator.of(context).pop();
},
@@ -109,12 +111,15 @@ class _DynamicFormState extends State<DynamicForm> {
)
],
centerTitle: true,
title: AppbarTitle(text: "Dynamic Form")),
title: AppbarTitle(
text:
AppLocalizations.of(context)!.dynamicForm)),
body: isLoading == false
? const Center(child: CircularProgressIndicator())
: allData.isEmpty
? const Center(
child: Text('No Services available.'),
? Center(
child: Text(AppLocalizations.of(context)!
.noServices),
)
: Scrollable(
viewportBuilder:
@@ -125,13 +130,27 @@ class _DynamicFormState extends State<DynamicForm> {
scrollDirection: Axis.horizontal,
child: DataTable(
columns: [
DataColumn(label: Text('Form Name')),
DataColumn(label: Text('Form Description')),
DataColumn(label: Text('Related To')),
DataColumn(label: Text('Page Event')),
DataColumn(label: Text('Button Caption')),
DataColumn(label: Text('Build')),
DataColumn(label: Text('Actions')),
DataColumn(
label: Text(AppLocalizations.of(context)!
.formName)),
DataColumn(
label: Text(AppLocalizations.of(context)!
.formDescription)),
DataColumn(
label: Text(AppLocalizations.of(context)!
.relatedTo)),
DataColumn(
label: Text(AppLocalizations.of(context)!
.pageEvent)),
DataColumn(
label: Text(AppLocalizations.of(context)!
.buttonCaption)),
DataColumn(
label: Text(AppLocalizations.of(context)!
.buildCol)),
DataColumn(
label: Text(AppLocalizations.of(context)!
.colActions)),
],
rows: allData.map((module) {
return DataRow(
@@ -156,7 +175,9 @@ class _DynamicFormState extends State<DynamicForm> {
apiService.BuildForms(
token!, module['form_id']);
},
child: Text("build"),
child: Text(
AppLocalizations.of(context)!
.buildBtn),
style: ElevatedButton.styleFrom(
backgroundColor: ColorConstant.blue700,
),
@@ -184,19 +205,29 @@ class _DynamicFormState extends State<DynamicForm> {
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text(
'Confirm Deletion'),
content: const Text(
'Are you sure you want to delete this Module?'),
title: Text(
AppLocalizations.of(
context)!
.confirmDeletion),
content: Text(
AppLocalizations.of(
context)!
.deleteModuleConfirm),
actions: [
TextButton(
child: const Text('Cancel'),
child: Text(
AppLocalizations.of(
context)!
.cancel),
onPressed: () {
Navigator.of(context).pop();
},
),
TextButton(
child: const Text('Delete'),
child: Text(
AppLocalizations.of(
context)!
.delete),
onPressed: () {
Navigator.of(context).pop();
deleteEntity(module);