improvements

pull/1/head
Sikander Saleem 3 years ago
parent 8f05983c14
commit 4d70fe2c36

@ -2,6 +2,7 @@ import 'dart:convert';
import 'dart:developer'; import 'dart:developer';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:http/http.dart'; import 'package:http/http.dart';
@ -51,9 +52,12 @@ class ApiManager {
headers.addAll(_headers); headers.addAll(_headers);
Uri _url = Uri.parse(url); Uri _url = Uri.parse(url);
// print(_url); if (!kReleaseMode) {
// print(headers); print("URL:$_url");
// log(json.encode(body)); print("Headers:$headers");
print("Body:$body");
}
var request = http.Request('POST', _url); var request = http.Request('POST', _url);
request.body = json.encode(body); request.body = json.encode(body);
request.headers.addAll(headers); request.headers.addAll(headers);

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart'; import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/localization/localization.dart';
@ -114,9 +115,16 @@ class _LoginState extends State<Login> {
host: _settingProvider.host, host: _settingProvider.host,
); );
if (status >= 200 && status < 300) { if (status >= 200 && status < 300) {
_settingProvider.setUser(_userProvider.user); if(_userProvider.user.isAuthenticated ?? false) {
_settingProvider.setUser(_userProvider.user);
Navigator.of(context).pushNamed(LandPage.id);
} else {
Fluttertoast.showToast(msg: _userProvider.user.message);
}
// if (_userProvider.user.isActive) // if (_userProvider.user.isActive)
Navigator.of(context).pushNamed(LandPage.id);
// else // else
// Fluttertoast.showToast(msg: _subtitle.activationAlert); // Fluttertoast.showToast(msg: _subtitle.activationAlert);
} else { } else {

@ -7,6 +7,8 @@ import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_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/controllers/providers/api/status_drop_down/report/service_types_provider.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'; import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/service_report.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/search_work_order.dart';
@ -33,6 +35,7 @@ import '../../widgets/titles/app_sub_title.dart';
class CreateSubWorkOrderPage extends StatefulWidget { class CreateSubWorkOrderPage extends StatefulWidget {
static const id = "/CreateSubWorkOrder"; static const id = "/CreateSubWorkOrder";
final SearchWorkOrder workOrder; final SearchWorkOrder workOrder;
const CreateSubWorkOrderPage({this.workOrder, Key key}) : super(key: key); const CreateSubWorkOrderPage({this.workOrder, Key key}) : super(key: key);
@override @override
@ -57,286 +60,299 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
supplier: null, supplier: null,
); );
_serviceReport = ServiceReport(id: widget.workOrder.id, type: widget.workOrder.assetType, equipmentStatus: widget.workOrder.equipmentStatus); _serviceReport = ServiceReport(id: widget.workOrder.id, type: widget.workOrder.assetType, equipmentStatus: widget.workOrder.equipmentStatus);
_isLoading = true;
super.initState(); super.initState();
} }
var assetTypesProvider;
CallRequestForWorkOrder _callRequestForWorkOrder;
Future getAssetType() async { Future getAssetType() async {
//if (assetTypesProvider == null) {
Provider.of<ServiceRequestFaultDescriptionProvider>(context, listen: false).reset(); Provider.of<ServiceRequestFaultDescriptionProvider>(context, listen: false).reset();
final assetTypesProvider = Provider.of<ServiceStatusProvider>(context, listen: false); assetTypesProvider = Provider.of<ServiceStatusProvider>(context, listen: false);
_callRequestForWorkOrder = await Provider.of<ServiceRequestsProvider>(context).getCallRequestForWorkOrder(callId: widget.workOrder.callRequest.id.toString());
await assetTypesProvider.getTypes(); await assetTypesProvider.getTypes();
_subWorkOrders?.assetType = assetTypesProvider.statuses?.firstWhere( _subWorkOrders?.assetType = assetTypesProvider.statuses?.firstWhere(
(element) => element.value == widget.workOrder?.callRequest?.assetType, (element) => element.value == _callRequestForWorkOrder.assetType,
orElse: () => null, orElse: () => null,
); );
setState(() {
_isLoading = false;
});
//}
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (_callRequestForWorkOrder == null) {
getAssetType();
}
final Subtitle subtitle = AppLocalization.of(context).subtitle; final Subtitle subtitle = AppLocalization.of(context).subtitle;
return Scaffold( return Scaffold(
body: SafeArea( body: SafeArea(
child: FutureBuilder( child: _isLoading
future: getAssetType(), ? const ALoading()
builder: (context, snap) => snap.connectionState == ConnectionState.waiting : Column(
? const ALoading() children: [
: SingleChildScrollView( SingleChildScrollView(
child: Form( child: Form(
key: _formKey, key: _formKey,
child: Column( child: Column(
children: [ children: [
Container( Container(
color: AColors.primaryColor, color: AColors.primaryColor,
padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4),
child: Column( child: Column(
children: [ children: [
Row( Row(
children: [ children: [
const ABackButton(), const ABackButton(),
Expanded( Expanded(
child: Center( child: Center(
child: Text( child: Text(
"New Work Order", "New Work Order",
style: Theme.of(context).textTheme.titleLarge.copyWith(color: AColors.white, fontStyle: FontStyle.italic), style: Theme.of(context).textTheme.titleLarge.copyWith(color: AColors.white, fontStyle: FontStyle.italic),
),
), ),
), ),
), const SizedBox(
const SizedBox( width: 48,
width: 48, )
) ],
], ),
), ],
], ),
), ),
), Padding(
Padding( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16),
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16), child: Column(
child: Column( children: [
children: [ WorkOrderDetails(item: widget.workOrder, assetType: _subWorkOrders?.assetType),
WorkOrderDetails( const SizedBox(height: 8),
item: widget.workOrder, Column(
), crossAxisAlignment: CrossAxisAlignment.start,
const SizedBox(height: 8), children: [
Column( const ASubTitle("Equipment status"),
crossAxisAlignment: CrossAxisAlignment.start, if (_validate && _subWorkOrders?.equipmentStatus == null)
children: [ ASubTitle(
const ASubTitle("Equipment status"), subtitle.requiredWord,
if (_validate && _subWorkOrders?.equipmentStatus == null) color: Colors.red,
ASubTitle( ),
subtitle.requiredWord, const SizedBox(
color: Colors.red, height: 4,
), ),
const SizedBox( ServiceRequestDefectTypesMenu(
height: 4, initialValue: _serviceReport.equipmentStatus,
), onSelect: (status) {
ServiceRequestDefectTypesMenu( _subWorkOrders.equipmentStatus = status;
initialValue: _serviceReport.equipmentStatus, _serviceReport.equipmentStatus = status;
onSelect: (status) { setState(() {});
_subWorkOrders.equipmentStatus = status; },
_serviceReport.equipmentStatus = status;
setState(() {});
},
),
],
),
const SizedBox(height: 8),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const ASubTitle("Return to Service"),
if (_validate && _subWorkOrders.visitDate == null)
ASubTitle(
subtitle.requiredWord,
color: Colors.red,
), ),
const SizedBox( ],
height: 4, ),
), const SizedBox(height: 8),
Row( Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
Expanded( children: [
child: ADatePicker( const ASubTitle("Return to Service"),
date: DateTime.tryParse(_subWorkOrders.visitDate ?? ""), if (_validate && _subWorkOrders.visitDate == null)
from: DateTime(1950), ASubTitle(
onDatePicker: (date) { subtitle.requiredWord,
_subWorkOrders.visitDate = date?.toIso8601String(); color: Colors.red,
setState(() {});
},
),
), ),
], const SizedBox(
), height: 4,
],
),
const SizedBox(height: 8),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ASubTitle("Failure ${subtitle.reasons}"),
if (_validate && _subWorkOrders.reason == null)
ASubTitle(
subtitle.requiredWord,
color: Colors.red,
), ),
const SizedBox( Row(
height: 4,
),
ServiceReportReasonsMenu(
initialValue: _serviceReportReason,
onSelect: (status) {
_serviceReportReason = status;
_subWorkOrders.reason = status;
setState(() {});
},
),
],
),
const SizedBox(height: 8),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ASubTitle(subtitle.faultDescription),
if (_validate && _subWorkOrders.faultDescription == null)
ASubTitle(
subtitle.requiredWord,
color: Colors.red,
),
const SizedBox(
height: 4,
),
ServiceReportFaultDescription(
requestId: widget.workOrder?.callRequest?.id?.toString(),
initialValue: _subWorkOrders?.faultDescription,
onSelect: (status) {
_subWorkOrders.faultDescription = status;
setState(() {});
},
),
],
),
const SizedBox(height: 8),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const ASubTitle("Solution"),
const SizedBox(height: 4),
ATextFormField(labelText: _subWorkOrders?.faultDescription?.workPerformed ?? "", textInputType: TextInputType.multiline, enable: false),
],
),
const SizedBox(height: 8),
InkWell(
onTap: () async {
await showModalBottomSheet(
context: context,
useSafeArea: true,
isScrollControlled: true,
backgroundColor: Colors.transparent,
builder: (context) => WorkOrderDetailsBottomSheet(subWorkOrder: _subWorkOrders),
);
log(_subWorkOrders?.toJson()?.toString());
},
child: Card(
child: ListTile(
title: Row(
children: [ children: [
Text( Expanded(
"WO Details", child: ADatePicker(
style: Theme.of(context).textTheme.bodyMedium, date: DateTime.tryParse(_subWorkOrders.visitDate ?? ""),
from: DateTime(1950),
onDatePicker: (date) {
_subWorkOrders.visitDate = date?.toIso8601String();
setState(() {});
},
),
), ),
const Text("*", style: TextStyle(color: Colors.red)),
], ],
), ),
trailing: const Icon(Icons.arrow_forward_ios, size: 14, color: AColors.primaryColor), ],
),
const SizedBox(height: 8),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ASubTitle("Failure ${subtitle.reasons}"),
if (_validate && _subWorkOrders.reason == null)
ASubTitle(
subtitle.requiredWord,
color: Colors.red,
),
const SizedBox(
height: 4,
),
ServiceReportReasonsMenu(
initialValue: _serviceReportReason,
onSelect: (status) {
_serviceReportReason = status;
_subWorkOrders.reason = status;
setState(() {});
},
),
],
),
const SizedBox(height: 8),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ASubTitle(subtitle.faultDescription),
if (_validate && _subWorkOrders.faultDescription == null)
ASubTitle(
subtitle.requiredWord,
color: Colors.red,
),
const SizedBox(
height: 4,
),
ServiceReportFaultDescription(
requestId: widget.workOrder?.callRequest?.id?.toString(),
initialValue: _subWorkOrders?.faultDescription,
onSelect: (status) {
_subWorkOrders.faultDescription = status;
if(mounted)
setState(() {});
},
),
],
),
const SizedBox(height: 8),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const ASubTitle("Solution"),
const SizedBox(height: 4),
ATextFormField(labelText: _subWorkOrders?.faultDescription?.workPerformed ?? "", textInputType: TextInputType.multiline, enable: false),
],
),
const SizedBox(height: 8),
InkWell(
onTap: () async {
await showModalBottomSheet(
context: context,
useSafeArea: true,
isScrollControlled: true,
backgroundColor: Colors.transparent,
builder: (context) => WorkOrderDetailsBottomSheet(subWorkOrder: _subWorkOrders),
);
log(_subWorkOrders?.toJson()?.toString());
},
child: Card(
child: ListTile(
title: Row(
children: [
Text(
"WO Details",
style: Theme.of(context).textTheme.bodyMedium,
),
const Text("*", style: TextStyle(color: Colors.red)),
],
),
trailing: const Icon(Icons.arrow_forward_ios, size: 14, color: AColors.primaryColor),
),
), ),
), ),
), const SizedBox(height: 8),
const SizedBox(height: 8), InkWell(
InkWell( onTap: () async {
onTap: () async { await showModalBottomSheet(
await showModalBottomSheet( context: context,
context: context, useSafeArea: true,
useSafeArea: true, isScrollControlled: true,
isScrollControlled: true, backgroundColor: Colors.transparent,
backgroundColor: Colors.transparent, builder: (context) => SparePartsBottomSheet(subWorkOrder: _subWorkOrders),
builder: (context) => SparePartsBottomSheet(subWorkOrder: _subWorkOrders), );
); log(_subWorkOrders?.toJson()?.toString());
log(_subWorkOrders?.toJson()?.toString()); },
}, child: Card(
child: Card( child: ListTile(
child: ListTile( title: Row(
title: Row( children: [
children: [ Text(
Text( "Spare Parts",
"Spare Parts", style: Theme.of(context).textTheme.bodyMedium,
style: Theme.of(context).textTheme.bodyMedium, ),
), const Text("*", style: TextStyle(color: Colors.red)),
const Text("*", style: TextStyle(color: Colors.red)), ],
], ),
trailing: const Icon(Icons.arrow_forward_ios, size: 14, color: AColors.primaryColor),
), ),
trailing: const Icon(Icons.arrow_forward_ios, size: 14, color: AColors.primaryColor),
), ),
), ),
), const SizedBox(height: 8),
const SizedBox(height: 8), AMiniOneImagePicker(
AMiniOneImagePicker( image: _image,
image: _image, onPick: (image) {
onPick: (image) { _image = image;
_image = image; _subWorkOrders.attachmentsWorkOrder ??= [];
_subWorkOrders.attachmentsWorkOrder ??= []; _subWorkOrders.attachmentsWorkOrder.add(AttachmentsWorkOrder(name: "${image.path.split("/").last}|${base64Encode(image.readAsBytesSync())}"));
_subWorkOrders.attachmentsWorkOrder.add(AttachmentsWorkOrder(name: "${image.path.split("/").last}|${base64Encode(image.readAsBytesSync())}")); },
}, ),
), const SizedBox(height: 50),
const SizedBox(height: 50), ],
], ),
), ),
), ],
], ),
),
).expanded,
Padding(
padding: const EdgeInsets.all(16.0),
child: AButton(
text: subtitle.create,
onPressed: () async {
_subWorkOrders.parentWOId = widget.workOrder.id;
_validate = true;
setState(() {});
if (validate()) {
if (_subWorkOrders.startofWorkTime == null) {
Fluttertoast.showToast(msg: "${subtitle.startDate} required");
return;
} else if (_subWorkOrders.endofWorkTime == null) {
Fluttertoast.showToast(msg: "${subtitle.endDate} required");
return;
} else if (_subWorkOrders.calllastSituation == null) {
Fluttertoast.showToast(msg: "${subtitle.callLastSituation} required");
return;
}
_validate = false;
_isLoading = true;
setState(() {});
if (_formKey.currentState?.validate() ?? false) {}
_formKey.currentState?.save();
final serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false);
final status = await serviceRequestsProvider.createSubWorkOrder(workOrder: _subWorkOrders);
_isLoading = false;
setState(() {});
if (status >= 200 && status < 300) {
Fluttertoast.showToast(msg: subtitle.requestCompleteSuccessfully);
Navigator.of(context).pop();
Navigator.of(context).pop();
} else {
String errorMessage = HttpStatusManger.getStatusMessage(status: serviceRequestsProvider.stateCode, subtitle: subtitle);
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(errorMessage),
));
}
}
},
), ),
), ),
), ],
), ),
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
floatingActionButton: Padding(
padding: const EdgeInsets.all(16.0),
child: AButton(
text: subtitle.create,
onPressed: () async {
_subWorkOrders.parentWOId = widget.workOrder.id;
_validate = true;
setState(() {});
if (validate()) {
if (_subWorkOrders.startofWorkTime == null) {
Fluttertoast.showToast(msg: "${subtitle.startDate} required");
return;
} else if (_subWorkOrders.endofWorkTime == null) {
Fluttertoast.showToast(msg: "${subtitle.endDate} required");
return;
} else if (_subWorkOrders.calllastSituation == null) {
Fluttertoast.showToast(msg: "${subtitle.callLastSituation} required");
return;
}
_validate = false;
_isLoading = true;
setState(() {});
if (_formKey.currentState?.validate() ?? false) {}
_formKey.currentState?.save();
final serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context, listen: false);
final status = await serviceRequestsProvider.createSubWorkOrder(workOrder: _subWorkOrders);
_isLoading = false;
setState(() {});
if (status >= 200 && status < 300) {
Fluttertoast.showToast(msg: subtitle.requestCompleteSuccessfully);
Navigator.of(context).pop();
Navigator.of(context).pop();
} else {
String errorMessage = HttpStatusManger.getStatusMessage(status: serviceRequestsProvider.stateCode, subtitle: subtitle);
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(errorMessage),
));
}
}
},
),
), ),
); );
} }

@ -9,6 +9,7 @@ import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/pages/sub_workorder/workorder_list.dart'; import 'package:test_sa/views/pages/sub_workorder/workorder_list.dart';
import 'package:test_sa/views/widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart';
import 'package:test_sa/views/widgets/hospitals/hospital_auto_complete_field_new.dart';
import '../../../controllers/api_routes/http_status_manger.dart'; import '../../../controllers/api_routes/http_status_manger.dart';
import '../../../controllers/localization/localization.dart'; import '../../../controllers/localization/localization.dart';
@ -133,10 +134,13 @@ class _SearchSubWorkOrderPageState extends State<SearchSubWorkOrderPage> {
woId: _searchWorkOrders.id?.toString(), woId: _searchWorkOrders.id?.toString(),
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
ATextFormField( HospitalAutoCompleteField(
labelText: "Site", initialValue:_site,
onSaved: (value) { onSearch: (value) {
_site = value; _site = value.name;
setState(() {
});
}, },
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
@ -194,7 +198,6 @@ class _SearchSubWorkOrderPageState extends State<SearchSubWorkOrderPage> {
_isLoading = false; _isLoading = false;
setState(() {}); setState(() {});
if (serviceRequestsProvider.stateCode >= 200 && serviceRequestsProvider.stateCode < 300) { if (serviceRequestsProvider.stateCode >= 200 && serviceRequestsProvider.stateCode < 300) {
Fluttertoast.showToast(msg: _subtitle.requestCompleteSuccessfully);
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:test_sa/models/lookup.dart';
import '../../../controllers/localization/localization.dart'; import '../../../controllers/localization/localization.dart';
import '../../../models/service_request/search_work_order.dart'; import '../../../models/service_request/search_work_order.dart';
@ -8,7 +9,9 @@ import '../../app_style/sizing.dart';
class WorkOrderDetails extends StatelessWidget { class WorkOrderDetails extends StatelessWidget {
final SearchWorkOrder item; final SearchWorkOrder item;
WorkOrderDetails({@required this.item,Key key}) : super(key: key); Lookup assetType;
WorkOrderDetails({@required this.item, this.assetType, Key key}) : super(key: key);
Subtitle _subtitle; Subtitle _subtitle;
@override @override
@ -30,15 +33,15 @@ class WorkOrderDetails extends StatelessWidget {
), ),
child: Column( child: Column(
children: [ children: [
_buildRow(_subtitle.callId, item.callRequest?.id?.toString()??"", context), _buildRow(_subtitle.callId, item.callRequest?.id?.toString() ?? "", context),
_buildRow(_subtitle.assetNumber, item.callRequest?.asset?.assetNumber??"", context), _buildRow(_subtitle.assetNumber, item.callRequest?.asset?.assetNumber ?? "", context),
_buildRow("WO No", item.workOrderNo, context), _buildRow("WO No", item.workOrderNo, context),
_buildRow(_subtitle.assetName, item.callRequest?.asset?.assetNumber??'', context), _buildRow(_subtitle.assetName, item.callRequest?.asset?.assetNumber ?? '', context),
_buildRow(_subtitle.department, item.callRequest?.asset?.department??'', context), _buildRow(_subtitle.department, item.callRequest?.asset?.department ?? '', context),
_buildRow(_subtitle.assetSN, item.callRequest?.asset?.assetSerialNo??'', context), _buildRow(_subtitle.assetSN, item.callRequest?.asset?.assetSerialNo ?? '', context),
_buildRow(_subtitle.model, item.callRequest?.asset?.modelDefinition?.modelName??"", context), _buildRow(_subtitle.model, item.callRequest?.asset?.modelDefinition?.modelName ?? "", context),
_buildRow("Manufacturer", item.callRequest?.asset?.modelDefinition?.manufacturerName??"", context), _buildRow("Manufacturer", item.callRequest?.asset?.modelDefinition?.manufacturerName ?? "", context),
_buildRow(_subtitle.site, item.callRequest?.asset?.site?.custName??"", context), _buildRow(_subtitle.site, item.callRequest?.asset?.site?.custName ?? "", context),
], ],
), ),
), ),
@ -53,16 +56,18 @@ class WorkOrderDetails extends StatelessWidget {
), ),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
), ),
child: _buildRow("Asset Type", item.assetType?.name??"", context),) child: _buildRow("Asset Type", assetType?.name ?? (item.assetType?.name ?? ""), context),
)
], ],
); );
} }
Widget _buildRow(String title, String value, BuildContext context){
Widget _buildRow(String title, String value, BuildContext context) {
return Row( return Row(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
Text( Text(
title+" : ", title + " : ",
style: Theme.of(context).textTheme.subtitle2.copyWith(fontWeight: FontWeight.bold), style: Theme.of(context).textTheme.subtitle2.copyWith(fontWeight: FontWeight.bold),
), ),
//if (item.clientName != null) //if (item.clientName != null)

@ -212,7 +212,7 @@ class _LandPageState extends State<LandPage> {
Navigator.of(context).pushNamed(TrackDeviceTransferPage.id); Navigator.of(context).pushNamed(TrackDeviceTransferPage.id);
}, },
), ),
// if (_userProvider?.user != null && _userProvider?.user?.type != UsersTypes.engineer) if (_userProvider?.user != null && _userProvider?.user?.type != UsersTypes.normal_user)
LandPageItem( LandPageItem(
text: "Search Work Order", text: "Search Work Order",
svgPath: "assets/images/sub_workorder_icon.svg", svgPath: "assets/images/sub_workorder_icon.svg",

Loading…
Cancel
Save