From d869f8202054f23f976396c17d41510c2fdec70d Mon Sep 17 00:00:00 2001 From: nextwo <1234> Date: Tue, 30 May 2023 15:47:40 +0300 Subject: [PATCH 1/7] implement searchWorkOrders api and edit on ui --- assets/subtitles/ar_subtitle.json | 9 +- assets/subtitles/en_subtitle.json | 8 + lib/controllers/api_routes/urls.dart | 1 + .../api/service_requests_provider.dart | 33 + .../service_request/search_work_order.dart | 584 ++++++++++++++++++ lib/models/subtitle.dart | 21 + .../pages/user/requests/request_details.dart | 216 +++++-- 7 files changed, 815 insertions(+), 57 deletions(-) create mode 100644 lib/models/service_request/search_work_order.dart diff --git a/assets/subtitles/ar_subtitle.json b/assets/subtitles/ar_subtitle.json index ada5f90..7a2aa1c 100644 --- a/assets/subtitles/ar_subtitle.json +++ b/assets/subtitles/ar_subtitle.json @@ -188,5 +188,12 @@ "alert": "تنبيه", "duplicateAlert": "تنبيه التكرار", "duplicateAlertMessage": "هل أنت متأكد أنك تريد تكرار الطلب؟", - "duplicateRequest": "تكرار الطلب" + "duplicateRequest": "تكرار الطلب", + "orderWorkNumber": "رقم طلب العمل", + "assignedEmployee": "الموظف المعين", + "assetSN": "رقم تسلسلي للاصل ", + "assetName": "اسم الاصل", + "site": "الموقع", + "maintenanceSituation": "موقع الصيانه", + "currentSituation": "الموقع الحالي" } \ No newline at end of file diff --git a/assets/subtitles/en_subtitle.json b/assets/subtitles/en_subtitle.json index 2ce29fb..df59102 100644 --- a/assets/subtitles/en_subtitle.json +++ b/assets/subtitles/en_subtitle.json @@ -184,9 +184,17 @@ "requiredWord": "required", "serviceType": "Service Type", "workPreformed": "Work Preformed", + "orderWorkNumber": "Order Work Number", + "assignedEmployee": "Assigned Employee", + "assetSN": "Asset S.N", + "assetName": "Asset Name", + "site": "Site", + "maintenanceSituation": "Maintenance Situation", + "currentSituation": "Current Situation", "alert": "Alert", "duplicateAlert": "Duplicate Alert", "duplicateAlertMessage": "Are you sure you want to duplicate request?", "duplicateRequest": "Duplicate Request" + } \ No newline at end of file diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 65c8935..5edeb3a 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -45,6 +45,7 @@ class URLs { static get updateServiceReport => "$_baseUrl/WorkOrder/UpdateWorkOrder"; // get static get getServiceReport => "$_baseUrl/WorkOrder/GetWorkOrderById"; // get static get createDuplicatedReport => "$_baseUrl/handle/duplicate/request"; // get + static get searchWorkOrders => "$_baseUrl/WorkOrder/SearchWorkOrders"; static get getServiceReportReasons => "$_baseUrl/Lookups/GetLookup?lookupEnum=522"; // get static get getServiceReportTypes => "$_baseUrl/Lookups/GetLookup?lookupEnum=501"; // get diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index 5906225..167087b 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -14,6 +14,8 @@ import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/models/user.dart'; +import '../../../models/service_request/search_work_order.dart'; + class ServiceRequestsProvider extends ChangeNotifier { // number of items call in each request final pageItemNumber = 10; @@ -35,6 +37,7 @@ class ServiceRequestsProvider extends ChangeNotifier { // list of user requests List serviceRequests; + List workOrders =[]; // when requests in-process _loading = true // done _loading = true @@ -245,6 +248,36 @@ class ServiceRequestsProvider extends ChangeNotifier { } } + Future> searchWorkOrders({@required String callId}) async { + + Response response; + + try{ + var body = { + "pageSize": pageItemNumber, + "pageNumber":( (workOrders?.length ?? 0) ~/ pageItemNumber) + 1, + "callId": callId, + }; + response = await ApiManager.instance.post(URLs.searchWorkOrders, body: body); + stateCode = response.statusCode; + if (response.statusCode >= 200 && response.statusCode < 300) { + // client's request was successfully received + List workOrdersJson = json.decode(response.body)["data"]; + print(workOrdersJson); + workOrders = workOrdersJson.map((request) => SearchWorkOrders.fromJson(request)).toList(); + if (workOrders.length == pageItemNumber) { + nextPage = true; + } else { + nextPage = false; + } + } + return workOrders; + + }catch(e){ + return []; + } + } + Future createDuplicatedReport({ @required String host, @required User user, diff --git a/lib/models/service_request/search_work_order.dart b/lib/models/service_request/search_work_order.dart new file mode 100644 index 0000000..ac58714 --- /dev/null +++ b/lib/models/service_request/search_work_order.dart @@ -0,0 +1,584 @@ +import 'package:test_sa/models/lookup.dart'; + +class SearchWorkOrders { + int id; + String parentWOId; + String workOrderNo; + int workOrderYear; + int workOrderSequennce; + CallRequest callRequest; + String assetType; + AssignedEmployee assignedEmployee; + String visitDate; + List assistantEmployees; + String supplier; + String vendorTicketNumber; + List contactPersonWorkOrders; + Lookup calllastSituation; + Lookup currentSituation; + String repairLocation; + String reason; + String startofWorkTime; + String endofWorkTime; + double workingHours; + String travelingHours; + String travelingExpenses; + ModelDefRelatedDefects faultDescription; + List sparePartsWorkOrders; + String reviewComment; + String comment; + String attachmentsWorkOrder; + String equipmentStatus; + List suppEngineerWorkOrders; + String engSignature; + String nurseSignature; + String woParentDto; + + SearchWorkOrders( + {this.id, + this.parentWOId, + this.workOrderNo, + this.workOrderYear, + this.workOrderSequennce, + this.callRequest, + this.assetType, + this.assignedEmployee, + this.visitDate, + this.assistantEmployees, + this.supplier, + this.vendorTicketNumber, + this.contactPersonWorkOrders, + this.calllastSituation, + this.currentSituation, + this.repairLocation, + this.reason, + this.startofWorkTime, + this.endofWorkTime, + this.workingHours, + this.travelingHours, + this.travelingExpenses, + this.faultDescription, + this.sparePartsWorkOrders, + this.reviewComment, + this.comment, + this.attachmentsWorkOrder, + this.equipmentStatus, + this.suppEngineerWorkOrders, + this.engSignature, + this.nurseSignature, + this.woParentDto}); + + SearchWorkOrders.fromJson(Map json) { + print(json['callRequest']); + id = json['id']; + parentWOId = json['parentWOId']; + workOrderNo = json['workOrderNo']; + workOrderYear = json['workOrderYear']; + workOrderSequennce = json['workOrderSequennce']; + callRequest = json['callRequest'] != null + ? new CallRequest.fromJson(json['callRequest']) + : CallRequest(); + assetType = json['assetType']; + assignedEmployee = json['assignedEmployee'] != null + ? new AssignedEmployee.fromJson(json['assignedEmployee']) + : AssignedEmployee(); + visitDate = json['visitDate']; + if (json['assistantEmployees'] != null) { + assistantEmployees = json['assistantEmployees']; + } + supplier = json['supplier']; + vendorTicketNumber = json['vendorTicketNumber']; + if (json['contactPersonWorkOrders'] != null) { + contactPersonWorkOrders = json['contactPersonWorkOrders']; + } + calllastSituation = json['calllastSituation'] != null + ? new Lookup.fromJson(json['calllastSituation']) + : Lookup(); + currentSituation = json['currentSituation'] != null + ? new Lookup.fromJson(json['currentSituation']) + : Lookup(); + repairLocation = json['repairLocation']; + reason = json['reason']; + startofWorkTime = json['startofWorkTime']; + endofWorkTime = json['endofWorkTime']; + workingHours = json['workingHours']; + travelingHours = json['travelingHours']; + travelingExpenses = json['travelingExpenses']; + faultDescription = json['faultDescription'] != null + ? new ModelDefRelatedDefects.fromJson(json['faultDescription']) + : ModelDefRelatedDefects(); + if (json['sparePartsWorkOrders'] != null) { + sparePartsWorkOrders = json['sparePartsWorkOrders']; + } + reviewComment = json['reviewComment']; + comment = json['comment']; + attachmentsWorkOrder = json['attachmentsWorkOrder']; + equipmentStatus = json['equipmentStatus']; + if (json['suppEngineerWorkOrders'] != null) { + suppEngineerWorkOrders = json['suppEngineerWorkOrders']; + } + engSignature = json['engSignature']; + nurseSignature = json['nurseSignature']; + woParentDto = json['woParentDto']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['parentWOId'] = this.parentWOId; + data['workOrderNo'] = this.workOrderNo; + data['workOrderYear'] = this.workOrderYear; + data['workOrderSequennce'] = this.workOrderSequennce; + if (this.callRequest != null) { + data['callRequest'] = this.callRequest.toJson(); + } + data['assetType'] = this.assetType; + if (this.assignedEmployee != null) { + data['assignedEmployee'] = this.assignedEmployee.toJson(); + } + data['visitDate'] = this.visitDate; + if (this.assistantEmployees != null) { + data['assistantEmployees'] = + this.assistantEmployees.map((v) => v.toJson()).toList(); + } + data['supplier'] = this.supplier; + data['vendorTicketNumber'] = this.vendorTicketNumber; + if (this.contactPersonWorkOrders != null) { + data['contactPersonWorkOrders'] = + this.contactPersonWorkOrders.map((v) => v.toJson()).toList(); + } + if (this.calllastSituation != null) { + data['calllastSituation'] = this.calllastSituation.toMap(); + } + if (this.currentSituation != null) { + data['currentSituation'] = this.currentSituation.toMap(); + } + data['repairLocation'] = this.repairLocation; + data['reason'] = this.reason; + data['startofWorkTime'] = this.startofWorkTime; + data['endofWorkTime'] = this.endofWorkTime; + data['workingHours'] = this.workingHours; + data['travelingHours'] = this.travelingHours; + data['travelingExpenses'] = this.travelingExpenses; + if (this.faultDescription != null) { + data['faultDescription'] = this.faultDescription.toJson(); + } + if (this.sparePartsWorkOrders != null) { + data['sparePartsWorkOrders'] = + this.sparePartsWorkOrders.map((v) => v.toJson()).toList(); + } + data['reviewComment'] = this.reviewComment; + data['comment'] = this.comment; + data['attachmentsWorkOrder'] = this.attachmentsWorkOrder; + data['equipmentStatus'] = this.equipmentStatus; + if (this.suppEngineerWorkOrders != null) { + data['suppEngineerWorkOrders'] = + this.suppEngineerWorkOrders.map((v) => v.toJson()).toList(); + } + data['engSignature'] = this.engSignature; + data['nurseSignature'] = this.nurseSignature; + data['woParentDto'] = this.woParentDto; + return data; + } +} + +class CallRequest { + int id; + String callNo; + Asset asset; + AssignedEmployee assignedEmployee; + List callSiteContactPerson; + Lookup status; + Lookup callLastSituation; + String defectType; + String firstAction; + String assetType; + + CallRequest( + {this.id, + this.callNo, + this.asset, + this.assignedEmployee, + this.callSiteContactPerson, + this.status, + this.callLastSituation, + this.defectType, + this.firstAction, + this.assetType}); + + CallRequest.fromJson(Map json) { + id = json['id']; + callNo = json['callNo']; + asset = json['asset'] != null ? new Asset.fromJson(json['asset']) : Asset(); + assignedEmployee = json['assignedEmployee'] != null + ? new AssignedEmployee.fromJson(json['assignedEmployee']) + : AssignedEmployee(); + if (json['callSiteContactPerson'] != null) { + callSiteContactPerson = json['callSiteContactPerson']; + } + status = + json['status'] != null ? new Lookup.fromJson(json['status']) : Lookup(); + callLastSituation = json['callLastSituation'] != null + ? new Lookup.fromJson(json['callLastSituation']) + : Lookup(); + defectType = json['defectType']; + firstAction = json['firstAction']; + assetType = json['assetType']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['callNo'] = this.callNo; + if (this.asset != null) { + data['asset'] = this.asset.toJson(); + } + if (this.assignedEmployee != null) { + data['assignedEmployee'] = this.assignedEmployee.toJson(); + } + if (this.callSiteContactPerson != null) { + data['callSiteContactPerson'] = + this.callSiteContactPerson.map((v) => v.toJson()).toList(); + } + if (this.status != null) { + data['status'] = this.status.toMap(); + } + if (this.callLastSituation != null) { + data['callLastSituation'] = this.callLastSituation.toMap(); + } + data['defectType'] = this.defectType; + data['firstAction'] = this.firstAction; + data['assetType'] = this.assetType; + return data; + } +} + +class Asset { + int id; + String assetSerialNo; + String systemID; + String assetNumber; + ModelDefinition modelDefinition; + String supplier; + String ipAddress; + String macAddress; + String portNumber; + String assetReplace; + String oldAsset; + String isParent; + String parentAsset; + String assetType; + Site site; + String building; + String floor; + String department; + String room; + String testsDay; + String purchasingPrice; + String nbv; + String currency; + String poNo; + String invoiceNumber; + String invoiceDate; + String replacementDate; + String originDepartment; + Site originSite; + String budgetYear; + String lastPOPrice; + String commissioningStatus; + String productionDate; + String edd; + String technicalInspectionDate; + String deliveryInspectionDate; + String endUserAcceptanceDate; + String receivingCommittee; + String siteWarrantyMonths; + String extendedWarrantyMonths; + String remainderWarrantyMonths; + String eomWarrantyMonthsNo; + String warrantyValue; + String warrantyEndDate; + String warrantyContractConditions; + List technicalGuidanceBooks; + String comment; + String tagCode; + + Asset( + {this.id, + this.assetSerialNo, + this.systemID, + this.assetNumber, + this.modelDefinition, + this.supplier, + this.ipAddress, + this.macAddress, + this.portNumber, + this.assetReplace, + this.oldAsset, + this.isParent, + this.parentAsset, + this.assetType, + this.site, + this.building, + this.floor, + this.department, + this.room, + this.testsDay, + this.purchasingPrice, + this.nbv, + this.currency, + this.poNo, + this.invoiceNumber, + this.invoiceDate, + this.replacementDate, + this.originDepartment, + this.originSite, + this.budgetYear, + this.lastPOPrice, + this.commissioningStatus, + this.productionDate, + this.edd, + this.technicalInspectionDate, + this.deliveryInspectionDate, + this.endUserAcceptanceDate, + this.receivingCommittee, + this.siteWarrantyMonths, + this.extendedWarrantyMonths, + this.remainderWarrantyMonths, + this.eomWarrantyMonthsNo, + this.warrantyValue, + this.warrantyEndDate, + this.warrantyContractConditions, + this.technicalGuidanceBooks, + this.comment, + this.tagCode}); + + Asset.fromJson(Map json) { + id = json['id']; + assetSerialNo = json['assetSerialNo']; + systemID = json['systemID']; + assetNumber = json['assetNumber']; + modelDefinition = json['modelDefinition'] != null + ? new ModelDefinition.fromJson(json['modelDefinition']) + : ModelDefinition(); + supplier = json['supplier']; + ipAddress = json['ipAddress']; + macAddress = json['macAddress']; + portNumber = json['portNumber']; + assetReplace = json['assetReplace']; + oldAsset = json['oldAsset']; + isParent = json['isParent']; + parentAsset = json['parentAsset']; + assetType = json['assetType']; + site = json['site'] != null ? new Site.fromJson(json['site']) : Site(); + building = json['building']; + floor = json['floor']; + department = json['department']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['assetSerialNo'] = this.assetSerialNo; + data['systemID'] = this.systemID; + data['assetNumber'] = this.assetNumber; + if (this.modelDefinition != null) { + data['modelDefinition'] = this.modelDefinition.toJson(); + } + data['supplier'] = this.supplier; + data['ipAddress'] = this.ipAddress; + data['macAddress'] = this.macAddress; + data['portNumber'] = this.portNumber; + data['assetReplace'] = this.assetReplace; + data['oldAsset'] = this.oldAsset; + data['isParent'] = this.isParent; + data['parentAsset'] = this.parentAsset; + data['assetType'] = this.assetType; + if (this.site != null) { + data['site'] = this.site.toJson(); + } + data['building'] = this.building; + data['floor'] = this.floor; + data['department'] = this.department; + data['room'] = this.room; + data['testsDay'] = this.testsDay; + data['purchasingPrice'] = this.purchasingPrice; + data['nbv'] = this.nbv; + data['currency'] = this.currency; + data['poNo'] = this.poNo; + data['invoiceNumber'] = this.invoiceNumber; + data['invoiceDate'] = this.invoiceDate; + data['replacementDate'] = this.replacementDate; + data['originDepartment'] = this.originDepartment; + if (this.originSite != null) { + data['originSite'] = this.originSite.toJson(); + } + data['budgetYear'] = this.budgetYear; + data['lastPOPrice'] = this.lastPOPrice; + data['commissioningStatus'] = this.commissioningStatus; + data['productionDate'] = this.productionDate; + data['edd'] = this.edd; + data['technicalInspectionDate'] = this.technicalInspectionDate; + data['deliveryInspectionDate'] = this.deliveryInspectionDate; + data['endUserAcceptanceDate'] = this.endUserAcceptanceDate; + data['receivingCommittee'] = this.receivingCommittee; + data['siteWarrantyMonths'] = this.siteWarrantyMonths; + data['extendedWarrantyMonths'] = this.extendedWarrantyMonths; + data['remainderWarrantyMonths'] = this.remainderWarrantyMonths; + data['eomWarrantyMonthsNo'] = this.eomWarrantyMonthsNo; + data['warrantyValue'] = this.warrantyValue; + data['warrantyEndDate'] = this.warrantyEndDate; + data['warrantyContractConditions'] = this.warrantyContractConditions; + if (this.technicalGuidanceBooks != null) { + data['technicalGuidanceBooks'] = + this.technicalGuidanceBooks.map((v) => v.toJson()).toList(); + } + data['comment'] = this.comment; + data['tagCode'] = this.tagCode; + return data; + } +} + +class ModelDefinition { + int id; + String assetName; + String modelDefCode; + String modelName; + int manufacturerId; + String manufacturerName; + String supplierName; + String replacementDate; + int lifeSpan; + List modelDefRelatedDefects; + List suppliers; + + ModelDefinition( + {this.id, + this.assetName, + this.modelDefCode, + this.modelName, + this.manufacturerId, + this.manufacturerName, + this.supplierName, + this.replacementDate, + this.lifeSpan, + this.modelDefRelatedDefects, + this.suppliers}); + + ModelDefinition.fromJson(Map json) { + id = json['id']; + assetName = json['assetName']; + modelDefCode = json['modelDefCode']; + modelName = json['modelName']; + manufacturerId = json['manufacturerId']; + manufacturerName = json['manufacturerName']; + supplierName = json['supplierName']; + replacementDate = json['replacementDate']; + lifeSpan = json['lifeSpan']; + if (json['modelDefRelatedDefects'] != null) { + modelDefRelatedDefects = []; + json['modelDefRelatedDefects'].forEach((v) { + modelDefRelatedDefects.add(new ModelDefRelatedDefects.fromJson(v)); + }); + } + if (json['suppliers'] != null) { + suppliers = json['suppliers']; + } + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['assetName'] = this.assetName; + data['modelDefCode'] = this.modelDefCode; + data['modelName'] = this.modelName; + data['manufacturerId'] = this.manufacturerId; + data['manufacturerName'] = this.manufacturerName; + data['supplierName'] = this.supplierName; + data['replacementDate'] = this.replacementDate; + data['lifeSpan'] = this.lifeSpan; + if (this.modelDefRelatedDefects != null) { + data['modelDefRelatedDefects'] = + this.modelDefRelatedDefects.map((v) => v.toJson()).toList(); + } + if (this.suppliers != null) { + data['suppliers'] = this.suppliers.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class ModelDefRelatedDefects { + String id; + String defectName; + String workPerformed; + String estimatedTime; + + ModelDefRelatedDefects( + {this.id, this.defectName, this.workPerformed, this.estimatedTime}); + + ModelDefRelatedDefects.fromJson(Map json) { + id = json['id']; + defectName = json['defectName']; + workPerformed = json['workPerformed']; + estimatedTime = json['estimatedTime']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['defectName'] = this.defectName; + data['workPerformed'] = this.workPerformed; + data['estimatedTime'] = this.estimatedTime; + return data; + } +} + +class Site { + int id; + int customerCode; + String custName; + List buildings; + + Site({this.id, this.customerCode, this.custName, this.buildings}); + + Site.fromJson(Map json) { + id = json['id']; + customerCode = json['customerCode']; + custName = json['custName']; + if (json['buildings'] != null) { + buildings = json['buildings']; + } + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['customerCode'] = this.customerCode; + data['custName'] = this.custName; + if (this.buildings != null) { + data['buildings'] = this.buildings.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class AssignedEmployee { + String id; + String name; + + AssignedEmployee({this.id, this.name}); + + AssignedEmployee.fromJson(Map json) { + id = json['id']; + name = json['name']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['name'] = this.name; + return data; + } +} + diff --git a/lib/models/subtitle.dart b/lib/models/subtitle.dart index a2f212c..4972251 100644 --- a/lib/models/subtitle.dart +++ b/lib/models/subtitle.dart @@ -209,6 +209,13 @@ class Subtitle{ String partNumber; String number; String quantity; + String orderWorkNumber; + String assignedEmployee; + String assetSN; + String assetName; + String site; + String maintenanceSituation; + String currentSituation; // all String duplicateRequest; @@ -407,6 +414,13 @@ class Subtitle{ @required this.duplicateAlert, @required this.duplicateAlertMessage, @required this.duplicateRequest, + @required this.orderWorkNumber, + @required this.assignedEmployee, + @required this.assetSN, + @required this.assetName, + @required this.site, + @required this.maintenanceSituation, + @required this.currentSituation, }); factory Subtitle.fromJson(Map parsedJson){ @@ -597,6 +611,13 @@ class Subtitle{ duplicateAlert: parsedJson["duplicateAlert"], duplicateAlertMessage: parsedJson["duplicateAlertMessage"], duplicateRequest: parsedJson["duplicateRequest"], + orderWorkNumber:parsedJson["orderWorkNumber"], + assignedEmployee:parsedJson["assignedEmployee"], + assetSN:parsedJson["assetSN"], + assetName:parsedJson["assetName"], + site:parsedJson["site"], + maintenanceSituation:parsedJson["maintenanceSituation"], + currentSituation:parsedJson["currentSituation"], ); } diff --git a/lib/views/pages/user/requests/request_details.dart b/lib/views/pages/user/requests/request_details.dart index d45692d..f33ab0c 100644 --- a/lib/views/pages/user/requests/request_details.dart +++ b/lib/views/pages/user/requests/request_details.dart @@ -23,6 +23,7 @@ import 'package:test_sa/views/widgets/requests/service_request_update_dialog.dar import 'package:test_sa/views/widgets/sound/sound_player.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; +import '../../../../models/service_request/search_work_order.dart'; import 'report/future_service_report.dart'; class RequestDetailsPage extends StatelessWidget { static final String id = "/call-details"; @@ -34,6 +35,7 @@ class RequestDetailsPage extends StatelessWidget { Subtitle _subtitle = AppLocalization.of(context).subtitle; UserProvider _userProvider = Provider.of(context); SettingProvider _settingProvider = Provider.of(context); + List workOrders=[]; ServiceRequestsProvider _serviceRequestsProvider = Provider.of(context); return DefaultTabController( length: 2, @@ -286,65 +288,102 @@ class RequestDetailsPage extends StatelessWidget { // ) ], ), - serviceRequest.viewReport ? - ListView( - padding: EdgeInsets.symmetric(horizontal: 16), - children: [ - RequestInfoRow( - title: _subtitle.faultDescription, - content: serviceRequest.faultDescription, - ), - RequestInfoRow( - title: _subtitle.workPerformed, - content: serviceRequest.workPerformed, - ), - RequestInfoRow( - title: _subtitle.visitDate, - info: serviceRequest.visitDate, - ), - RequestInfoRow( - title: _subtitle.jobSheetNumber, - info: serviceRequest.jobSheetNumber, - ), - _userProvider.user.type == UsersTypes.engineer - && serviceRequest.reportID != null? - Padding( - padding: EdgeInsets.all(32), - child: AButton( - text: _subtitle.editServiceReport, - onPressed: (){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => FutureServiceReport( - request: serviceRequest, - ) - ), + // workOrders.isEmpty ? + FutureBuilder( + future: _serviceRequestsProvider.searchWorkOrders(callId:serviceRequest.requestCode), + builder: (context, snap){ + print("${workOrders?.length}"); + workOrders= snap.data as List; + print("${workOrders?.length}"); + if(snap.connectionState==ConnectionState.done && snap.data.length != 0) + return ListView.builder( + padding: EdgeInsets.symmetric(horizontal: 16), + itemCount: workOrders.length, + itemBuilder: (context , index){ + return Column( + children: [ + RequestInfoRow( + title: _subtitle.callId, + content:workOrders[index].id.toString(), + ), + RequestInfoRow( + title: _subtitle.orderWorkNumber, + info: "123", + ), + RequestInfoRow( + title: _subtitle.visitDate, + info: workOrders[index].visitDate, + ), + RequestInfoRow( + title: _subtitle.assignedEmployee, + info: workOrders[index].callRequest.assignedEmployee.name, + ), + RequestInfoRow( + title: _subtitle.assetSN, + info:workOrders[index].callRequest.asset.assetSerialNo, + ), + RequestInfoRow( + title: _subtitle.assetName, + info:"123", + ), + RequestInfoRow( + title: _subtitle.model, + info:"123", + ), + RequestInfoRow( + title: _subtitle.site, + info:workOrders[index].callRequest.asset.site.custName, + ), + RequestInfoRow( + title: _subtitle.maintenanceSituation, + info:"123", + ), + RequestInfoRow( + title: _subtitle.currentSituation, + info:workOrders[index].currentSituation.name??'', + ), + _userProvider.user.type == UsersTypes.engineer + && serviceRequest.reportID != null? + Padding( + padding: EdgeInsets.all(32), + child: AButton( + text: _subtitle.editServiceReport, + onPressed: (){ + Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => FutureServiceReport( + request: serviceRequest, + ) + ), + ); + }, + ), + ): SizedBox.shrink(), + ], ); }, - ), - ): SizedBox.shrink(), - ], - ): - _userProvider.user.type == UsersTypes.engineer ? - Center( - child: Padding( - padding: EdgeInsets.all(32), - child: AButton( - text: "Create Report", - onPressed: (){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => CreateServiceReport( - request: serviceRequest, - ) + ); + else + return _userProvider.user.type == UsersTypes.engineer ? + Center( + child: Padding( + padding: EdgeInsets.all(32), + child: AButton( + text: "Create Report", + onPressed: (){ + Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => CreateServiceReport( + request: serviceRequest, + ) + ), + ); + }, ), - ); - }, - ), - ), - ): Center(child: ASubTitle(_subtitle.noDateFound),), - - + ), + ): Center(child: ASubTitle(_subtitle.noDateFound),); + }, + ) ], ), ), @@ -354,4 +393,69 @@ class RequestDetailsPage extends StatelessWidget { ), ); } + + Widget dataList({@required Subtitle subtitle, @required List workOrders, @required UserProvider userProvider, @required BuildContext context}){ + return ListView( + padding: EdgeInsets.symmetric(horizontal: 16), + children: [ + RequestInfoRow( + title: subtitle.callId, + content:"123", + ), + RequestInfoRow( + title: subtitle.orderWorkNumber, + info: "123", + ), + RequestInfoRow( + title: subtitle.visitDate, + info: workOrders[0].visitDate??"", + ), + RequestInfoRow( + title: subtitle.assignedEmployee, + info: "123", + ), + RequestInfoRow( + title: subtitle.assetSN, + info:"123", + ), + RequestInfoRow( + title: subtitle.assetName, + info:"123", + ), + RequestInfoRow( + title: subtitle.model, + info:"123", + ), + RequestInfoRow( + title: subtitle.site, + info:"123", + ), + RequestInfoRow( + title: subtitle.maintenanceSituation, + info:"123", + ), + RequestInfoRow( + title: subtitle.currentSituation, + info:"123", + ), + userProvider.user.type == UsersTypes.engineer + && serviceRequest.reportID != null? + Padding( + padding: EdgeInsets.all(32), + child: AButton( + text: subtitle.editServiceReport, + onPressed: (){ + Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => FutureServiceReport( + request: serviceRequest, + ) + ), + ); + }, + ), + ): SizedBox.shrink(), + ], + ); + } } From f39b6f5d8e2128a86075537d712b682d499a7f91 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 31 May 2023 10:55:07 +0300 Subject: [PATCH 2/7] work order improvement. --- .../service_request/search_work_order.dart | 6 +- .../report/future_service_report.dart | 6 +- .../pages/user/requests/request_details.dart | 500 ++++++++---------- 3 files changed, 236 insertions(+), 276 deletions(-) diff --git a/lib/models/service_request/search_work_order.dart b/lib/models/service_request/search_work_order.dart index ac58714..91fc0c9 100644 --- a/lib/models/service_request/search_work_order.dart +++ b/lib/models/service_request/search_work_order.dart @@ -21,8 +21,8 @@ class SearchWorkOrders { String startofWorkTime; String endofWorkTime; double workingHours; - String travelingHours; - String travelingExpenses; + num travelingHours; + num travelingExpenses; ModelDefRelatedDefects faultDescription; List sparePartsWorkOrders; String reviewComment; @@ -509,7 +509,7 @@ class ModelDefinition { } class ModelDefRelatedDefects { - String id; + int id; String defectName; String workPerformed; String estimatedTime; diff --git a/lib/views/pages/user/requests/report/future_service_report.dart b/lib/views/pages/user/requests/report/future_service_report.dart index 5ee16ea..15c792e 100644 --- a/lib/views/pages/user/requests/report/future_service_report.dart +++ b/lib/views/pages/user/requests/report/future_service_report.dart @@ -5,6 +5,7 @@ import 'package:test_sa/controllers/providers/api/service_requests_provider.dart import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/service_report.dart'; +import 'package:test_sa/models/service_request/search_work_order.dart'; import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart'; @@ -13,8 +14,9 @@ import 'package:test_sa/views/widgets/loaders/failed_loading.dart'; import 'edit_service_report.dart'; class FutureServiceReport extends StatefulWidget { final ServiceRequest request; + final SearchWorkOrders workOrder; - const FutureServiceReport({Key key, this.request}) : super(key: key); + const FutureServiceReport({Key key, this.request,this.workOrder}) : super(key: key); @override _FutureServiceReportState createState() => _FutureServiceReportState(); @@ -32,7 +34,7 @@ class _FutureServiceReportState extends State { return Scaffold( body: FutureBuilder( future: ServiceRequestsProvider().getSingleServiceReport( - reportId: widget.request.reportID, + reportId: widget.workOrder.id, user: _userProvider.user, host: _settingProvider.host, subtitle: _subtitle diff --git a/lib/views/pages/user/requests/request_details.dart b/lib/views/pages/user/requests/request_details.dart index f33ab0c..1deaaca 100644 --- a/lib/views/pages/user/requests/request_details.dart +++ b/lib/views/pages/user/requests/request_details.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/controllers/providers/api/service_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; +import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/subtitle.dart'; @@ -25,17 +26,19 @@ import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import '../../../../models/service_request/search_work_order.dart'; import 'report/future_service_report.dart'; + class RequestDetailsPage extends StatelessWidget { static final String id = "/call-details"; final ServiceRequest serviceRequest; const RequestDetailsPage({Key key, this.serviceRequest}) : super(key: key); + @override Widget build(BuildContext context) { Subtitle _subtitle = AppLocalization.of(context).subtitle; UserProvider _userProvider = Provider.of(context); SettingProvider _settingProvider = Provider.of(context); - List workOrders=[]; + List workOrders = []; ServiceRequestsProvider _serviceRequestsProvider = Provider.of(context); return DefaultTabController( length: 2, @@ -44,8 +47,8 @@ class RequestDetailsPage extends StatelessWidget { child: Column( children: [ Container( - color:AColors.primaryColor, - padding: const EdgeInsets.symmetric(horizontal: 0,vertical: 4), + color: AColors.primaryColor, + padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), child: Row( children: [ ABackButton(), @@ -53,124 +56,129 @@ class RequestDetailsPage extends StatelessWidget { child: Center( child: Text( _subtitle.details, - style: Theme.of(context).textTheme.headline6.copyWith( - color: AColors.white, - fontStyle: FontStyle.italic - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), ), ), ), - _userProvider.user.type == UsersTypes.normal_user ? - // AIconButton( - // iconData: Icons.warning_amber_rounded, - // color: AColors.white, - // buttonSize: 42, - // backgroundColor: AColors.deepOrange, - // onPressed: (){ - // Navigator.of(context).push( - // MaterialPageRoute( - // builder: (_) => ReportIssuesPage(serviceRequest: serviceRequest,) - // ) - // ); - // }, - // ) - const SizedBox(width: 48,) - : AIconButton( - iconData: Icons.edit, - color: AColors.white, - buttonSize: 42, - backgroundColor: AColors.green, - onPressed: () async { - showModalBottomSheet( - context: context, - builder: (context){ - return ServiceRequestsUpdateDialog(request: serviceRequest,); - }); - // DateTime picked = await showDatePicker( - // context: context, - // initialDate: DateTime.now(), - // firstDate: DateTime.now(), - // lastDate: DateTime.now().add(Duration(days: 182)) - // ); - // if(picked == null){return;} - // showDialog( - // context: context, - // barrierDismissible: false, - // builder: (BuildContext context) { - // return CupertinoAlertDialog( - // title: Text(_subtitle.updatingDots), - // content: Center(child: CircularProgressIndicator()), + _userProvider.user.type == UsersTypes.normal_user + ? + // AIconButton( + // iconData: Icons.warning_amber_rounded, + // color: AColors.white, + // buttonSize: 42, + // backgroundColor: AColors.deepOrange, + // onPressed: (){ + // Navigator.of(context).push( + // MaterialPageRoute( + // builder: (_) => ReportIssuesPage(serviceRequest: serviceRequest,) + // ) // ); // }, - // ); - // int status = await _serviceRequestsProvider.updateDate( - // user: _userProvider.user, - // host: _settingProvider.host, - // request: serviceRequest, - // newDate: picked.toString().split(" ").first - // ); - // Navigator.of(context).pop(); - // Fluttertoast.showToast( - // msg: HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle), - // ); - }, - ), - SizedBox(width: 16,) + // ) + const SizedBox( + width: 48, + ) + : AIconButton( + iconData: Icons.edit, + color: AColors.white, + buttonSize: 42, + backgroundColor: AColors.green, + onPressed: () async { + showModalBottomSheet( + context: context, + builder: (context) { + return ServiceRequestsUpdateDialog( + request: serviceRequest, + ); + }); + // DateTime picked = await showDatePicker( + // context: context, + // initialDate: DateTime.now(), + // firstDate: DateTime.now(), + // lastDate: DateTime.now().add(Duration(days: 182)) + // ); + // if(picked == null){return;} + // showDialog( + // context: context, + // barrierDismissible: false, + // builder: (BuildContext context) { + // return CupertinoAlertDialog( + // title: Text(_subtitle.updatingDots), + // content: Center(child: CircularProgressIndicator()), + // ); + // }, + // ); + // int status = await _serviceRequestsProvider.updateDate( + // user: _userProvider.user, + // host: _settingProvider.host, + // request: serviceRequest, + // newDate: picked.toString().split(" ").first + // ); + // Navigator.of(context).pop(); + // Fluttertoast.showToast( + // msg: HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle), + // ); + }, + ), + SizedBox( + width: 16, + ) ], ), ), - - serviceRequest.devicePhotos.isEmpty ? SizedBox.shrink(): - Column( - children: [ - SizedBox(height: 8,), - MaterialButton( - padding: EdgeInsets.zero, - onPressed: (){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => Scaffold( - body: InteractiveViewer( - child: Center( - child: ImageLoader( - url: serviceRequest.devicePhotos.first, - boxFit: BoxFit.contain, - ), - ), - ), - ) - ) - ); - }, - child: SizedBox( - height: 140 * AppStyle.getScaleFactor(context), - width: MediaQuery.of(context).size.width, - child: ImageLoader( - url: serviceRequest.devicePhotos.first, - boxFit: BoxFit.cover, - ), - ), - ), - SizedBox(height: 8,), - SizedBox( - height: 60* AppStyle.getScaleFactor(context), - child: ImagesList( - images: serviceRequest.devicePhotos, + serviceRequest.devicePhotos.isEmpty + ? SizedBox.shrink() + : Column( + children: [ + SizedBox( + height: 8, + ), + MaterialButton( + padding: EdgeInsets.zero, + onPressed: () { + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => Scaffold( + body: InteractiveViewer( + child: Center( + child: ImageLoader( + url: serviceRequest.devicePhotos.first, + boxFit: BoxFit.contain, + ), + ), + ), + ))); + }, + child: SizedBox( + height: 140 * AppStyle.getScaleFactor(context), + width: MediaQuery.of(context).size.width, + child: ImageLoader( + url: serviceRequest.devicePhotos.first, + boxFit: BoxFit.cover, + ), + ), + ), + SizedBox(height: 8), + SizedBox( + height: 60 * AppStyle.getScaleFactor(context), + child: ImagesList( + images: serviceRequest.devicePhotos, + ), + ), + ], ), - ), - ], - ), - - TabBar( - labelColor: AColors.primaryColor, - tabs: [ - Tab(text: _subtitle.general,), - Tab(text: _subtitle.serviceRequestInformation,), + TabBar(labelColor: AColors.primaryColor, tabs: [ + Tab( + text: _subtitle.general, + ), + Tab( + text: _subtitle.serviceRequestInformation, + ), ]), - SizedBox(height: 8,), + SizedBox( + height: 8, + ), Expanded( child: TabBarView( - children: [ ListView( padding: EdgeInsets.symmetric(horizontal: 16), @@ -189,7 +197,7 @@ class RequestDetailsPage extends StatelessWidget { ), RequestInfoRow( title: _subtitle.deviceModel, - info : serviceRequest.deviceModel, + info: serviceRequest.deviceModel, ), RequestInfoRow( title: _subtitle.engineerName, @@ -203,11 +211,12 @@ class RequestDetailsPage extends StatelessWidget { title: _subtitle.date, info: serviceRequest.date, ), - serviceRequest.nextVisitDate == null ? SizedBox.shrink() : - RequestInfoRow( - title: _subtitle.nextVisitDate, - info: DateFormat('EE dd/MM/yyyy').format(serviceRequest.nextVisitDate), - ), + serviceRequest.nextVisitDate == null + ? SizedBox.shrink() + : RequestInfoRow( + title: _subtitle.nextVisitDate, + info: DateFormat('EE dd/MM/yyyy').format(serviceRequest.nextVisitDate), + ), Row( children: [ Expanded( @@ -217,12 +226,12 @@ class RequestDetailsPage extends StatelessWidget { textScaleFactor: AppStyle.getScaleFactor(context), ), ), - StatusLabel(label: serviceRequest.statusLabel, - color: AColors.getRequestStatusColor(serviceRequest.statusValue) - ), + StatusLabel(label: serviceRequest.statusLabel, color: AColors.getRequestStatusColor(serviceRequest.statusValue)), ], ), - Divider(color: Theme.of(context).primaryColor,), + Divider( + color: Theme.of(context).primaryColor, + ), RequestInfoRow( title: _subtitle.hospital, info: serviceRequest.hospitalName, @@ -243,10 +252,10 @@ class RequestDetailsPage extends StatelessWidget { title: _subtitle.maintenanceIssue, content: serviceRequest.maintenanceIssue, ), - if(serviceRequest.audio?.isNotEmpty == true) - ASoundPlayer( - audio: serviceRequest.audio, - ), + if (serviceRequest.audio?.isNotEmpty == true) + ASoundPlayer( + audio: serviceRequest.audio, + ), // // Center( // child: Padding( @@ -290,98 +299,112 @@ class RequestDetailsPage extends StatelessWidget { ), // workOrders.isEmpty ? FutureBuilder( - future: _serviceRequestsProvider.searchWorkOrders(callId:serviceRequest.requestCode), - builder: (context, snap){ - print("${workOrders?.length}"); - workOrders= snap.data as List; - print("${workOrders?.length}"); - if(snap.connectionState==ConnectionState.done && snap.data.length != 0) - return ListView.builder( - padding: EdgeInsets.symmetric(horizontal: 16), + future: _serviceRequestsProvider.searchWorkOrders(callId: serviceRequest.requestCode), + builder: (context, snap) { + workOrders = snap.data as List; + if (snap.connectionState == ConnectionState.done && (snap.data?.length ?? 0) != 0) + return ListView.separated( + padding: EdgeInsets.all(21), itemCount: workOrders.length, - itemBuilder: (context , index){ - return Column( - children: [ - RequestInfoRow( - title: _subtitle.callId, - content:workOrders[index].id.toString(), - ), - RequestInfoRow( - title: _subtitle.orderWorkNumber, - info: "123", - ), - RequestInfoRow( - title: _subtitle.visitDate, - info: workOrders[index].visitDate, - ), - RequestInfoRow( - title: _subtitle.assignedEmployee, - info: workOrders[index].callRequest.assignedEmployee.name, - ), - RequestInfoRow( - title: _subtitle.assetSN, - info:workOrders[index].callRequest.asset.assetSerialNo, - ), - RequestInfoRow( - title: _subtitle.assetName, - info:"123", - ), - RequestInfoRow( - title: _subtitle.model, - info:"123", - ), - RequestInfoRow( - title: _subtitle.site, - info:workOrders[index].callRequest.asset.site.custName, - ), - RequestInfoRow( - title: _subtitle.maintenanceSituation, - info:"123", - ), - RequestInfoRow( - title: _subtitle.currentSituation, - info:workOrders[index].currentSituation.name??'', + separatorBuilder: (czt, index) => 21.height, + itemBuilder: (context, index) { + Color itemColor = index % 2 == 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; + Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; + + return ElevatedButton( + style: ElevatedButton.styleFrom( + padding: EdgeInsets.symmetric(vertical: 8, horizontal: 8), + primary: itemColor.withOpacity(.7), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), ), - _userProvider.user.type == UsersTypes.engineer - && serviceRequest.reportID != null? - Padding( + ), + //padding: EdgeInsets.symmetric(vertical: 8,horizontal: 8), + onPressed: () { + // onPressed(request); + }, + child: Column( + children: [ + RequestInfoRow( + title: _subtitle.callId, + content: workOrders[index].id.toString(), + ), + RequestInfoRow( + title: _subtitle.orderWorkNumber, + info: workOrders[index].workOrderNo.toString(), + ), + RequestInfoRow( + title: _subtitle.visitDate, + info: workOrders[index].visitDate, + ), + RequestInfoRow(title: _subtitle.assignedEmployee, info: workOrders[index].assignedEmployee.name), + RequestInfoRow( + title: _subtitle.assetSN, + info: workOrders[index].callRequest.asset.assetSerialNo, + ), + RequestInfoRow( + title: _subtitle.assetName, + info: workOrders[index].callRequest.asset.modelDefinition.assetName, + ), + RequestInfoRow( + title: _subtitle.model, + info: workOrders[index].callRequest.asset.modelDefinition.modelName, + ), + RequestInfoRow( + title: _subtitle.site, + info: workOrders[index].callRequest.asset.site.custName, + ), + RequestInfoRow( + title: _subtitle.maintenanceSituation, + info: workOrders[index].calllastSituation.name ?? '', + ), + RequestInfoRow( + title: _subtitle.currentSituation, + info: workOrders[index].currentSituation.name ?? '', + ), + _userProvider.user.type == UsersTypes.engineer && workOrders[index].workOrderNo != null + ? Padding( + padding: EdgeInsets.all(32), + child: AButton( + text: _subtitle.editServiceReport, + onPressed: () { + Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => FutureServiceReport( + request: serviceRequest, + workOrder: workOrders[index], + )), + ); + }, + ), + ) + : SizedBox.shrink(), + ], + ), + ); + }, + ); + else + return _userProvider.user.type == UsersTypes.engineer + ? Center( + child: Padding( padding: EdgeInsets.all(32), child: AButton( - text: _subtitle.editServiceReport, - onPressed: (){ + text: "Create Report", + onPressed: () { Navigator.of(context).push( MaterialPageRoute( - builder: (_) => FutureServiceReport( - request: serviceRequest, - ) - ), + builder: (_) => CreateServiceReport( + request: serviceRequest, + )), ); }, ), - ): SizedBox.shrink(), - ], - ); - }, - ); - else - return _userProvider.user.type == UsersTypes.engineer ? - Center( - child: Padding( - padding: EdgeInsets.all(32), - child: AButton( - text: "Create Report", - onPressed: (){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => CreateServiceReport( - request: serviceRequest, - ) - ), - ); - }, - ), - ), - ): Center(child: ASubTitle(_subtitle.noDateFound),); + ), + ) + : Center( + child: ASubTitle(_subtitle.noDateFound), + ); }, ) ], @@ -393,69 +416,4 @@ class RequestDetailsPage extends StatelessWidget { ), ); } - - Widget dataList({@required Subtitle subtitle, @required List workOrders, @required UserProvider userProvider, @required BuildContext context}){ - return ListView( - padding: EdgeInsets.symmetric(horizontal: 16), - children: [ - RequestInfoRow( - title: subtitle.callId, - content:"123", - ), - RequestInfoRow( - title: subtitle.orderWorkNumber, - info: "123", - ), - RequestInfoRow( - title: subtitle.visitDate, - info: workOrders[0].visitDate??"", - ), - RequestInfoRow( - title: subtitle.assignedEmployee, - info: "123", - ), - RequestInfoRow( - title: subtitle.assetSN, - info:"123", - ), - RequestInfoRow( - title: subtitle.assetName, - info:"123", - ), - RequestInfoRow( - title: subtitle.model, - info:"123", - ), - RequestInfoRow( - title: subtitle.site, - info:"123", - ), - RequestInfoRow( - title: subtitle.maintenanceSituation, - info:"123", - ), - RequestInfoRow( - title: subtitle.currentSituation, - info:"123", - ), - userProvider.user.type == UsersTypes.engineer - && serviceRequest.reportID != null? - Padding( - padding: EdgeInsets.all(32), - child: AButton( - text: subtitle.editServiceReport, - onPressed: (){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => FutureServiceReport( - request: serviceRequest, - ) - ), - ); - }, - ), - ): SizedBox.shrink(), - ], - ); - } } From 756e2a1881f687e6580e9a0b7fe919df1d2fc4e9 Mon Sep 17 00:00:00 2001 From: nextwo <1234> Date: Wed, 31 May 2023 11:15:36 +0300 Subject: [PATCH 3/7] implement searchWorkOrders api and edit on ui --- lib/controllers/api_routes/api_manager.dart | 82 ++-- .../api_routes/http_status_manger.dart | 21 +- .../localization/localization.dart | 14 +- .../firebase_notification_manger.dart | 30 +- .../notification/notification_manger.dart | 45 +- .../providers/api/departments_provider.dart | 32 +- .../api/device_transfer_provider.dart | 90 ++-- .../providers/api/devices_provider.dart | 15 +- .../providers/api/gas_refill_provider.dart | 129 +++-- .../providers/api/hospitals_provider.dart | 66 ++- .../providers/api/notifications_provider.dart | 66 +-- .../providers/api/parts_provider.dart | 56 +-- .../api/regular_visits_provider.dart | 77 ++- .../api/service_requests_provider.dart | 20 +- .../employee/assigned_to_provider.dart | 22 +- .../employee/engineers_provider.dart | 21 +- .../gas_cylinder_size_provider.dart | 27 +- .../gas_cylinder_type_provider.dart | 27 +- .../gas_refill/gas_status_provider.dart | 24 +- .../gas_refill/gas_types_provider.dart | 24 +- .../pentry/pentry_status_provider.dart | 23 +- .../pentry/pentry_task_status_provider.dart | 23 +- .../pentry/pentry_visit_status_provider.dart | 22 +- .../service_report_defect_types_provider.dart | 23 +- .../service_report_last_calls_provider.dart | 22 +- .../service_report_priority_provider.dart | 22 +- .../service_report_reasons_provider.dart | 22 +- .../service_report_status_provider.dart | 23 +- .../report/service_report_types_provider.dart | 22 +- .../report/service_types_provider.dart | 23 +- .../service_request_status_provider.dart | 23 +- .../service_request_through_provider.dart | 23 +- .../service_request_type_provider.dart | 23 +- .../providers/settings/app_settings.dart | 2 +- .../providers/settings/setting_provider.dart | 28 +- lib/controllers/validator/validator.dart | 27 +- lib/main.dart | 72 ++- lib/models/app_notification.dart | 17 +- lib/models/department.dart | 8 +- lib/models/device/device_transfer.dart | 23 +- lib/models/device/device_transfer_info.dart | 38 +- lib/models/device/model.dart | 23 +- lib/models/engineer.dart | 16 +- lib/models/enums/user_types.dart | 4 +- lib/models/gas_refill/gas_refill_details.dart | 18 +- lib/models/gas_refill/gas_refill_model.dart | 20 +- lib/models/hospital.dart | 30 +- lib/models/issue.dart | 18 +- lib/models/lookup.dart | 27 +- lib/models/pantry/calibration_tools.dart | 12 +- lib/models/pantry/contact.dart | 13 +- lib/models/pantry/lookups/contact_person.dart | 9 +- lib/models/pantry/lookups/contact_title.dart | 9 +- lib/models/pantry/pm_kit.dart | 21 +- lib/models/part.dart | 18 +- .../service_request/search_work_order.dart | 248 +++++----- .../service_request/service_request.dart | 73 ++- .../service_request_search.dart | 24 +- lib/models/subtitle.dart | 32 +- lib/models/timer_model.dart | 4 +- lib/models/visits/visit.dart | 55 ++- lib/models/visits/visits_group.dart | 15 +- lib/models/visits/visits_search.dart | 49 +- lib/views/app_style/colors.dart | 63 +-- lib/views/app_style/sizing.dart | 38 +- .../device_transfer_details.dart | 67 ++- .../request_device_transfer.dart | 2 +- .../track_device_transfer.dart | 18 +- lib/views/pages/splash_screen.dart | 33 +- .../user/gas_refill/gas_refill_details.dart | 168 ++++--- .../user/gas_refill/request_gas_refill.dart | 184 ++++---- .../user/gas_refill/track_gas_refill.dart | 19 +- .../notifications/notifications_list.dart | 25 +- .../notifications/notifications_page.dart | 25 +- lib/views/pages/user/profile_page.dart | 121 +++-- lib/views/pages/user/report_issues_page.dart | 69 ++- .../pages/user/requests/create_request.dart | 48 +- .../future_request_service_details.dart | 19 +- .../report/create_service_report.dart | 426 +++++++++-------- .../requests/report/edit_service_report.dart | 440 ++++++++++-------- .../pages/user/requests/requests_page.dart | 37 +- .../pages/user/visits/pantry/edit_pentry.dart | 212 ++++----- .../visits/pantry/future_edit_pently.dart | 20 +- .../preventive_maintenance_visits_page.dart | 61 ++- .../user/visits/regular_visits_page.dart | 67 ++- .../visits/update_visits_group_sheet.dart | 266 ++++++----- .../pages/user/visits/visit_details.dart | 58 +-- lib/views/widgets/app_name_bar.dart | 8 +- .../widgets/buttons/app_back_button.dart | 2 +- lib/views/widgets/buttons/app_button.dart | 2 +- .../widgets/buttons/app_flat_button.dart | 22 +- .../widgets/buttons/app_icon_button.dart | 21 +- .../widgets/buttons/app_icon_button2.dart | 2 +- .../widgets/buttons/app_outlined_button.dart | 12 +- .../widgets/buttons/app_small_button.dart | 26 +- .../custom_clip_path/carve_in_image.dart | 10 +- .../widgets/date_and_time/date_picker.dart | 14 +- .../date_and_time/from_to_date_bar.dart | 16 +- .../departments/department_button.dart | 1 + .../widgets/departments/department_item.dart | 16 +- .../departments/single_department_picker.dart | 51 +- .../device_transfer_info_section.dart | 18 +- .../device_trancfer/device_transfer_item.dart | 96 ++-- .../device_trancfer/device_transfer_list.dart | 30 +- lib/views/widgets/dialogs/dialog.dart | 9 +- lib/views/widgets/drawer/drawer_item.dart | 4 +- .../auto_complete_devices_field.dart | 102 ++-- .../equipment/auto_complete_models_field.dart | 49 +- lib/views/widgets/equipment/device_item.dart | 40 +- .../equipment/single_device_picker.dart | 101 ++-- .../gas_refill_create_details_item.dart | 25 +- .../widgets/gas_refill/gas_refill_item.dart | 67 ++- .../widgets/gas_refill/gas_refill_list.dart | 30 +- .../gas_refill_update_details_item.dart | 61 +-- .../hospital_auto_complete_field.dart | 30 +- .../widgets/hospitals/hospital_button.dart | 3 +- .../widgets/hospitals/hospital_item.dart | 23 +- .../hospitals/single_hospital_picker.dart | 55 +-- lib/views/widgets/images/image_item.dart | 49 +- lib/views/widgets/images/images_list.dart | 33 +- lib/views/widgets/images/images_viewer.dart | 93 ++-- .../widgets/images/mini_one_image_picker.dart | 78 ++-- .../images/multi_image_picker_item.dart | 53 +-- .../widgets/images/one_image_picker.dart | 106 ++--- .../widgets/issues/report_issue_item.dart | 23 +- .../widgets/loaders/app_lazy_loading.dart | 9 +- lib/views/widgets/loaders/app_loading.dart | 1 + lib/views/widgets/loaders/failed_loading.dart | 14 +- lib/views/widgets/loaders/image_loader.dart | 9 +- lib/views/widgets/loaders/lazy_loading.dart | 20 +- .../widgets/loaders/loading_manager.dart | 15 +- lib/views/widgets/loaders/no_item_found.dart | 3 +- .../notifications/notification_item.dart | 36 +- .../parts/auto_complete_parts_field.dart | 34 +- lib/views/widgets/parts/part_item.dart | 58 +-- .../auto_complete_devices_field.dart | 48 +- .../widgets/pentry/pentry_info_form.dart | 129 +++-- .../widgets/pentry/pentry_pm_kit_form.dart | 257 +++++----- .../pentry/pentry_ppm_check_list_form.dart | 196 ++++---- lib/views/widgets/qr/scan_qr.dart | 18 +- lib/views/widgets/requests/info_row.dart | 66 +-- .../widgets/requests/request_status.dart | 25 +- .../requests/service_request_item.dart | 299 ++++++------ .../requests/service_request_list.dart | 30 +- lib/views/widgets/search/filter_item.dart | 47 +- .../search/service_request_search_bar.dart | 100 ++-- .../widgets/search/visits_search_bar.dart | 106 +++-- lib/views/widgets/sound/record_sound.dart | 4 +- lib/views/widgets/sound/sound_player.dart | 142 +++--- .../speech_to_text/speech_to_text.dart | 1 + .../status/employee/assigned_to_mune.dart | 9 +- .../status/employee/engineers_mune.dart | 9 +- .../status/employee/single_type_menu.dart | 56 +-- .../status/gas_refill/gas_cylinder_size.dart | 9 +- .../status/gas_refill/gas_cylinder_type.dart | 9 +- .../widgets/status/gas_refill/gas_status.dart | 9 +- .../widgets/status/gas_refill/gas_type.dart | 9 +- .../widgets/status/multi_status_menu.dart | 169 ++++--- .../status/pentry/pentry_status_mune.dart | 9 +- .../pentry/pentry_task_status_mune.dart | 9 +- .../pentry/pentry_visit_status_mune.dart | 9 +- .../report/service_report_last_call.dart | 7 +- .../status/report/service_report_reasons.dart | 5 +- .../status/report/service_report_status.dart | 30 +- .../status/report/service_report_type.dart | 9 +- .../widgets/status/report/service_status.dart | 9 +- .../service_request_defect_types_mune.dart | 9 +- .../service_request_status_mune.dart | 9 +- .../service_request_through_mune.dart | 9 +- .../service_request_types_mune.dart | 9 +- .../widgets/status/single_status_menu.dart | 2 +- lib/views/widgets/timer/app_timer.dart | 79 ++-- lib/views/widgets/timer/timer_manager.dart | 1 + lib/views/widgets/titles/app_sub_title.dart | 10 +- lib/views/widgets/titles/app_title.dart | 9 +- .../widgets/titles/expandable_info_row.dart | 65 ++- lib/views/widgets/visits/visit_status.dart | 43 +- lib/views/widgets/visits/visits_list.dart | 56 ++- 178 files changed, 3922 insertions(+), 4414 deletions(-) diff --git a/lib/controllers/api_routes/api_manager.dart b/lib/controllers/api_routes/api_manager.dart index 1a0a125..f40b309 100644 --- a/lib/controllers/api_routes/api_manager.dart +++ b/lib/controllers/api_routes/api_manager.dart @@ -8,35 +8,33 @@ import 'package:http/http.dart'; import 'package:test_sa/models/user.dart'; class ApiManager { - ApiManager._(); - Map get _headers => { - 'Content-Type': 'application/json', - if(user != null) 'Authorization': 'Bearer ${user.token}', - }; + Map get _headers => { + 'Content-Type': 'application/json', + if (user != null) 'Authorization': 'Bearer ${user.token}', + }; static ApiManager instance = ApiManager._(); User user; Future get( - String url, - {Map headers,} - ) async{ - + String url, { + Map headers, + }) async { headers ??= {}; headers.addAll(_headers); Uri _url = Uri.parse(url); - // print(_url); - // print(headers); - http.Response response = await http.get(_url,headers: headers); - if(jsonDecode(response.body) is Map){ + // print(_url); + // print(headers); + http.Response response = await http.get(_url, headers: headers); + if (jsonDecode(response.body) is Map) { final message = jsonDecode(response.body)["message"]; - if(message != null && message.toString().isNotEmpty){ - Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); + if (message != null && message.toString().isNotEmpty) { + Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG); } } @@ -44,12 +42,10 @@ class ApiManager { } Future post( - String url, { - Map headers, - @required Map body, - } - ) async{ - + String url, { + Map headers, + @required Map body, + }) async { headers ??= {}; headers.addAll(_headers); @@ -67,10 +63,10 @@ class ApiManager { // print(response.statusCode); // log(response.body); - if(jsonDecode(response.body) is Map){ + if (jsonDecode(response.body) is Map) { final message = jsonDecode(response.body)["message"]; - if(message != null && message.toString().isNotEmpty){ - Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); + if (message != null && message.toString().isNotEmpty) { + Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG); } } @@ -78,12 +74,10 @@ class ApiManager { } Future put( - String url, { - Map headers, - @required Map body, - } - ) async{ - + String url, { + Map headers, + @required Map body, + }) async { headers ??= {}; headers.addAll(_headers); @@ -100,22 +94,24 @@ class ApiManager { http.Response response = await http.Response.fromStream(streamedResponse); // print(response.statusCode); // log(response.body); - if(jsonDecode(response.body) is Map){ + if (jsonDecode(response.body) is Map) { final message = jsonDecode(response.body)["message"]; - if(message != null && message.toString().isNotEmpty){ - Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); + if (message != null && message.toString().isNotEmpty) { + Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG); } } return response; } Future multiPart( - String url, { - Map headers, - @required Map body, - @required List> files, - }) async{ - Map _headers = const {'Content-Type': 'multipart/form-data',}; + String url, { + Map headers, + @required Map body, + @required List> files, + }) async { + Map _headers = const { + 'Content-Type': 'multipart/form-data', + }; headers ??= {}; @@ -139,12 +135,12 @@ class ApiManager { http.Response response = await http.Response.fromStream(streamedResponse); // print(response.statusCode); // log(response.body); - if(jsonDecode(response.body) is Map){ + if (jsonDecode(response.body) is Map) { final message = jsonDecode(response.body)["message"]; - if(message != null && message.toString().isNotEmpty){ - Fluttertoast.showToast(msg: message ?? "",toastLength: Toast.LENGTH_LONG); + if (message != null && message.toString().isNotEmpty) { + Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG); } } return response; } -} \ No newline at end of file +} diff --git a/lib/controllers/api_routes/http_status_manger.dart b/lib/controllers/api_routes/http_status_manger.dart index 0bfb217..f9405f6 100644 --- a/lib/controllers/api_routes/http_status_manger.dart +++ b/lib/controllers/api_routes/http_status_manger.dart @@ -1,40 +1,39 @@ import 'package:meta/meta.dart'; import 'package:test_sa/models/subtitle.dart'; -class HttpStatusManger{ +class HttpStatusManger { static String getStatusMessage({ @required int status, @required Subtitle subtitle, String messageFor400, String messageFor200, - }){ - if(status == null) + }) { + if (status == null) // no status code - code error no need for subtitle return "careful null status"; - if(status == -1) + if (status == -1) // client's request in process return subtitle.currentlyServiceNotAvailable; - if(status == -2){ + if (status == -2) { // client's request in process return subtitle.waitUntilYourRequestComplete; - }else if(status >= 200 && status < 300){ + } else if (status >= 200 && status < 300) { // client's request was successfully received return messageFor200 ?? subtitle.requestCompleteSuccessfully; - } else if(status >= 400 && status < 500){ + } else if (status >= 400 && status < 500) { // client's request have error - switch(status){ + switch (status) { case 400: return messageFor400 ?? subtitle.failedToCompleteRequest; default: return subtitle.failedToCompleteRequest; } - } else if(status >= 500){ + } else if (status >= 500) { // server error return subtitle.currentlyServiceNotAvailable; } else { // no error match so return default error return subtitle.failedToCompleteRequest; } - } -} \ No newline at end of file +} diff --git a/lib/controllers/localization/localization.dart b/lib/controllers/localization/localization.dart index a6e7fe8..182833e 100644 --- a/lib/controllers/localization/localization.dart +++ b/lib/controllers/localization/localization.dart @@ -4,7 +4,6 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:test_sa/models/subtitle.dart'; - class AppLocalization { AppLocalization(this.locale); @@ -17,23 +16,20 @@ class AppLocalization { Subtitle get subtitle => _subtitle; Future load() async { - String jsonStringValues = - await rootBundle.loadString('assets/subtitles/${locale.languageCode}_subtitle.json'); + String jsonStringValues = await rootBundle.loadString('assets/subtitles/${locale.languageCode}_subtitle.json'); _subtitle = Subtitle.fromJson(json.decode(jsonStringValues)); } // static member to have simple access to the delegate from Material App - static const LocalizationsDelegate delegate = - _DemoLocalizationsDelegate(); + static const LocalizationsDelegate delegate = _DemoLocalizationsDelegate(); } -class _DemoLocalizationsDelegate - extends LocalizationsDelegate { +class _DemoLocalizationsDelegate extends LocalizationsDelegate { const _DemoLocalizationsDelegate(); @override bool isSupported(Locale locale) { - return ['en','ar'].contains(locale.languageCode); + return ['en', 'ar'].contains(locale.languageCode); } @override @@ -45,4 +41,4 @@ class _DemoLocalizationsDelegate @override bool shouldReload(LocalizationsDelegate old) => false; -} \ No newline at end of file +} diff --git a/lib/controllers/notification/firebase_notification_manger.dart b/lib/controllers/notification/firebase_notification_manger.dart index 153d28f..7e92b91 100644 --- a/lib/controllers/notification/firebase_notification_manger.dart +++ b/lib/controllers/notification/firebase_notification_manger.dart @@ -7,8 +7,7 @@ import 'package:test_sa/models/app_notification.dart'; import 'notification_manger.dart'; -class FirebaseNotificationManger{ - +class FirebaseNotificationManger { static FirebaseMessaging messaging = FirebaseMessaging.instance; static String token; @@ -23,7 +22,7 @@ class FirebaseNotificationManger{ sound: true, ); - if(settings.authorizationStatus == AuthorizationStatus.authorized){ + if (settings.authorizationStatus == AuthorizationStatus.authorized) { token = await messaging.getToken(); } return token; @@ -32,7 +31,7 @@ class FirebaseNotificationManger{ static initialized(BuildContext context) async { await Firebase.initializeApp(); NotificationSettings settings; - try{ + try { settings = await messaging.requestPermission( alert: true, announcement: false, @@ -42,11 +41,11 @@ class FirebaseNotificationManger{ provisional: false, sound: true, ); - }catch(error){ + } catch (error) { return; } - if(settings.authorizationStatus != AuthorizationStatus.authorized){ + if (settings.authorizationStatus != AuthorizationStatus.authorized) { return; } @@ -56,28 +55,17 @@ class FirebaseNotificationManger{ FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { AppNotification notification = AppNotification.fromJson(message.data); - if(notification.path == null - || notification.path.isEmpty) - return; - Navigator.pushNamed( - context, - notification.path, - arguments: notification.requestId - ); + if (notification.path == null || notification.path.isEmpty) return; + Navigator.pushNamed(context, notification.path, arguments: notification.requestId); }); FirebaseMessaging.onMessage.listen((RemoteMessage message) { AppNotification notification = AppNotification.fromJson(message.data); NotificationManger.showNotification( - title: message.notification.title, - subtext: message.notification.body, - hashcode: int.tryParse(notification.requestId ?? "") ?? 1, - payload: json.encode(message.data) - ); + title: message.notification.title, subtext: message.notification.body, hashcode: int.tryParse(notification.requestId ?? "") ?? 1, payload: json.encode(message.data)); return; }); } } -Future firebaseMessagingBackgroundHandler(RemoteMessage message) async { -} \ No newline at end of file +Future firebaseMessagingBackgroundHandler(RemoteMessage message) async {} diff --git a/lib/controllers/notification/notification_manger.dart b/lib/controllers/notification/notification_manger.dart index a568d5d..3038f78 100644 --- a/lib/controllers/notification/notification_manger.dart +++ b/lib/controllers/notification/notification_manger.dart @@ -2,7 +2,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:test_sa/views/app_style/colors.dart'; -class NotificationManger{ +class NotificationManger { // private constructor to avoid create object NotificationManger._(); @@ -12,43 +12,26 @@ class NotificationManger{ /// onNotificationPressed action when notification pressed to open tap /// onIOSNotificationPressed action when notification pressed /// to open tap in iOS versions older than 10 - static initialisation( - Function(NotificationResponse) onNotificationPressed, - DidReceiveLocalNotificationCallback onIOSNotificationPressed - ) async { - FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = - FlutterLocalNotificationsPlugin(); + static initialisation(Function(NotificationResponse) onNotificationPressed, DidReceiveLocalNotificationCallback onIOSNotificationPressed) async { + FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); // initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project - const AndroidInitializationSettings initializationSettingsAndroid = - AndroidInitializationSettings('app_icon',); + const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings( + 'app_icon', + ); - final DarwinInitializationSettings initializationSettingsDarwin = - DarwinInitializationSettings( - onDidReceiveLocalNotification: onIOSNotificationPressed); + final DarwinInitializationSettings initializationSettingsDarwin = DarwinInitializationSettings(onDidReceiveLocalNotification: onIOSNotificationPressed); - final InitializationSettings initializationSettings = InitializationSettings( - android: initializationSettingsAndroid, - iOS: initializationSettingsDarwin, - macOS: initializationSettingsDarwin); + final InitializationSettings initializationSettings = InitializationSettings(android: initializationSettingsAndroid, iOS: initializationSettingsDarwin, macOS: initializationSettingsDarwin); - await flutterLocalNotificationsPlugin.initialize( - initializationSettings, - onDidReceiveNotificationResponse: onNotificationPressed); + await flutterLocalNotificationsPlugin.initialize(initializationSettings, onDidReceiveNotificationResponse: onNotificationPressed); } // push new notification - static Future showNotification( - { - @required String title, - @required String subtext, - @required int hashcode, - String payload - }) async { - + static Future showNotification({@required String title, @required String subtext, @required int hashcode, String payload}) async { const AndroidNotificationDetails androidChannel = AndroidNotificationDetails( 'com.newtrack.testsa', 'Test SA', - channelDescription:'Push notification service for Test SA', + channelDescription: 'Push notification service for Test SA', importance: Importance.max, priority: Priority.max, playSound: true, @@ -62,8 +45,7 @@ class NotificationManger{ groupKey: 'com.newtrack.testsa', ); - const DarwinNotificationDetails iosNotificationDetails = - DarwinNotificationDetails( + const DarwinNotificationDetails iosNotificationDetails = DarwinNotificationDetails( categoryIdentifier: "testSA", ); @@ -81,5 +63,4 @@ class NotificationManger{ payload: payload, ); } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/departments_provider.dart b/lib/controllers/providers/api/departments_provider.dart index 2714679..b5ca638 100644 --- a/lib/controllers/providers/api/departments_provider.dart +++ b/lib/controllers/providers/api/departments_provider.dart @@ -6,10 +6,9 @@ import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/department.dart'; -class DepartmentsProvider extends ChangeNotifier{ - +class DepartmentsProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { departments = null; stateCode = null; } @@ -19,7 +18,6 @@ class DepartmentsProvider extends ChangeNotifier{ // 500 service not available int stateCode; - // contain user data // when user not login or register _user = null List departments; @@ -29,34 +27,29 @@ class DepartmentsProvider extends ChangeNotifier{ // failed _loading = false bool isLoading; - /// return -2 if request in progress /// return -1 if error happen when sending request /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getDepartment (String host) async { - if(isLoading == true) - return -2; + Future getDepartment(String host) async { + if (isLoading == true) return -2; isLoading = true; notifyListeners(); Response response; - try{ - response = await ApiManager.instance.post( - URLs.getDepartments, - body: { - "pageSize":50, - // if(title != null && title.isNotEmpty) "name":title, - } - ); - } catch(error) { + try { + response = await ApiManager.instance.post(URLs.getDepartments, body: { + "pageSize": 50, + // if(title != null && title.isNotEmpty) "name":title, + }); + } catch (error) { isLoading = false; stateCode = -1; notifyListeners(); return -1; } stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List listJson = json.decode(response.body)["data"]; departments = listJson.map((department) => Department.fromJson(department)).toList(); @@ -65,5 +58,4 @@ class DepartmentsProvider extends ChangeNotifier{ notifyListeners(); return response.statusCode; } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/device_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart index 359a98d..f3cd3a4 100644 --- a/lib/controllers/providers/api/device_transfer_provider.dart +++ b/lib/controllers/providers/api/device_transfer_provider.dart @@ -143,61 +143,53 @@ class DeviceTransferProvider extends ChangeNotifier { "destDepartmentId": oldModel.receiver.department.id, }; - if(isSender){ - body.addAll( - { - "senderSiteId": newModel.client.id, - "senderDepartmentId": newModel.department.id, - "senderAssignedEmployeeId": newModel.userId, - "senderMachineStatusId": newModel.status.id, - "senderComment": newModel.comment, - "senderWorkingHours": newModel.workingHours, - "senderTravelingHours": newModel.travelingHours, - "senderAttachmentName": "${newModel.signature}.png", - "destSiteId": oldModel.receiver.client.id, - "destDepartmentId": oldModel.receiver.department.id, - "receiverAssignedEmployeeId": oldModel.receiver.userId, - "receiverMachineStatusId": oldModel.receiver.status.id??"", - "receiverComment": oldModel.receiver.comment, - "receiverWorkingHours": oldModel.receiver.workingHours, - "receiverTravelingHours": oldModel.receiver.travelingHours, - "receiverAttachmentName": "${oldModel.receiver.signature}.png", - } - ); - }else{ - body.addAll( - { - "senderSiteId": oldModel.sender.client.id, - "senderDepartmentId": oldModel.sender.department.id, - "senderAssignedEmployeeId": oldModel.sender.userId, - "senderMachineStatusId": oldModel.sender.status.id, - "senderComment": oldModel.sender.comment, - "senderWorkingHours": oldModel.sender.workingHours, - "senderTravelingHours": oldModel.sender.travelingHours, - "senderAttachmentName": "${oldModel.sender.signature}.png", - "destSiteId": newModel.client.id, - "destDepartmentId": newModel.department.id, - "receiverAssignedEmployeeId": newModel.userId, - "receiverMachineStatusId": newModel.status?.id??"", - "receiverComment": newModel.comment, - "receiverWorkingHours": newModel.workingHours, - "receiverTravelingHours": newModel.travelingHours, - "receiverAttachmentName": "${newModel.signature}.png", - } - ); + if (isSender) { + body.addAll({ + "senderSiteId": newModel.client.id, + "senderDepartmentId": newModel.department.id, + "senderAssignedEmployeeId": newModel.userId, + "senderMachineStatusId": newModel.status.id, + "senderComment": newModel.comment, + "senderWorkingHours": newModel.workingHours, + "senderTravelingHours": newModel.travelingHours, + "senderAttachmentName": "${newModel.signature}.png", + "destSiteId": oldModel.receiver.client.id, + "destDepartmentId": oldModel.receiver.department.id, + "receiverAssignedEmployeeId": oldModel.receiver.userId, + "receiverMachineStatusId": oldModel.receiver.status.id ?? "", + "receiverComment": oldModel.receiver.comment, + "receiverWorkingHours": oldModel.receiver.workingHours, + "receiverTravelingHours": oldModel.receiver.travelingHours, + "receiverAttachmentName": "${oldModel.receiver.signature}.png", + }); + } else { + body.addAll({ + "senderSiteId": oldModel.sender.client.id, + "senderDepartmentId": oldModel.sender.department.id, + "senderAssignedEmployeeId": oldModel.sender.userId, + "senderMachineStatusId": oldModel.sender.status.id, + "senderComment": oldModel.sender.comment, + "senderWorkingHours": oldModel.sender.workingHours, + "senderTravelingHours": oldModel.sender.travelingHours, + "senderAttachmentName": "${oldModel.sender.signature}.png", + "destSiteId": newModel.client.id, + "destDepartmentId": newModel.department.id, + "receiverAssignedEmployeeId": newModel.userId, + "receiverMachineStatusId": newModel.status?.id ?? "", + "receiverComment": newModel.comment, + "receiverWorkingHours": newModel.workingHours, + "receiverTravelingHours": newModel.travelingHours, + "receiverAttachmentName": "${newModel.signature}.png", + }); } print(body["senderWorkingHours"]); - body.addAll(newModel.toJson(isSender)); print(body); Response response; - try{ - response = await ApiManager.instance.put( - URLs.updateDeviceTransfer, - body: body - ); + try { + response = await ApiManager.instance.put(URLs.updateDeviceTransfer, body: body); print(response.body); print("${newModel.signature}.png"); @@ -221,4 +213,4 @@ class DeviceTransferProvider extends ChangeNotifier { return -1; } } -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/devices_provider.dart b/lib/controllers/providers/api/devices_provider.dart index 5bbd281..4bede20 100644 --- a/lib/controllers/providers/api/devices_provider.dart +++ b/lib/controllers/providers/api/devices_provider.dart @@ -23,7 +23,7 @@ class DevicesProvider extends ChangeNotifier { int _stateCode; int get stateCode => _stateCode; - List _devices=[]; + List _devices = []; List get devices => _devices; // when categories in-process _loading = true @@ -54,8 +54,8 @@ class DevicesProvider extends ChangeNotifier { Response response; try { response = await ApiManager.instance.post(URLs.getEquipment, body: { - "pageSize": pageItemNumber , - "pageNumber":devices.length ~/ pageItemNumber + 1, + "pageSize": pageItemNumber, + "pageNumber": devices.length ~/ pageItemNumber + 1, "siteId": hospitalId, if (serialNumber?.isEmpty == false) "assetSerialNumber": serialNumber, if (number?.isEmpty == false) "assetNo": number, @@ -72,10 +72,9 @@ class DevicesProvider extends ChangeNotifier { List equipmentListJson = json.decode(response.body)["data"]; _devices.addAll(equipmentListJson.map((device) => Device.fromJson(device)).toList()); nextPage = true; - }else - { - nextPage = false; - } + } else { + nextPage = false; + } _loading = false; notifyListeners(); return response.statusCode; @@ -97,7 +96,7 @@ class DevicesProvider extends ChangeNotifier { try { response = await ApiManager.instance.post(URLs.getEquipment, body: { "pageSize": pageItemNumber, - "pageNumber":devices.length ~/ pageItemNumber + 1, + "pageNumber": devices.length ~/ pageItemNumber + 1, "siteId": devices.length ~/ pageItemNumber + 1, if (serialNumber?.isEmpty == false) "assetSerialNumber": serialNumber, if (number?.isEmpty == false) "assetNo": number, diff --git a/lib/controllers/providers/api/gas_refill_provider.dart b/lib/controllers/providers/api/gas_refill_provider.dart index 2f460a0..ef9beed 100644 --- a/lib/controllers/providers/api/gas_refill_provider.dart +++ b/lib/controllers/providers/api/gas_refill_provider.dart @@ -7,13 +7,12 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/gas_refill/gas_refill_model.dart'; import 'package:test_sa/models/user.dart'; -class GasRefillProvider extends ChangeNotifier{ - +class GasRefillProvider extends ChangeNotifier { // number of items call in each request final pageItemNumber = 50; //reset provider data - void reset(){ + void reset() { items = null; nextPage = true; stateCode = null; @@ -40,132 +39,122 @@ class GasRefillProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getRequests ({ + Future getRequests({ @required String host, @required User user, }) async { - if(isLoading == true) - return -2; + if (isLoading == true) return -2; isLoading = true; Response response; - Map body = {}; - body["pageNumber"] = (items?.length ?? 0) ~/pageItemNumber + 1; - body["pageSize"] = pageItemNumber; - - response = await ApiManager.instance.post( - URLs.getGasRefill, - body: body, - ); - stateCode = response.statusCode; - if(stateCode >= 200 && stateCode < 300) { - // client's request was successfully received - List requestsListJson = json.decode(response.body)["data"]; - List itemsPage = requestsListJson.map( - (request) => GasRefillModel.fromJson(request)).toList(); - items ??= []; - items.addAll(itemsPage); - if(itemsPage.length == pageItemNumber){ - nextPage = true; - }else{ - nextPage = false; - } + Map body = {}; + body["pageNumber"] = (items?.length ?? 0) ~/ pageItemNumber + 1; + body["pageSize"] = pageItemNumber; + + response = await ApiManager.instance.post( + URLs.getGasRefill, + body: body, + ); + stateCode = response.statusCode; + if (stateCode >= 200 && stateCode < 300) { + // client's request was successfully received + List requestsListJson = json.decode(response.body)["data"]; + List itemsPage = requestsListJson.map((request) => GasRefillModel.fromJson(request)).toList(); + items ??= []; + items.addAll(itemsPage); + if (itemsPage.length == pageItemNumber) { + nextPage = true; + } else { + nextPage = false; } - try{ + } + try { isLoading = false; notifyListeners(); return response.statusCode; - - } catch(error) { + } catch (error) { isLoading = false; stateCode = -1; notifyListeners(); return -1; } - } - Future createModel ({ + Future createModel({ @required String host, @required User user, @required GasRefillModel model, }) async { - Map body = { + Map body = { "uid": user.id.toString(), "token": user.token ?? "", "GazRefillNo": "GR-${DateTime.now().toString().split(" ").first}", "status": model.status.toMap(), }; - body["gazRefillDetails"] = model.details.map((model) => { - "gasType": model.type.toMap(), - "cylinderSize": model.cylinderSize.toMap(), - "cylinderType": model.cylinderType.toMap(), - "requestedQty": model.requestedQuantity, - }).toList(); + body["gazRefillDetails"] = model.details + .map((model) => { + "gasType": model.type.toMap(), + "cylinderSize": model.cylinderSize.toMap(), + "cylinderType": model.cylinderType.toMap(), + "requestedQty": model.requestedQuantity, + }) + .toList(); Response response; - try{ - response = await ApiManager.instance.post( - URLs.requestGasRefill, - body: body - ); + try { + response = await ApiManager.instance.post(URLs.requestGasRefill, body: body); stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { - if(items != null) { - reset(); + if (response.statusCode >= 200 && response.statusCode < 300) { + if (items != null) { + reset(); notifyListeners(); } } return response.statusCode; - - } catch(error) { + } catch (error) { return -1; } - } - Future updateModel ({ + Future updateModel({ @required String host, @required User user, @required GasRefillModel oldModel, @required GasRefillModel newModel, }) async { - Map body = { - "id":newModel.id, + Map body = { + "id": newModel.id, "gazRefillNo": newModel.title ?? "", "status": newModel.status.toMap(), }; - body["gazRefillDetails"] = newModel.details.map((model) => { - "gasType": model.type.toMap(), - "cylinderSize": model.cylinderSize.toMap(), - "cylinderType": model.cylinderType.toMap(), - "requestedQty": model.requestedQuantity, - "deliverdQty": model.deliveredQuantity, - }).toList(); + body["gazRefillDetails"] = newModel.details + .map((model) => { + "gasType": model.type.toMap(), + "cylinderSize": model.cylinderSize.toMap(), + "cylinderType": model.cylinderType.toMap(), + "requestedQty": model.requestedQuantity, + "deliverdQty": model.deliveredQuantity, + }) + .toList(); Response response; - try{ - response = await ApiManager.instance.put( - URLs.updateGasRefill, - body: body - ); + try { + response = await ApiManager.instance.put(URLs.updateGasRefill, body: body); // response = await post( // Uri.parse("$host${URLs.updateGasRefill}/${newModel.id}"), // body: body, // ); stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { oldModel.fromGasRefillModel(newModel); notifyListeners(); } return response.statusCode; - - } catch(error) { + } catch (error) { return -1; } - } -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/hospitals_provider.dart b/lib/controllers/providers/api/hospitals_provider.dart index bdcb9fa..9a54490 100644 --- a/lib/controllers/providers/api/hospitals_provider.dart +++ b/lib/controllers/providers/api/hospitals_provider.dart @@ -8,13 +8,12 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/user.dart'; -class HospitalsProvider extends ChangeNotifier{ - +class HospitalsProvider extends ChangeNotifier { // number of items call in each request final pageItemNumber = 50; //reset provider data - void reset(){ + void reset() { _hospitals = null; _stateCode = null; } @@ -39,7 +38,7 @@ class HospitalsProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -49,58 +48,49 @@ class HospitalsProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getHospitals ({String host,User user,String title}) async { - if(_loading == true) - return -2; + Future getHospitals({String host, User user, String title}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ - response = await ApiManager.instance.post( - URLs.getHospitals, - body: { - "pageNumber":(hospitals?.length ?? 0) ~/pageItemNumber + 1, - "pageSize":50, - if(title != null && title.isNotEmpty) "name":title, - } - ); + try { + response = await ApiManager.instance.post(URLs.getHospitals, body: { + "pageNumber": (hospitals?.length ?? 0) ~/ pageItemNumber + 1, + "pageSize": 50, + if (title != null && title.isNotEmpty) "name": title, + }); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; - List _page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); - if(hospitals == null) - _hospitals = []; + List _page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); + if (hospitals == null) _hospitals = []; _hospitals.addAll(_page); - if(_page.length >= pageItemNumber){ + if (_page.length >= pageItemNumber) { _nextPage = true; - }else{ + } else { _nextPage = false; } } _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - Future> getHospitalsList ({String host,User user,String title}) async { + Future> getHospitalsList({String host, User user, String title}) async { Response response; - try{ - response = await ApiManager.instance.post( - URLs.getHospitals, - body: { - "pageSize":50, - if(title != null && title.isNotEmpty) "name":title, - } - ); + try { + response = await ApiManager.instance.post(URLs.getHospitals, body: { + "pageSize": 50, + if (title != null && title.isNotEmpty) "name": title, + }); // response = await get( // Uri.parse(host + URLs.getHospitals // + ( title == null || title.isEmpty ? "" : "?name=$title" )), @@ -110,20 +100,18 @@ class HospitalsProvider extends ChangeNotifier{ // ); _stateCode = response.statusCode; - List _page = []; - if(response.statusCode >= 200 && response.statusCode < 300) { + List _page = []; + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); } return _page; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return []; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/notifications_provider.dart b/lib/controllers/providers/api/notifications_provider.dart index 14afc4b..05ec673 100644 --- a/lib/controllers/providers/api/notifications_provider.dart +++ b/lib/controllers/providers/api/notifications_provider.dart @@ -6,13 +6,12 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/app_notification.dart'; import 'package:test_sa/models/user.dart'; -class NotificationsProvider extends ChangeNotifier{ - +class NotificationsProvider extends ChangeNotifier { // number of items call in each request final pageItemNumber = 20; //reset provider data - void reset(){ + void reset() { notifications = null; nextPage = true; stateCode = null; @@ -34,58 +33,50 @@ class NotificationsProvider extends ChangeNotifier{ // failed _loading = false bool isLoading; - /// return -2 if request in progress /// return -1 if error happen when sending request /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getNotifications ({ + Future getNotifications({ @required String host, @required User user, @required int hospitalId, }) async { - if(isLoading == true) - return -2; + if (isLoading == true) return -2; isLoading = true; notifyListeners(); Response response; - // userId = 397.toString(); // testing id to view data - try{ + // userId = 397.toString(); // testing id to view data + try { response = await get( - Uri.parse(URLs.getNotifications - +"?uid=${user.id}" - "&token=${user.token}" - "&page=${(notifications?.length ?? 0) ~/pageItemNumber}"), - headers: { - "Content-Type":"application/json; charset=utf-8" - } - ); + Uri.parse(URLs.getNotifications + + "?uid=${user.id}" + "&token=${user.token}" + "&page=${(notifications?.length ?? 0) ~/ pageItemNumber}"), + headers: {"Content-Type": "application/json; charset=utf-8"}); stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); - List _serviceRequestsPage = requestsListJson.map( - (request) => AppNotification.fromJson(request)).toList(); - if(notifications == null) - notifications = []; + List _serviceRequestsPage = requestsListJson.map((request) => AppNotification.fromJson(request)).toList(); + if (notifications == null) notifications = []; notifications.addAll(_serviceRequestsPage); - if(_serviceRequestsPage.length == pageItemNumber){ + if (_serviceRequestsPage.length == pageItemNumber) { nextPage = true; - }else{ + } else { nextPage = false; } } isLoading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { isLoading = false; stateCode = -1; notifyListeners(); return -1; } - } /// return -2 if request in progress @@ -93,35 +84,26 @@ class NotificationsProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future> getRecentNotifications ({ + Future> getRecentNotifications({ @required String host, @required User user, }) async { Response response; //userId = 397.toString(); // testing id to view data - try{ - response = await get( - Uri.parse(host+URLs.getNotifications - +"?uid=${user.id}&token=${user.token}"), - headers: { - "Content-Type":"application/json; charset=utf-8" - } - ); + try { + response = await get(Uri.parse(host + URLs.getNotifications + "?uid=${user.id}&token=${user.token}"), headers: {"Content-Type": "application/json; charset=utf-8"}); stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); - List _recentNotifications = requestsListJson.map( - (request) => AppNotification.fromJson(request)).toList(); + List _recentNotifications = requestsListJson.map((request) => AppNotification.fromJson(request)).toList(); return _recentNotifications; } return null; - - } catch(error) { + } catch (error) { return null; } - } -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/parts_provider.dart b/lib/controllers/providers/api/parts_provider.dart index 8603c86..7f8cca4 100644 --- a/lib/controllers/providers/api/parts_provider.dart +++ b/lib/controllers/providers/api/parts_provider.dart @@ -8,13 +8,12 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/part.dart'; import 'package:test_sa/models/user.dart'; -class PartsProvider extends ChangeNotifier{ - +class PartsProvider extends ChangeNotifier { // number of items call in each request final pageItemNumber = 50; //reset provider data - void reset(){ + void reset() { _parts = null; _stateCode = null; } @@ -39,7 +38,7 @@ class PartsProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -49,44 +48,36 @@ class PartsProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getParts ({String host,User user,String title}) async { - if(_loading == true) - return -2; + Future getParts({String host, User user, String title}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ - response = await ApiManager.instance.post( - URLs.getPartNumber, - body: { - if(title != null && title.isNotEmpty) - "partName":title - }); + try { + response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partName": title}); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - List _page = categoriesListJson.map((part) => Part.fromJson(part)).toList(); - if(parts == null) - _parts = []; + List _page = categoriesListJson.map((part) => Part.fromJson(part)).toList(); + if (parts == null) _parts = []; _parts.addAll(_page); - if(_page.length >= pageItemNumber){ + if (_page.length >= pageItemNumber) { _nextPage = true; - }else{ + } else { _nextPage = false; } } _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } /// return -2 if request in progress @@ -94,26 +85,19 @@ class PartsProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future> getPartsList ({String host,User user,String title}) async { + Future> getPartsList({String host, User user, String title}) async { Response response; - try{ - response = await ApiManager.instance.post( - URLs.getPartNumber, - body: { - if(title != null && title.isNotEmpty) - "partName":title - }); - List _page = []; - if(response.statusCode >= 200 && response.statusCode < 300) { + try { + response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partName": title}); + List _page = []; + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _page = categoriesListJson.map((part) => Part.fromJson(part)).toList(); } return _page; - } catch(error) { + } catch (error) { return []; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/regular_visits_provider.dart b/lib/controllers/providers/api/regular_visits_provider.dart index 3911949..42fb1dd 100644 --- a/lib/controllers/providers/api/regular_visits_provider.dart +++ b/lib/controllers/providers/api/regular_visits_provider.dart @@ -11,13 +11,12 @@ import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/models/visits/visits_group.dart'; import 'package:test_sa/models/visits/visits_search.dart'; -class RegularVisitsProvider extends ChangeNotifier{ - +class RegularVisitsProvider extends ChangeNotifier { // number of items call in each request final pageItemNumber = 20; //reset provider data - void reset(){ + void reset() { visits = null; nextPage = true; stateCode = null; @@ -46,50 +45,47 @@ class RegularVisitsProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getVisits ({ + Future getVisits({ @required String host, @required User user, - // VisitsSearch visitsSearch, + // VisitsSearch visitsSearch, }) async { - if(isLoading == true) - return -2; + if (isLoading == true) return -2; isLoading = true; - if(visits == null) notifyListeners(); + if (visits == null) notifyListeners(); Response response; //userId = 397.toString(); // testing id to view data - try{ - Map body = {}; + try { + Map body = {}; body.addAll(visitsSearch.toMap()); - body["pageNumber"] = (visits?.length ?? 0) ~/pageItemNumber +1; + body["pageNumber"] = (visits?.length ?? 0) ~/ pageItemNumber + 1; body["pageSize"] = pageItemNumber; response = await ApiManager.instance.post( URLs.getRegularVisits, body: body, ); - } catch(error) { + } catch (error) { isLoading = false; stateCode = -1; notifyListeners(); return -1; } stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received - try{ + try { List requestsListJson = json.decode(response.body)["data"]; - List _visits = requestsListJson.map( - (request) => Visit.fromJson(request) - ).toList(); + List _visits = requestsListJson.map((request) => Visit.fromJson(request)).toList(); visits ??= []; visits.addAll(_visits); - if(_visits.length == pageItemNumber){ + if (_visits.length == pageItemNumber) { nextPage = true; - }else{ + } else { nextPage = false; } - }catch(error){ + } catch (error) { Logger().e(error); isLoading = false; stateCode = -1; @@ -107,29 +103,29 @@ class RegularVisitsProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future updateGroupOfVisits ({ + Future updateGroupOfVisits({ @required String host, @required User user, VisitsGroup group, }) async { Response response; - try{ - Map body = group.toJson(); + try { + Map body = group.toJson(); response = await ApiManager.instance.post( URLs.getRegularVisits, body: body, ); stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received reset(); notifyListeners(); } return response.statusCode; - } catch(error) { + } catch (error) { isLoading = false; stateCode = -1; notifyListeners(); @@ -137,31 +133,26 @@ class RegularVisitsProvider extends ChangeNotifier{ } } - Future getPently({String host,User user,int id}) async { + Future getPently({String host, User user, int id}) async { Response response; - response = await get( - Uri.parse("$host${URLs.getPentry}/$id"), - headers: { - "Content-Type":"application/json; charset=utf-8" - } - ); + response = await get(Uri.parse("$host${URLs.getPentry}/$id"), headers: {"Content-Type": "application/json; charset=utf-8"}); Pentry pantry; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { pantry = Pentry.fromMap(json.decode(utf8.decode(response.bodyBytes))); } return pantry; } - Future updatePentry ({ + Future updatePentry({ @required String host, @required User user, @required Pentry pentry, @required Visit visit, }) async { - try{ + try { Response response; - Map body = pentry.toMap(visit.id); + Map body = pentry.toMap(visit.id); body["id"] = visit.id; body["assetId"] = visit.deviceId; body["ppmScheduleId"] = visit.ppmScheduleId; @@ -169,23 +160,19 @@ class RegularVisitsProvider extends ChangeNotifier{ // body["vChecklists"]?.addAll({}); // body["vCalibrationTools"]?.addAll({"visitId": visit.id,}); // body["vKits"]?.add({"visitId": visit.id,}); - response = await ApiManager.instance.put( - URLs.updatePentry, body: body - ); + response = await ApiManager.instance.put(URLs.updatePentry, body: body); // response = await post( // Uri.parse(host+URLs.updatePentry + "/${visit.id}"), // body: body, // ); - if(response.statusCode >= 200 && response.statusCode < 300) { - reset();//visit.status = pentry.ppmVisitStatus; + if (response.statusCode >= 200 && response.statusCode < 300) { + reset(); //visit.status = pentry.ppmVisitStatus; notifyListeners(); } return response.statusCode; - - } catch(error) { + } catch (error) { return -1; } - } -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index 167087b..17c24e8 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -37,7 +37,7 @@ class ServiceRequestsProvider extends ChangeNotifier { // list of user requests List serviceRequests; - List workOrders =[]; + List workOrders = []; // when requests in-process _loading = true // done _loading = true @@ -249,16 +249,15 @@ class ServiceRequestsProvider extends ChangeNotifier { } Future> searchWorkOrders({@required String callId}) async { - Response response; - try{ + try { var body = { - "pageSize": pageItemNumber, - "pageNumber":( (workOrders?.length ?? 0) ~/ pageItemNumber) + 1, - "callId": callId, - }; - response = await ApiManager.instance.post(URLs.searchWorkOrders, body: body); + "pageSize": pageItemNumber, + "pageNumber": ((workOrders?.length ?? 0) ~/ pageItemNumber) + 1, + "callId": callId, + }; + response = await ApiManager.instance.post(URLs.searchWorkOrders, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received @@ -272,9 +271,8 @@ class ServiceRequestsProvider extends ChangeNotifier { } } return workOrders; - - }catch(e){ - return []; + } catch (e) { + return []; } } diff --git a/lib/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart b/lib/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart index f0ff7e0..f98e16c 100644 --- a/lib/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/employee/assigned_to_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class AssignedToProvider extends ChangeNotifier{ - +class AssignedToProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _items = null; _stateCode = null; } @@ -32,7 +31,7 @@ class AssignedToProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -42,18 +41,17 @@ class AssignedToProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData ({String host,User user}) async { - if(_loading == true) - return -2; + Future getData({String host, User user}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getEmployees, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _items = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); @@ -61,13 +59,11 @@ class AssignedToProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart b/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart index af47a02..d6fe001 100644 --- a/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/employee/engineers_provider.dart @@ -9,10 +9,9 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:http/http.dart'; -class EngineersProvider extends ChangeNotifier{ - +class EngineersProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _items = null; _stateCode = null; } @@ -33,7 +32,7 @@ class EngineersProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -43,17 +42,17 @@ class EngineersProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData ({String host,User user}) async { - if(_loading == true) return -2; + Future getData({String host, User user}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getEngineers, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body); _items = categoriesListJson.map((type) => Engineer.fromJson(type)).toList(); @@ -61,13 +60,11 @@ class EngineersProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart index 7952a2f..9ae44e9 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_size_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class GasCylinderSizesProvider extends ChangeNotifier{ - +class GasCylinderSizesProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _items = null; _loading = null; _stateCode = null; @@ -33,7 +32,7 @@ class GasCylinderSizesProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -43,18 +42,20 @@ class GasCylinderSizesProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData ({String host,User user,}) async { - if(_loading == true) - return -2; + Future getData({ + String host, + User user, + }) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( - URLs.getGasCylinderSize, + URLs.getGasCylinderSize, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); @@ -62,13 +63,11 @@ class GasCylinderSizesProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart index 370370c..52e210c 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_cylinder_type_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class GasCylinderTypesProvider extends ChangeNotifier{ - +class GasCylinderTypesProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _items = null; _loading = null; _stateCode = null; @@ -33,7 +32,7 @@ class GasCylinderTypesProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -43,18 +42,20 @@ class GasCylinderTypesProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData ({String host,User user,}) async { - if(_loading == true) - return -2; + Future getData({ + String host, + User user, + }) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( - URLs.getGasCylinderType, + URLs.getGasCylinderType, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); @@ -62,13 +63,11 @@ class GasCylinderTypesProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart index dacc96d..ce7332a 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_status_provider.dart @@ -11,10 +11,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class GasStatusProvider extends ChangeNotifier{ - +class GasStatusProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _items = null; _loading = null; _stateCode = null; @@ -36,7 +35,7 @@ class GasStatusProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -46,17 +45,20 @@ class GasStatusProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData ({String host,User user,}) async { - if(_loading == true) return -2; + Future getData({ + String host, + User user, + }) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getGasStatus, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); @@ -64,13 +66,11 @@ class GasStatusProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart index 78e206f..e9b3836 100644 --- a/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/gas_refill/gas_types_provider.dart @@ -11,10 +11,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class GasTypesProvider extends ChangeNotifier{ - +class GasTypesProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _items = null; _loading = null; _stateCode = null; @@ -36,7 +35,7 @@ class GasTypesProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -46,17 +45,20 @@ class GasTypesProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData ({String host,User user,}) async { - if(_loading == true) return -2; + Future getData({ + String host, + User user, + }) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getGasTypes, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _items = categoriesListJson.map((item) => Lookup.fromJson(item)).toList(); @@ -64,13 +66,11 @@ class GasTypesProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart index 335aae1..26afccf 100644 --- a/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_status_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class PentryStatusProvider extends ChangeNotifier{ - +class PentryStatusProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _items = null; _stateCode = null; } @@ -32,7 +31,7 @@ class PentryStatusProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -42,19 +41,18 @@ class PentryStatusProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData ({String host,User user}) async { - if(_loading == true) - return -2; + Future getData({String host, User user}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getPentryStatus, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List listJson = json.decode(response.body)["data"]; _items = listJson.map((type) => Lookup.fromJson(type)).toList(); @@ -62,14 +60,11 @@ class PentryStatusProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { - + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart index 5690aa8..b69c310 100644 --- a/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_task_status_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class PentryTaskStatusProvider extends ChangeNotifier{ - +class PentryTaskStatusProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _items = null; _stateCode = null; } @@ -32,7 +31,7 @@ class PentryTaskStatusProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -42,19 +41,18 @@ class PentryTaskStatusProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData ({String host,User user}) async { - if(_loading == true) - return -2; + Future getData({String host, User user}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getPentryTaskStatus, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _items = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); @@ -62,14 +60,11 @@ class PentryTaskStatusProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { - + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart b/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart index f86f15b..ab0f7d7 100644 --- a/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/pentry/pentry_visit_status_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class PentryVisitStatusProvider extends ChangeNotifier{ - +class PentryVisitStatusProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _items = null; _stateCode = null; } @@ -32,7 +31,7 @@ class PentryVisitStatusProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -42,19 +41,18 @@ class PentryVisitStatusProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData ({String host,User user}) async { - if(_loading == true) - return -2; + Future getData({String host, User user}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getPentryVisitStatus, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List listJson = json.decode(response.body)["data"]; _items = listJson.map((type) => Lookup.fromJson(type)).toList(); @@ -62,13 +60,11 @@ class PentryVisitStatusProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart index 775dd10..2c348e0 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_defect_types_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class ServiceRequestDefectTypesProvider extends ChangeNotifier{ - +class ServiceRequestDefectTypesProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _items = null; _stateCode = null; } @@ -32,7 +31,7 @@ class ServiceRequestDefectTypesProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -42,18 +41,17 @@ class ServiceRequestDefectTypesProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData ({String host,User user}) async { - if(_loading == true) - return -2; + Future getData({String host, User user}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getServiceReportDefectTypes, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List listJson = json.decode(response.body)["data"]; _items = listJson.map((type) => Lookup.fromJson(type)).toList(); @@ -61,14 +59,11 @@ class ServiceRequestDefectTypesProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { - + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart index 59fc821..9dc17ab 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class ServiceReportLastCallsProvider extends ChangeNotifier{ - +class ServiceReportLastCallsProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _calls = null; _loading = null; _stateCode = null; @@ -33,7 +32,7 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -43,13 +42,12 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getCalls ({String host,User user,int serviceStatus}) async { - if(_loading == true) - return -2; + Future getCalls({String host, User user, int serviceStatus}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { // todo request new api from backend to make filter work response = await ApiManager.instance.get( URLs.getServiceReportLastCalls, @@ -61,7 +59,7 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{ // ), // ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _calls = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); @@ -69,13 +67,11 @@ class ServiceReportLastCallsProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart index d25644c..c9160a1 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_priority_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class ServiceRequestPriorityProvider extends ChangeNotifier{ - +class ServiceRequestPriorityProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _items = null; _stateCode = null; } @@ -32,7 +31,7 @@ class ServiceRequestPriorityProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -42,19 +41,18 @@ class ServiceRequestPriorityProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData ({String host,User user}) async { - if(_loading == true) - return -2; + Future getData({String host, User user}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getServiceReportPriority, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List listJson = json.decode(response.body)["data"]; _items = listJson.map((type) => Lookup.fromJson(type)).toList(); @@ -62,13 +60,11 @@ class ServiceRequestPriorityProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart index 6a4808f..e2f686c 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_reasons_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class ServiceReportReasonsProvider extends ChangeNotifier{ - +class ServiceReportReasonsProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _reasons = null; _stateCode = null; } @@ -32,7 +31,7 @@ class ServiceReportReasonsProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -42,18 +41,17 @@ class ServiceReportReasonsProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getTypes ({String host,User user}) async { - if(_loading == true) - return -2; + Future getTypes({String host, User user}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getServiceReportReasons, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _reasons = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); @@ -61,13 +59,11 @@ class ServiceReportReasonsProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_status_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_status_provider.dart index a05aa23..fed9a24 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_status_provider.dart @@ -11,10 +11,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class ServiceReportStatusProvider extends ChangeNotifier{ - +class ServiceReportStatusProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _status = null; _stateCode = null; } @@ -35,7 +34,7 @@ class ServiceReportStatusProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -45,19 +44,18 @@ class ServiceReportStatusProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getTypes ({String host,User user}) async { - if(_loading == true) - return -2; + Future getTypes({String host, User user}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getServiceReportStatus, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _status = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); @@ -65,14 +63,11 @@ class ServiceReportStatusProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { - + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart index 084daf1..ced86e8 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_types_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class ServiceReportTypesProvider extends ChangeNotifier{ - +class ServiceReportTypesProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _types = null; _stateCode = null; } @@ -32,7 +31,7 @@ class ServiceReportTypesProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -42,18 +41,17 @@ class ServiceReportTypesProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getTypes ({String host,User user}) async { - if(_loading == true) - return -2; + Future getTypes({String host, User user}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getServiceReportTypes, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _types = categoriesListJson.map((type) => Lookup.fromJson(type)).toList(); @@ -61,13 +59,11 @@ class ServiceReportTypesProvider extends ChangeNotifier{ _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart index 48da78f..c28e425 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_types_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class ServiceStatusProvider extends ChangeNotifier{ - +class ServiceStatusProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _statuses = null; _stateCode = null; } @@ -32,7 +31,7 @@ class ServiceStatusProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -42,33 +41,29 @@ class ServiceStatusProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getTypes ({String host,User user}) async { - if(_loading == true) - return -2; + Future getTypes({String host, User user}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getAssetTypes, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList(); - } _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart index 91b7d4c..27de151 100644 --- a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_status_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class ServiceRequestStatusProvider extends ChangeNotifier{ - +class ServiceRequestStatusProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _statuses = null; _stateCode = null; } @@ -32,7 +31,7 @@ class ServiceRequestStatusProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -42,33 +41,29 @@ class ServiceRequestStatusProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData ({String host,User user}) async { - if(_loading == true) - return -2; + Future getData({String host, User user}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getServiceRequestStatus, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList(); - } _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart index ec2e672..cfc49f7 100644 --- a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class ServiceRequestedThroughProvider extends ChangeNotifier{ - +class ServiceRequestedThroughProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _statuses = null; _stateCode = null; } @@ -32,7 +31,7 @@ class ServiceRequestedThroughProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -42,33 +41,29 @@ class ServiceRequestedThroughProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData ({String host,User user}) async { - if(_loading == true) - return -2; + Future getData({String host, User user}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getServiceRequestThrough, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList(); - } _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart index 76e6c7c..a0c6cad 100644 --- a/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class ServiceRequestTypeProvider extends ChangeNotifier{ - +class ServiceRequestTypeProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _statuses = null; _stateCode = null; } @@ -32,7 +31,7 @@ class ServiceRequestTypeProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -42,33 +41,29 @@ class ServiceRequestTypeProvider extends ChangeNotifier{ /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getData ({String host,User user}) async { - if(_loading == true) - return -2; + Future getData({String host, User user}) async { + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ + try { response = await ApiManager.instance.get( URLs.getServiceRequestTypes, ); _stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List categoriesListJson = json.decode(response.body)["data"]; _statuses = categoriesListJson.map((e) => Lookup.fromJson(e)).toList(); - } _loading = false; notifyListeners(); return response.statusCode; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return -1; } - } - -} \ No newline at end of file +} diff --git a/lib/controllers/providers/settings/app_settings.dart b/lib/controllers/providers/settings/app_settings.dart index 2d09c2a..65824cc 100644 --- a/lib/controllers/providers/settings/app_settings.dart +++ b/lib/controllers/providers/settings/app_settings.dart @@ -3,4 +3,4 @@ class ASettings { static final String host = "host"; static final String language = "language"; static final String speechToText = "speech_to_text"; -} \ No newline at end of file +} diff --git a/lib/controllers/providers/settings/setting_provider.dart b/lib/controllers/providers/settings/setting_provider.dart index 118b24c..0e8db56 100644 --- a/lib/controllers/providers/settings/setting_provider.dart +++ b/lib/controllers/providers/settings/setting_provider.dart @@ -7,9 +7,7 @@ import 'package:flutter/foundation.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../settings/app_settings.dart'; - -class SettingProvider extends ChangeNotifier{ - +class SettingProvider extends ChangeNotifier { resetSettings() async { SharedPreferences prefs = await SharedPreferences.getInstance(); user = null; @@ -58,40 +56,38 @@ class SettingProvider extends ChangeNotifier{ } // call loadSharedPreferences when provider initialise - SettingProvider(){ + SettingProvider() { loadSharedPreferences(); } // get app setting Future loadSharedPreferences() async { - SharedPreferences prefs = await SharedPreferences.getInstance(); - if(prefs.containsKey(ASettings.language)){ + if (prefs.containsKey(ASettings.language)) { _language = prefs.getString(ASettings.language); - }else{ - _language = 'en'; + } else { + _language = 'en'; } - if(prefs.containsKey(ASettings.speechToText)){ + if (prefs.containsKey(ASettings.speechToText)) { _speechToText = prefs.getString(ASettings.speechToText); - }else{ - _speechToText = 'ar'; + } else { + _speechToText = 'ar'; } - if(prefs.containsKey(ASettings.user)){ + if (prefs.containsKey(ASettings.user)) { String userJson = prefs.getString(ASettings.user); user = User.fromJson(json.decode(userJson)); } - if(prefs.containsKey(ASettings.host)){ + if (prefs.containsKey(ASettings.host)) { _host = prefs.getString(ASettings.host); - } else{ + } else { _host = URLs.host1; } isLoaded = true; notifyListeners(); } - -} \ No newline at end of file +} diff --git a/lib/controllers/validator/validator.dart b/lib/controllers/validator/validator.dart index 0eb09e9..bb84dfc 100644 --- a/lib/controllers/validator/validator.dart +++ b/lib/controllers/validator/validator.dart @@ -1,24 +1,22 @@ -class Validator{ +class Validator { // private constructor to avoid create class object Validator._(); // check if string not empty and has value - static bool hasValue(String string){ - if (string == null || string.isEmpty) - return false; + static bool hasValue(String string) { + if (string == null || string.isEmpty) return false; return true; } // Return true if email is valid. Otherwise, return false - static bool isEmail(String email){ + static bool isEmail(String email) { RegExp exp = new RegExp(r"^[a-zA-Z0-9.a-zA-Z0-9.!#$%&'*+-/=?^_`{|}~]+@[a-zA-Z0-9]+\.[a-zA-Z]+"); - if(exp.hasMatch(email)) - return true; + if (exp.hasMatch(email)) return true; return false; } // Return true if phone number is valid. Otherwise, return false - static bool isPhoneNumber(String phoneNumber){ + static bool isPhoneNumber(String phoneNumber) { if (phoneNumber == null || phoneNumber.isEmpty) { return false; } @@ -26,17 +24,14 @@ class Validator{ final pattern = r'^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$'; final regExp = RegExp(pattern); - if (regExp.hasMatch(phoneNumber)) - return true; + if (regExp.hasMatch(phoneNumber)) return true; return false; } // Return true if password is valid. Otherwise, return false - static bool isValidPassword(String password){ - if(password == null) - return false; - if(password.length <6) - return false; + static bool isValidPassword(String password) { + if (password == null) return false; + if (password.length < 6) return false; return true; } @@ -55,4 +50,4 @@ class Validator{ } return int.tryParse(value) != null; } -} \ No newline at end of file +} diff --git a/lib/main.dart b/lib/main.dart index 2680551..3939c2d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -65,17 +65,16 @@ void main() async { WidgetsFlutterBinding.ensureInitialized(); if (Platform.isIOS) { await Firebase.initializeApp( - options: const FirebaseOptions(apiKey: "AIzaSyACQkSleNwU1jzEKR5ho1uSfZERokwwAbc", appId: "1:973582662416:ios:bc4a8061444c6a08fbc395", messagingSenderId: "973582662416", projectId: "atoms-fb912"), + options: + const FirebaseOptions(apiKey: "AIzaSyACQkSleNwU1jzEKR5ho1uSfZERokwwAbc", appId: "1:973582662416:ios:bc4a8061444c6a08fbc395", messagingSenderId: "973582662416", projectId: "atoms-fb912"), ); } else { await Firebase.initializeApp(); } - runApp( - ChangeNotifierProvider( - create: (_) => SettingProvider(), - child: MyApp(), - ) - ); + runApp(ChangeNotifierProvider( + create: (_) => SettingProvider(), + child: MyApp(), + )); } class MyApp extends StatelessWidget { @@ -127,18 +126,12 @@ class MyApp extends StatelessWidget { title: 'ATOMS', debugShowCheckedModeBanner: false, theme: ThemeData( - fontFamily: "Poppins", - //canvasColor: AColors.primaryColor, - scaffoldBackgroundColor: AColors.scaffoldBackgroundColor, - primaryColor: AColors.primaryColor, - indicatorColor: AColors.primaryColor, - colorScheme: const ColorScheme.light( - primary: AColors.primaryColor, - onPrimary: Colors.white, - secondary: AColors.secondaryColor, - onSecondary: Colors.white - ) - ), + fontFamily: "Poppins", + //canvasColor: AColors.primaryColor, + scaffoldBackgroundColor: AColors.scaffoldBackgroundColor, + primaryColor: AColors.primaryColor, + indicatorColor: AColors.primaryColor, + colorScheme: const ColorScheme.light(primary: AColors.primaryColor, onPrimary: Colors.white, secondary: AColors.secondaryColor, onSecondary: Colors.white)), localizationsDelegates: const [ // ... app-specific localization delegate[s] here AppLocalization.delegate, @@ -153,31 +146,28 @@ class MyApp extends StatelessWidget { locale: Locale(_settingProvider.language ?? 'en'), initialRoute: SplashScreen.id, routes: { - SplashScreen.id: (_)=> const SplashScreen(), - LandPage.id: (_)=> const LandPage(), - Login.id: (_)=> Login(), - Register.id: (_)=> Register(), - ProfilePage.id: (_)=> ProfilePage(), - ReportIssuesPage.id: (_)=> const ReportIssuesPage(), - RequestGasRefill.id: (_)=> const RequestGasRefill(), - CreateRequestPage.id: (_)=> CreateRequestPage(), - SingleHospitalPicker.id: (_)=> SingleHospitalPicker(), - SingleDevicePicker.id: (_)=> SingleDevicePicker(), - SingleDepartmentPicker.id: (_)=> SingleDepartmentPicker(), - ServiceRequestsPage.id: (_)=> ServiceRequestsPage(), - NotificationsPage.id: (_)=> NotificationsPage(), - FutureRequestServiceDetails.id: (_)=> FutureRequestServiceDetails(), - PreventiveMaintenanceVisitsPage.id: (_)=> PreventiveMaintenanceVisitsPage(), - RegularVisitsPage.id: (_)=> RegularVisitsPage(), - TrackGasRefillPage.id: (_)=> const TrackGasRefillPage(), - RequestDeviceTransfer.id: (_)=> const RequestDeviceTransfer(), - TrackDeviceTransferPage.id: (_)=> const TrackDeviceTransferPage(), + SplashScreen.id: (_) => const SplashScreen(), + LandPage.id: (_) => const LandPage(), + Login.id: (_) => Login(), + Register.id: (_) => Register(), + ProfilePage.id: (_) => ProfilePage(), + ReportIssuesPage.id: (_) => const ReportIssuesPage(), + RequestGasRefill.id: (_) => const RequestGasRefill(), + CreateRequestPage.id: (_) => CreateRequestPage(), + SingleHospitalPicker.id: (_) => SingleHospitalPicker(), + SingleDevicePicker.id: (_) => SingleDevicePicker(), + SingleDepartmentPicker.id: (_) => SingleDepartmentPicker(), + ServiceRequestsPage.id: (_) => ServiceRequestsPage(), + NotificationsPage.id: (_) => NotificationsPage(), + FutureRequestServiceDetails.id: (_) => FutureRequestServiceDetails(), + PreventiveMaintenanceVisitsPage.id: (_) => PreventiveMaintenanceVisitsPage(), + RegularVisitsPage.id: (_) => RegularVisitsPage(), + TrackGasRefillPage.id: (_) => const TrackGasRefillPage(), + RequestDeviceTransfer.id: (_) => const RequestDeviceTransfer(), + TrackDeviceTransferPage.id: (_) => const TrackDeviceTransferPage(), }, ), ), ); } } - - - diff --git a/lib/models/app_notification.dart b/lib/models/app_notification.dart index d199a07..339e312 100644 --- a/lib/models/app_notification.dart +++ b/lib/models/app_notification.dart @@ -1,6 +1,6 @@ import 'package:test_sa/views/pages/user/requests/future_request_service_details.dart'; -class AppNotification{ +class AppNotification { String requestId; String title; String description; @@ -15,13 +15,12 @@ class AppNotification{ this.path, }); - factory AppNotification.fromJson(Map parsedJson){ + factory AppNotification.fromJson(Map parsedJson) { return AppNotification( - requestId: parsedJson["nid"], - title: parsedJson["call_client"] ?? parsedJson["title"], - description: parsedJson["task_description"], - date: parsedJson["creation_date"], - path: FutureRequestServiceDetails.id - ); + requestId: parsedJson["nid"], + title: parsedJson["call_client"] ?? parsedJson["title"], + description: parsedJson["task_description"], + date: parsedJson["creation_date"], + path: FutureRequestServiceDetails.id); } -} \ No newline at end of file +} diff --git a/lib/models/department.dart b/lib/models/department.dart index 4dfe4cd..36b744a 100644 --- a/lib/models/department.dart +++ b/lib/models/department.dart @@ -1,4 +1,4 @@ -class Department{ +class Department { int id; String name; @@ -7,16 +7,16 @@ class Department{ this.name, }); - factory Department.fromJson(Map parsedJson){ + factory Department.fromJson(Map parsedJson) { return Department( id: parsedJson["id"], name: parsedJson["name"], ); } - factory Department.fromDepartment(Department department){ + factory Department.fromDepartment(Department department) { return Department( id: department?.id, name: department?.name, ); } -} \ No newline at end of file +} diff --git a/lib/models/device/device_transfer.dart b/lib/models/device/device_transfer.dart index d76728b..acda118 100644 --- a/lib/models/device/device_transfer.dart +++ b/lib/models/device/device_transfer.dart @@ -5,7 +5,7 @@ import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/lookup.dart'; -class DeviceTransfer{ +class DeviceTransfer { int id; String userId; String title; @@ -22,12 +22,12 @@ class DeviceTransfer{ this.receiver, }); - bool validate(){ - if(device == null) return false; + bool validate() { + if (device == null) return false; return receiver.validate(); } - fromDeviceTransfer(DeviceTransfer old){ + fromDeviceTransfer(DeviceTransfer old) { id = old.id; title = old.title; userId = old.userId; @@ -40,7 +40,7 @@ class DeviceTransfer{ this.receiver = receiver; } - factory DeviceTransfer.fromJson(Map parsedJson){ + factory DeviceTransfer.fromJson(Map parsedJson) { return DeviceTransfer( id: parsedJson["id"], title: parsedJson["transferCode"], @@ -56,16 +56,13 @@ class DeviceTransfer{ workingHours: parsedJson["senderWorkingHours"], userId: parsedJson["senderAssignedEmployeeId"], userName: parsedJson["senderAssignedEmployeeName"], - client: Hospital( - id: parsedJson["senderSiteId"], - name: parsedJson["senderSiteName"] - ), + client: Hospital(id: parsedJson["senderSiteId"], name: parsedJson["senderSiteName"]), department: Department( id: parsedJson["senderDepartmentId"], name: parsedJson["senderDepartmentName"], ), // todo add segnature - signature: URLs.getFileUrl(parsedJson["senderAttachmentName"]), + signature: URLs.getFileUrl(parsedJson["senderAttachmentName"]), status: Lookup( id: parsedJson["senderMachineStatusId"], name: parsedJson["senderMachineStatusName"], @@ -77,10 +74,7 @@ class DeviceTransfer{ workingHours: parsedJson["receiverWorkingHours"], userId: parsedJson["receiverAssignedEmployeeId"], userName: parsedJson["receiverAssignedEmployeeName"], - client: Hospital( - id: parsedJson["destSiteId"], - name: parsedJson["destSiteName"] - ), + client: Hospital(id: parsedJson["destSiteId"], name: parsedJson["destSiteName"]), department: Department( id: parsedJson["destDepartmentId"], name: parsedJson["destDepartmentName"], @@ -95,4 +89,3 @@ class DeviceTransfer{ ); } } - diff --git a/lib/models/device/device_transfer_info.dart b/lib/models/device/device_transfer_info.dart index 31cae58..ca20907 100644 --- a/lib/models/device/device_transfer_info.dart +++ b/lib/models/device/device_transfer_info.dart @@ -2,7 +2,7 @@ import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/lookup.dart'; -class DeviceTransferInfo{ +class DeviceTransferInfo { String userId; String comment; Hospital client; @@ -25,25 +25,25 @@ class DeviceTransferInfo{ this.status, }); - MaptoJson(bool isSender){ - Map body = {}; + Map toJson(bool isSender) { + Map body = {}; final baseKey = isSender ? "sender_" : "receiver_"; - if(comment != null && comment.isNotEmpty) body["${baseKey}comment"] = comment; - if(workingHours != null && workingHours.isNotEmpty) body["${baseKey}working_hours"] = workingHours; - if(travelingHours != null && travelingHours.isNotEmpty) body["${baseKey}travel_hours"] = travelingHours; - if(status != null) body["${baseKey}status"] = status.id.toString(); - if(signature != null && signature.isNotEmpty) body["${baseKey}image"] = signature; + if (comment != null && comment.isNotEmpty) body["${baseKey}comment"] = comment; + if (workingHours != null && workingHours.isNotEmpty) body["${baseKey}working_hours"] = workingHours; + if (travelingHours != null && travelingHours.isNotEmpty) body["${baseKey}travel_hours"] = travelingHours; + if (status != null) body["${baseKey}status"] = status.id.toString(); + if (signature != null && signature.isNotEmpty) body["${baseKey}image"] = signature; return body; } - bool validate(){ - if(client == null) return false; - if(department == null) return false; + bool validate() { + if (client == null) return false; + if (department == null) return false; return true; } - fromDetails(DeviceTransferInfo old,{bool withSignature = true}){ + fromDetails(DeviceTransferInfo old, {bool withSignature = true}) { userId = old.userId; userName = old.userName; client = Hospital.fromHospital(old.client); @@ -51,11 +51,11 @@ class DeviceTransferInfo{ workingHours = old.workingHours; travelingHours = old.travelingHours; comment = old.comment; - if(withSignature) signature = old.signature; + if (withSignature) signature = old.signature; status = old.status; } - factory DeviceTransferInfo.fromJson(Map parsedJson,String key){ + factory DeviceTransferInfo.fromJson(Map parsedJson, String key) { return DeviceTransferInfo( workingHours: parsedJson["${key}working_hours"], travelingHours: parsedJson["${key}travel_hours"], @@ -63,19 +63,15 @@ class DeviceTransferInfo{ signature: parsedJson["${key}image"], userId: parsedJson["${key}id"], comment: parsedJson["${key}comment"], - client: Hospital( - id: parsedJson["${key}SiteId"], - name: parsedJson["${key}SiteName"] - ), + client: Hospital(id: parsedJson["${key}SiteId"], name: parsedJson["${key}SiteName"]), department: Department( id: parsedJson["${key}DepartmentId"], name: parsedJson["${key}DepartmentName"], ), status: Lookup( - id: parsedJson["${key}status"], - name: parsedJson["${key}status"], + id: parsedJson["${key}status"], + name: parsedJson["${key}status"], ), ); } } - diff --git a/lib/models/device/model.dart b/lib/models/device/model.dart index bd49b25..2573284 100644 --- a/lib/models/device/model.dart +++ b/lib/models/device/model.dart @@ -8,15 +8,16 @@ class ModelDefinition { String replacementDate; int lifeSpan; - ModelDefinition( - {this.id, - this.assetName, - this.modelDefCode, - this.modelName, - this.manufacturerName, - this.supplierName, - this.replacementDate, - this.lifeSpan,}); + ModelDefinition({ + this.id, + this.assetName, + this.modelDefCode, + this.modelName, + this.manufacturerName, + this.supplierName, + this.replacementDate, + this.lifeSpan, + }); Map toJson() { final Map data = {}; @@ -32,7 +33,7 @@ class ModelDefinition { } factory ModelDefinition.fromJson(Map map) { - if(map == null) return null; + if (map == null) return null; return ModelDefinition( id: map['id'] as int, assetName: map['assetName'] as String, @@ -44,4 +45,4 @@ class ModelDefinition { lifeSpan: map['lifeSpan'] as int, ); } -} \ No newline at end of file +} diff --git a/lib/models/engineer.dart b/lib/models/engineer.dart index d8b15f0..096dd31 100644 --- a/lib/models/engineer.dart +++ b/lib/models/engineer.dart @@ -1,4 +1,4 @@ -class Engineer{ +class Engineer { String id; String name; @@ -7,15 +7,13 @@ class Engineer{ this.name, }); - - - factory Engineer.fromJson(Map parsedJson){ + factory Engineer.fromJson(Map parsedJson) { return Engineer( id: parsedJson["userId"] ?? parsedJson["id"], name: parsedJson["userName"] ?? parsedJson["name"], ); } - factory Engineer.fromEngineer(Engineer department){ + factory Engineer.fromEngineer(Engineer department) { return Engineer( id: department?.id, name: department?.name, @@ -23,10 +21,7 @@ class Engineer{ } @override - bool operator == (Object other) => - identical(this, other) || other is Engineer && - id == other.id; - + bool operator ==(Object other) => identical(this, other) || other is Engineer && id == other.id; @override int get hashCode => id.hashCode; @@ -37,5 +32,4 @@ class Engineer{ 'name': name, }; } - -} \ No newline at end of file +} diff --git a/lib/models/enums/user_types.dart b/lib/models/enums/user_types.dart index 2d608f7..41df213 100644 --- a/lib/models/enums/user_types.dart +++ b/lib/models/enums/user_types.dart @@ -1,4 +1,4 @@ -enum UsersTypes{ +enum UsersTypes { engineer, // 0 normal_user, // 1 -} \ No newline at end of file +} diff --git a/lib/models/gas_refill/gas_refill_details.dart b/lib/models/gas_refill/gas_refill_details.dart index 2f8d55f..02d31cf 100644 --- a/lib/models/gas_refill/gas_refill_details.dart +++ b/lib/models/gas_refill/gas_refill_details.dart @@ -1,6 +1,6 @@ import 'package:test_sa/models/lookup.dart'; -class GasRefillDetails{ +class GasRefillDetails { Lookup type; Lookup cylinderSize; Lookup cylinderType; @@ -15,13 +15,14 @@ class GasRefillDetails{ this.deliveredQuantity, }); - bool validate(){ + bool validate() { //if(cylinderSize == null) return false; - if(type == null) return false; - if(requestedQuantity == null) return false; + if (type == null) return false; + if (requestedQuantity == null) return false; return true; } - factory GasRefillDetails.fromJson(Map parsedJson){ + + factory GasRefillDetails.fromJson(Map parsedJson) { return GasRefillDetails( type: Lookup.fromJson(parsedJson["gasType"]), cylinderSize: Lookup.fromJson(parsedJson["cylinderSize"]), @@ -31,14 +32,13 @@ class GasRefillDetails{ ); } - factory GasRefillDetails.fromDetails(GasRefillDetails details){ + factory GasRefillDetails.fromDetails(GasRefillDetails details) { return GasRefillDetails( type: Lookup.fromStatus(details.type), - cylinderSize:Lookup.fromStatus(details.cylinderSize), - cylinderType:Lookup.fromStatus(details.cylinderType), + cylinderSize: Lookup.fromStatus(details.cylinderSize), + cylinderType: Lookup.fromStatus(details.cylinderType), requestedQuantity: details.requestedQuantity, deliveredQuantity: details.deliveredQuantity, ); } } - diff --git a/lib/models/gas_refill/gas_refill_model.dart b/lib/models/gas_refill/gas_refill_model.dart index ae3331f..4cc4320 100644 --- a/lib/models/gas_refill/gas_refill_model.dart +++ b/lib/models/gas_refill/gas_refill_model.dart @@ -1,7 +1,7 @@ import 'package:test_sa/models/gas_refill/gas_refill_details.dart'; import 'package:test_sa/models/lookup.dart'; -class GasRefillModel{ +class GasRefillModel { int id; //String userId; String clientName; @@ -18,14 +18,14 @@ class GasRefillModel{ this.details, }); - bool validate(){ - if(title == null) return false; - if(status == null) return false; - if(details == null && details.isEmpty) return false; + bool validate() { + if (title == null) return false; + if (status == null) return false; + if (details == null && details.isEmpty) return false; return true; } - fromGasRefillModel(GasRefillModel model){ + fromGasRefillModel(GasRefillModel model) { id = model.id; //userId = model.userId; clientName = model.clientName; @@ -34,9 +34,9 @@ class GasRefillModel{ details = model.details.map((e) => GasRefillDetails.fromDetails(e)).toList(); } - factory GasRefillModel.fromJson(Map parsedJson){ + factory GasRefillModel.fromJson(Map parsedJson) { List details = []; - if(parsedJson["gazRefillDetails"] != null){ + if (parsedJson["gazRefillDetails"] != null) { List list = parsedJson["gazRefillDetails"]; details = list.map((e) => GasRefillDetails.fromJson(e)).toList(); } @@ -44,11 +44,9 @@ class GasRefillModel{ id: parsedJson["id"], //userId: parsedJson["uid"], title: parsedJson["gazRefillNo"], - clientName: parsedJson["site"] == null ? null: - parsedJson["site"]["custName"], + clientName: parsedJson["site"] == null ? null : parsedJson["site"]["custName"], status: Lookup.fromJson(parsedJson["status"]), details: details, ); } } - diff --git a/lib/models/hospital.dart b/lib/models/hospital.dart index 71cde19..d59eda1 100644 --- a/lib/models/hospital.dart +++ b/lib/models/hospital.dart @@ -1,4 +1,4 @@ -class Hospital{ +class Hospital { int id; int customerCode; String name; @@ -11,31 +11,15 @@ class Hospital{ this.buildings, }); - - factory Hospital.fromJson(Map parsedJson){ - return Hospital( - id: parsedJson["id"], - name: parsedJson["custName"], - customerCode: parsedJson["customerCode"], - buildings: parsedJson["buildings"] - ); + factory Hospital.fromJson(Map parsedJson) { + return Hospital(id: parsedJson["id"], name: parsedJson["custName"], customerCode: parsedJson["customerCode"], buildings: parsedJson["buildings"]); } - factory Hospital.fromHospital(Hospital hospital){ - return Hospital( - id: hospital?.id, - name: hospital?.name, - customerCode: hospital?.customerCode, - buildings:hospital?.buildings - ); + factory Hospital.fromHospital(Hospital hospital) { + return Hospital(id: hospital?.id, name: hospital?.name, customerCode: hospital?.customerCode, buildings: hospital?.buildings); } Map toMap() { - return { - 'id': id, - 'customerCode': customerCode, - 'custName': name, - "buildings":buildings - }; + return {'id': id, 'customerCode': customerCode, 'custName': name, "buildings": buildings}; } -} \ No newline at end of file +} diff --git a/lib/models/issue.dart b/lib/models/issue.dart index cc186eb..b56acbd 100644 --- a/lib/models/issue.dart +++ b/lib/models/issue.dart @@ -1,4 +1,4 @@ -class Issue{ +class Issue { String title; String userId; List reports; @@ -15,13 +15,13 @@ class Issue{ this.serviceRequestId, }); - Map toMap(){ - Map map ={}; - if(title != null) map["title"] = title; - if(reports != null) map["issue_report"] = reports.toString(); - if(userId != null) map["uid"] = userId; - if(description != null) map["desc"] = description; - if(serviceRequestId != null) map["call_id"] = serviceRequestId; + Map toMap() { + Map map = {}; + if (title != null) map["title"] = title; + if (reports != null) map["issue_report"] = reports.toString(); + if (userId != null) map["uid"] = userId; + if (description != null) map["desc"] = description; + if (serviceRequestId != null) map["call_id"] = serviceRequestId; return map; } -} \ No newline at end of file +} diff --git a/lib/models/lookup.dart b/lib/models/lookup.dart index c523c48..e4deb99 100644 --- a/lib/models/lookup.dart +++ b/lib/models/lookup.dart @@ -1,5 +1,4 @@ -class Lookup{ - +class Lookup { //old name label final String name; // old name key @@ -13,25 +12,17 @@ class Lookup{ }); @override - bool operator == (Object other) => - identical(this, other) || other is Lookup && - ((value != null && value == other.value) - || ( id != null && id == other.id )) ; - + bool operator ==(Object other) => identical(this, other) || other is Lookup && ((value != null && value == other.value) || (id != null && id == other.id)); @override int get hashCode => id?.hashCode ?? value?.hashCode; - toMap(){ - return { - "id": id, - "name": name, - "value": value - }; + toMap() { + return {"id": id, "name": name, "value": value}; } - factory Lookup.fromStatus(Lookup old){ - if(old == null) return null; + factory Lookup.fromStatus(Lookup old) { + if (old == null) return null; return Lookup( name: old.name, id: old.id, @@ -39,8 +30,8 @@ class Lookup{ ); } - factory Lookup.fromJson(Map parsedJson){ - if(parsedJson == null) return null; + factory Lookup.fromJson(Map parsedJson) { + if (parsedJson == null) return null; return Lookup( name: parsedJson["name"], id: parsedJson["id"], @@ -64,4 +55,4 @@ class Lookup{ // id: parsedJson["id"], // ); // } -} \ No newline at end of file +} diff --git a/lib/models/pantry/calibration_tools.dart b/lib/models/pantry/calibration_tools.dart index 4207c99..324be41 100644 --- a/lib/models/pantry/calibration_tools.dart +++ b/lib/models/pantry/calibration_tools.dart @@ -1,6 +1,6 @@ import 'package:test_sa/models/lookup.dart'; -class CalibrationTool{ +class CalibrationTool { int id; Lookup assetsNumber; DateTime dataOfTesting; @@ -13,16 +13,16 @@ class CalibrationTool{ Map toMap(int visitId) { return { - "id":id ?? 0, + "id": id ?? 0, "visitId": visitId, - if(assetsNumber != null) 'assetId': (assetsNumber?.id).toString(), - if(dataOfTesting != null) 'calibrationDateOfTesters': dataOfTesting.toIso8601String(), + if (assetsNumber != null) 'assetId': (assetsNumber?.id).toString(), + if (dataOfTesting != null) 'calibrationDateOfTesters': dataOfTesting.toIso8601String(), }; } factory CalibrationTool.fromMap(Map map) { return CalibrationTool( - assetsNumber: Lookup(id: map["assetId"],name: map['assetSerialNo']), + assetsNumber: Lookup(id: map["assetId"], name: map['assetSerialNo']), dataOfTesting: DateTime.tryParse(map['calibrationDateOfTesters'] ?? ""), ); } @@ -37,4 +37,4 @@ class CalibrationTool{ dataOfTesting: dataOfTesting ?? this.dataOfTesting, ); } -} \ No newline at end of file +} diff --git a/lib/models/pantry/contact.dart b/lib/models/pantry/contact.dart index 50748be..9f0182d 100644 --- a/lib/models/pantry/contact.dart +++ b/lib/models/pantry/contact.dart @@ -1,6 +1,6 @@ import 'package:test_sa/models/lookup.dart'; -class Contact{ +class Contact { Lookup title; Lookup contactPerson; String job; @@ -8,14 +8,7 @@ class Contact{ String telephone; String landLine; - Contact({ - this.title, - this.contactPerson, - this.job, - this.email, - this.telephone, - this.landLine - }); + Contact({this.title, this.contactPerson, this.job, this.email, this.telephone, this.landLine}); Map toMap() { return { @@ -38,4 +31,4 @@ class Contact{ landLine: map['landLine'] as String, ); } -} \ No newline at end of file +} diff --git a/lib/models/pantry/lookups/contact_person.dart b/lib/models/pantry/lookups/contact_person.dart index 156a208..af74b99 100644 --- a/lib/models/pantry/lookups/contact_person.dart +++ b/lib/models/pantry/lookups/contact_person.dart @@ -1,15 +1,12 @@ import 'package:test_sa/models/lookup.dart'; class ContactTitle extends Lookup { - ContactTitle({ - int id, - String label - }):super(id: id,name: label); + ContactTitle({int id, String label}) : super(id: id, name: label); - factory ContactTitle.fromMap(Map parsedJson){ + factory ContactTitle.fromMap(Map parsedJson) { return ContactTitle( label: parsedJson["value"], id: parsedJson["id"], ); } -} \ No newline at end of file +} diff --git a/lib/models/pantry/lookups/contact_title.dart b/lib/models/pantry/lookups/contact_title.dart index 156a208..af74b99 100644 --- a/lib/models/pantry/lookups/contact_title.dart +++ b/lib/models/pantry/lookups/contact_title.dart @@ -1,15 +1,12 @@ import 'package:test_sa/models/lookup.dart'; class ContactTitle extends Lookup { - ContactTitle({ - int id, - String label - }):super(id: id,name: label); + ContactTitle({int id, String label}) : super(id: id, name: label); - factory ContactTitle.fromMap(Map parsedJson){ + factory ContactTitle.fromMap(Map parsedJson) { return ContactTitle( label: parsedJson["value"], id: parsedJson["id"], ); } -} \ No newline at end of file +} diff --git a/lib/models/pantry/pm_kit.dart b/lib/models/pantry/pm_kit.dart index 40bcf51..fb3fa85 100644 --- a/lib/models/pantry/pm_kit.dart +++ b/lib/models/pantry/pm_kit.dart @@ -1,6 +1,6 @@ import 'package:test_sa/models/lookup.dart'; -class PMKit{ +class PMKit { int id; Lookup itemCode; String itemName; @@ -10,22 +10,13 @@ class PMKit{ String quantityNeeded; String quantityReserved; - PMKit({ - this.id, - this.itemCode, - this.itemName, - this.preparationTimeFrame, - this.kitFrequencyDemand, - this.availability, - this.quantityNeeded, - this.quantityReserved - }); + PMKit({this.id, this.itemCode, this.itemName, this.preparationTimeFrame, this.kitFrequencyDemand, this.availability, this.quantityNeeded, this.quantityReserved}); Map toMap(int visitId) { return { - "id":id ?? 0, + "id": id ?? 0, "visitId": visitId, - if(itemCode != null) 'partCatalogItemId': (itemCode?.id).toString(), + if (itemCode != null) 'partCatalogItemId': (itemCode?.id).toString(), // if(itemName != null) 'itemName': itemName, // if(preparationTimeFrame != null) 'preparationTimeFrame': preparationTimeFrame, // if(kitFrequencyDemand != null) 'kitFrequencyDemand': kitFrequencyDemand, @@ -38,7 +29,7 @@ class PMKit{ factory PMKit.fromMap(Map map) { return PMKit( id: map['id'], - itemCode: Lookup(id:map['partCatalogItemId'],name:map["partNumber"]), + itemCode: Lookup(id: map['partCatalogItemId'], name: map["partNumber"]), itemName: map['itemName'] as String, preparationTimeFrame: map['preparationTimeFrame'] as String, kitFrequencyDemand: map['kitFrequencyDemand'] as String, @@ -69,4 +60,4 @@ class PMKit{ quantityReserved: quantityReserved ?? this.quantityReserved, ); } -} \ No newline at end of file +} diff --git a/lib/models/part.dart b/lib/models/part.dart index 298f435..176811c 100644 --- a/lib/models/part.dart +++ b/lib/models/part.dart @@ -1,4 +1,4 @@ -class Part{ +class Part { int id; int reportPartID; String code; @@ -13,25 +13,21 @@ class Part{ this.quantity = 1, }); - Map toJson(){ + Map toJson() { return { "id": reportPartID ?? 0, - "sparePart":{ - "id":id, - "partNo": code, - "partName":name - }, - "qty":quantity + "sparePart": {"id": id, "partNo": code, "partName": name}, + "qty": quantity }; } - factory Part.fromJson(Map parsedJson,{Map reportJson}){ + factory Part.fromJson(Map parsedJson, {Map reportJson}) { return Part( - id: parsedJson["id"], + id: parsedJson["id"], reportPartID: reportJson != null ? reportJson["id"] : null, code: parsedJson["partNo"], name: parsedJson["partName"], quantity: reportJson != null ? (reportJson["qty"] ?? 1).toInt() : 1, ); } -} \ No newline at end of file +} diff --git a/lib/models/service_request/search_work_order.dart b/lib/models/service_request/search_work_order.dart index 91fc0c9..a130fee 100644 --- a/lib/models/service_request/search_work_order.dart +++ b/lib/models/service_request/search_work_order.dart @@ -36,37 +36,37 @@ class SearchWorkOrders { SearchWorkOrders( {this.id, - this.parentWOId, - this.workOrderNo, - this.workOrderYear, - this.workOrderSequennce, - this.callRequest, - this.assetType, - this.assignedEmployee, - this.visitDate, - this.assistantEmployees, - this.supplier, - this.vendorTicketNumber, - this.contactPersonWorkOrders, - this.calllastSituation, - this.currentSituation, - this.repairLocation, - this.reason, - this.startofWorkTime, - this.endofWorkTime, - this.workingHours, - this.travelingHours, - this.travelingExpenses, - this.faultDescription, - this.sparePartsWorkOrders, - this.reviewComment, - this.comment, - this.attachmentsWorkOrder, - this.equipmentStatus, - this.suppEngineerWorkOrders, - this.engSignature, - this.nurseSignature, - this.woParentDto}); + this.parentWOId, + this.workOrderNo, + this.workOrderYear, + this.workOrderSequennce, + this.callRequest, + this.assetType, + this.assignedEmployee, + this.visitDate, + this.assistantEmployees, + this.supplier, + this.vendorTicketNumber, + this.contactPersonWorkOrders, + this.calllastSituation, + this.currentSituation, + this.repairLocation, + this.reason, + this.startofWorkTime, + this.endofWorkTime, + this.workingHours, + this.travelingHours, + this.travelingExpenses, + this.faultDescription, + this.sparePartsWorkOrders, + this.reviewComment, + this.comment, + this.attachmentsWorkOrder, + this.equipmentStatus, + this.suppEngineerWorkOrders, + this.engSignature, + this.nurseSignature, + this.woParentDto}); SearchWorkOrders.fromJson(Map json) { print(json['callRequest']); @@ -75,13 +75,9 @@ class SearchWorkOrders { workOrderNo = json['workOrderNo']; workOrderYear = json['workOrderYear']; workOrderSequennce = json['workOrderSequennce']; - callRequest = json['callRequest'] != null - ? new CallRequest.fromJson(json['callRequest']) - : CallRequest(); + callRequest = json['callRequest'] != null ? new CallRequest.fromJson(json['callRequest']) : CallRequest(); assetType = json['assetType']; - assignedEmployee = json['assignedEmployee'] != null - ? new AssignedEmployee.fromJson(json['assignedEmployee']) - : AssignedEmployee(); + assignedEmployee = json['assignedEmployee'] != null ? new AssignedEmployee.fromJson(json['assignedEmployee']) : AssignedEmployee(); visitDate = json['visitDate']; if (json['assistantEmployees'] != null) { assistantEmployees = json['assistantEmployees']; @@ -91,12 +87,8 @@ class SearchWorkOrders { if (json['contactPersonWorkOrders'] != null) { contactPersonWorkOrders = json['contactPersonWorkOrders']; } - calllastSituation = json['calllastSituation'] != null - ? new Lookup.fromJson(json['calllastSituation']) - : Lookup(); - currentSituation = json['currentSituation'] != null - ? new Lookup.fromJson(json['currentSituation']) - : Lookup(); + calllastSituation = json['calllastSituation'] != null ? new Lookup.fromJson(json['calllastSituation']) : Lookup(); + currentSituation = json['currentSituation'] != null ? new Lookup.fromJson(json['currentSituation']) : Lookup(); repairLocation = json['repairLocation']; reason = json['reason']; startofWorkTime = json['startofWorkTime']; @@ -104,9 +96,7 @@ class SearchWorkOrders { workingHours = json['workingHours']; travelingHours = json['travelingHours']; travelingExpenses = json['travelingExpenses']; - faultDescription = json['faultDescription'] != null - ? new ModelDefRelatedDefects.fromJson(json['faultDescription']) - : ModelDefRelatedDefects(); + faultDescription = json['faultDescription'] != null ? new ModelDefRelatedDefects.fromJson(json['faultDescription']) : ModelDefRelatedDefects(); if (json['sparePartsWorkOrders'] != null) { sparePartsWorkOrders = json['sparePartsWorkOrders']; } @@ -138,14 +128,12 @@ class SearchWorkOrders { } data['visitDate'] = this.visitDate; if (this.assistantEmployees != null) { - data['assistantEmployees'] = - this.assistantEmployees.map((v) => v.toJson()).toList(); + data['assistantEmployees'] = this.assistantEmployees.map((v) => v.toJson()).toList(); } data['supplier'] = this.supplier; data['vendorTicketNumber'] = this.vendorTicketNumber; if (this.contactPersonWorkOrders != null) { - data['contactPersonWorkOrders'] = - this.contactPersonWorkOrders.map((v) => v.toJson()).toList(); + data['contactPersonWorkOrders'] = this.contactPersonWorkOrders.map((v) => v.toJson()).toList(); } if (this.calllastSituation != null) { data['calllastSituation'] = this.calllastSituation.toMap(); @@ -164,16 +152,14 @@ class SearchWorkOrders { data['faultDescription'] = this.faultDescription.toJson(); } if (this.sparePartsWorkOrders != null) { - data['sparePartsWorkOrders'] = - this.sparePartsWorkOrders.map((v) => v.toJson()).toList(); + data['sparePartsWorkOrders'] = this.sparePartsWorkOrders.map((v) => v.toJson()).toList(); } data['reviewComment'] = this.reviewComment; data['comment'] = this.comment; data['attachmentsWorkOrder'] = this.attachmentsWorkOrder; data['equipmentStatus'] = this.equipmentStatus; if (this.suppEngineerWorkOrders != null) { - data['suppEngineerWorkOrders'] = - this.suppEngineerWorkOrders.map((v) => v.toJson()).toList(); + data['suppEngineerWorkOrders'] = this.suppEngineerWorkOrders.map((v) => v.toJson()).toList(); } data['engSignature'] = this.engSignature; data['nurseSignature'] = this.nurseSignature; @@ -194,33 +180,18 @@ class CallRequest { String firstAction; String assetType; - CallRequest( - {this.id, - this.callNo, - this.asset, - this.assignedEmployee, - this.callSiteContactPerson, - this.status, - this.callLastSituation, - this.defectType, - this.firstAction, - this.assetType}); + CallRequest({this.id, this.callNo, this.asset, this.assignedEmployee, this.callSiteContactPerson, this.status, this.callLastSituation, this.defectType, this.firstAction, this.assetType}); CallRequest.fromJson(Map json) { id = json['id']; callNo = json['callNo']; asset = json['asset'] != null ? new Asset.fromJson(json['asset']) : Asset(); - assignedEmployee = json['assignedEmployee'] != null - ? new AssignedEmployee.fromJson(json['assignedEmployee']) - : AssignedEmployee(); + assignedEmployee = json['assignedEmployee'] != null ? new AssignedEmployee.fromJson(json['assignedEmployee']) : AssignedEmployee(); if (json['callSiteContactPerson'] != null) { callSiteContactPerson = json['callSiteContactPerson']; } - status = - json['status'] != null ? new Lookup.fromJson(json['status']) : Lookup(); - callLastSituation = json['callLastSituation'] != null - ? new Lookup.fromJson(json['callLastSituation']) - : Lookup(); + status = json['status'] != null ? new Lookup.fromJson(json['status']) : Lookup(); + callLastSituation = json['callLastSituation'] != null ? new Lookup.fromJson(json['callLastSituation']) : Lookup(); defectType = json['defectType']; firstAction = json['firstAction']; assetType = json['assetType']; @@ -237,8 +208,7 @@ class CallRequest { data['assignedEmployee'] = this.assignedEmployee.toJson(); } if (this.callSiteContactPerson != null) { - data['callSiteContactPerson'] = - this.callSiteContactPerson.map((v) => v.toJson()).toList(); + data['callSiteContactPerson'] = this.callSiteContactPerson.map((v) => v.toJson()).toList(); } if (this.status != null) { data['status'] = this.status.toMap(); @@ -305,62 +275,60 @@ class Asset { Asset( {this.id, - this.assetSerialNo, - this.systemID, - this.assetNumber, - this.modelDefinition, - this.supplier, - this.ipAddress, - this.macAddress, - this.portNumber, - this.assetReplace, - this.oldAsset, - this.isParent, - this.parentAsset, - this.assetType, - this.site, - this.building, - this.floor, - this.department, - this.room, - this.testsDay, - this.purchasingPrice, - this.nbv, - this.currency, - this.poNo, - this.invoiceNumber, - this.invoiceDate, - this.replacementDate, - this.originDepartment, - this.originSite, - this.budgetYear, - this.lastPOPrice, - this.commissioningStatus, - this.productionDate, - this.edd, - this.technicalInspectionDate, - this.deliveryInspectionDate, - this.endUserAcceptanceDate, - this.receivingCommittee, - this.siteWarrantyMonths, - this.extendedWarrantyMonths, - this.remainderWarrantyMonths, - this.eomWarrantyMonthsNo, - this.warrantyValue, - this.warrantyEndDate, - this.warrantyContractConditions, - this.technicalGuidanceBooks, - this.comment, - this.tagCode}); + this.assetSerialNo, + this.systemID, + this.assetNumber, + this.modelDefinition, + this.supplier, + this.ipAddress, + this.macAddress, + this.portNumber, + this.assetReplace, + this.oldAsset, + this.isParent, + this.parentAsset, + this.assetType, + this.site, + this.building, + this.floor, + this.department, + this.room, + this.testsDay, + this.purchasingPrice, + this.nbv, + this.currency, + this.poNo, + this.invoiceNumber, + this.invoiceDate, + this.replacementDate, + this.originDepartment, + this.originSite, + this.budgetYear, + this.lastPOPrice, + this.commissioningStatus, + this.productionDate, + this.edd, + this.technicalInspectionDate, + this.deliveryInspectionDate, + this.endUserAcceptanceDate, + this.receivingCommittee, + this.siteWarrantyMonths, + this.extendedWarrantyMonths, + this.remainderWarrantyMonths, + this.eomWarrantyMonthsNo, + this.warrantyValue, + this.warrantyEndDate, + this.warrantyContractConditions, + this.technicalGuidanceBooks, + this.comment, + this.tagCode}); Asset.fromJson(Map json) { id = json['id']; assetSerialNo = json['assetSerialNo']; systemID = json['systemID']; assetNumber = json['assetNumber']; - modelDefinition = json['modelDefinition'] != null - ? new ModelDefinition.fromJson(json['modelDefinition']) - : ModelDefinition(); + modelDefinition = json['modelDefinition'] != null ? new ModelDefinition.fromJson(json['modelDefinition']) : ModelDefinition(); supplier = json['supplier']; ipAddress = json['ipAddress']; macAddress = json['macAddress']; @@ -430,8 +398,7 @@ class Asset { data['warrantyEndDate'] = this.warrantyEndDate; data['warrantyContractConditions'] = this.warrantyContractConditions; if (this.technicalGuidanceBooks != null) { - data['technicalGuidanceBooks'] = - this.technicalGuidanceBooks.map((v) => v.toJson()).toList(); + data['technicalGuidanceBooks'] = this.technicalGuidanceBooks.map((v) => v.toJson()).toList(); } data['comment'] = this.comment; data['tagCode'] = this.tagCode; @@ -454,16 +421,16 @@ class ModelDefinition { ModelDefinition( {this.id, - this.assetName, - this.modelDefCode, - this.modelName, - this.manufacturerId, - this.manufacturerName, - this.supplierName, - this.replacementDate, - this.lifeSpan, - this.modelDefRelatedDefects, - this.suppliers}); + this.assetName, + this.modelDefCode, + this.modelName, + this.manufacturerId, + this.manufacturerName, + this.supplierName, + this.replacementDate, + this.lifeSpan, + this.modelDefRelatedDefects, + this.suppliers}); ModelDefinition.fromJson(Map json) { id = json['id']; @@ -498,8 +465,7 @@ class ModelDefinition { data['replacementDate'] = this.replacementDate; data['lifeSpan'] = this.lifeSpan; if (this.modelDefRelatedDefects != null) { - data['modelDefRelatedDefects'] = - this.modelDefRelatedDefects.map((v) => v.toJson()).toList(); + data['modelDefRelatedDefects'] = this.modelDefRelatedDefects.map((v) => v.toJson()).toList(); } if (this.suppliers != null) { data['suppliers'] = this.suppliers.map((v) => v.toJson()).toList(); @@ -514,8 +480,7 @@ class ModelDefRelatedDefects { String workPerformed; String estimatedTime; - ModelDefRelatedDefects( - {this.id, this.defectName, this.workPerformed, this.estimatedTime}); + ModelDefRelatedDefects({this.id, this.defectName, this.workPerformed, this.estimatedTime}); ModelDefRelatedDefects.fromJson(Map json) { id = json['id']; @@ -581,4 +546,3 @@ class AssignedEmployee { return data; } } - diff --git a/lib/models/service_request/service_request.dart b/lib/models/service_request/service_request.dart index 434f8de..3da64be 100644 --- a/lib/models/service_request/service_request.dart +++ b/lib/models/service_request/service_request.dart @@ -2,7 +2,7 @@ import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/lookup.dart'; -class ServiceRequest{ +class ServiceRequest { String id; String requestCode; String deviceSerialNumber; @@ -53,7 +53,6 @@ class ServiceRequest{ this.deviceId, this.audio, this.engineerName, - this.viewReport = false, this.deviceModel, this.engineerMobile, @@ -71,49 +70,39 @@ class ServiceRequest{ this.device, }); - factory ServiceRequest.fromJson(Map parsedJson){ + factory ServiceRequest.fromJson(Map parsedJson) { List images = []; - if(parsedJson["attachmentsCallRequest"] is List){ + if (parsedJson["attachmentsCallRequest"] is List) { List list = parsedJson["attachmentsCallRequest"]; images = list.map((e) => URLs.getFileUrl(e["attachmentsCallRequest"])).toList(); } return ServiceRequest( - id: parsedJson["id"].toString(), - requestCode: parsedJson["callNo"].toString(), - hospitalName: parsedJson["asset"]["site"]["custName"], - deviceNumber: parsedJson["asset"]["assetNumber"].toString(), - deviceId: parsedJson["asset"]["id"], - audio: URLs.getFileUrl(parsedJson["voiceNote"] ?? ""), - deviceArName: parsedJson["asset"]["modelDefinition"]["assetName"] ?? "", - deviceEnName: parsedJson["asset"]["modelDefinition"]["assetName"] ?? "", - devicePhotos: images, - deviceSerialNumber: parsedJson["asset"]["assetSerialNo"], - date: DateTime.tryParse(parsedJson["requestedDate"] ?? "").toString().split(" ").first, - maintenanceIssue: parsedJson["comments"], - statusLabel: parsedJson["status"] == null ? null : - parsedJson["status"]["name"], - statusValue: parsedJson["status"] == null ? null : - parsedJson["status"]["value"], - departmentName: parsedJson["asset"]["department"] != null ? - parsedJson["asset"]["department"]["name"] : "", - engineerName: parsedJson["assignedEmployee"] == null ? null : - parsedJson["assignedEmployee"]["name"], - hospitalId: parsedJson["asset"]["site"]["id"], - reportID: parsedJson["workOrder"] != null ? - parsedJson["workOrder"]["workOrderId"] : null, - viewReport: parsedJson["workOrder"] != null, - deviceModel: parsedJson["asset"]["modelDefinition"]["modelName"], - engineerMobile: parsedJson["assignedEmployee"] == null ? null : - parsedJson["assignedEmployee"]["phone"], - faultDescription: parsedJson["workOrder"] != null ? - parsedJson["workOrder"]["faultDescription"] : null, - jobSheetNumber: parsedJson["workOrder"] != null ? - parsedJson["workOrder"]["jobSheetNumber"] :null, - visitDate: DateTime.tryParse(parsedJson["visitDate"] ?? "").toString().split(" ").first, - nextVisitDate: DateTime.tryParse(parsedJson["nextVisitDate"] ?? ""), - workPerformed: parsedJson["workOrder"] != null ? - parsedJson["workOrder"]["workPerformed"] : null, - device: Device.fromJson(parsedJson["asset"]) - ); + id: parsedJson["id"].toString(), + requestCode: parsedJson["callNo"].toString(), + hospitalName: parsedJson["asset"]["site"]["custName"], + deviceNumber: parsedJson["asset"]["assetNumber"].toString(), + deviceId: parsedJson["asset"]["id"], + audio: URLs.getFileUrl(parsedJson["voiceNote"] ?? ""), + deviceArName: parsedJson["asset"]["modelDefinition"]["assetName"] ?? "", + deviceEnName: parsedJson["asset"]["modelDefinition"]["assetName"] ?? "", + devicePhotos: images, + deviceSerialNumber: parsedJson["asset"]["assetSerialNo"], + date: DateTime.tryParse(parsedJson["requestedDate"] ?? "").toString().split(" ").first, + maintenanceIssue: parsedJson["comments"], + statusLabel: parsedJson["status"] == null ? null : parsedJson["status"]["name"], + statusValue: parsedJson["status"] == null ? null : parsedJson["status"]["value"], + departmentName: parsedJson["asset"]["department"] != null ? parsedJson["asset"]["department"]["name"] : "", + engineerName: parsedJson["assignedEmployee"] == null ? null : parsedJson["assignedEmployee"]["name"], + hospitalId: parsedJson["asset"]["site"]["id"], + reportID: parsedJson["workOrder"] != null ? parsedJson["workOrder"]["workOrderId"] : null, + viewReport: parsedJson["workOrder"] != null, + deviceModel: parsedJson["asset"]["modelDefinition"]["modelName"], + engineerMobile: parsedJson["assignedEmployee"] == null ? null : parsedJson["assignedEmployee"]["phone"], + faultDescription: parsedJson["workOrder"] != null ? parsedJson["workOrder"]["faultDescription"] : null, + jobSheetNumber: parsedJson["workOrder"] != null ? parsedJson["workOrder"]["jobSheetNumber"] : null, + visitDate: DateTime.tryParse(parsedJson["visitDate"] ?? "").toString().split(" ").first, + nextVisitDate: DateTime.tryParse(parsedJson["nextVisitDate"] ?? ""), + workPerformed: parsedJson["workOrder"] != null ? parsedJson["workOrder"]["workPerformed"] : null, + device: Device.fromJson(parsedJson["asset"])); } -} \ No newline at end of file +} diff --git a/lib/models/service_request/service_request_search.dart b/lib/models/service_request/service_request_search.dart index cd2adf0..53fca4a 100644 --- a/lib/models/service_request/service_request_search.dart +++ b/lib/models/service_request/service_request_search.dart @@ -1,7 +1,7 @@ import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/lookup.dart'; -class ServiceRequestSearch{ +class ServiceRequestSearch { String deviceSerialNumber; String deviceNumber; String deviceName; @@ -9,7 +9,6 @@ class ServiceRequestSearch{ String model; Lookup statusValue; - ServiceRequestSearch({ this.deviceSerialNumber, this.deviceNumber, @@ -19,7 +18,7 @@ class ServiceRequestSearch{ this.hospital, }); - fromSearch(ServiceRequestSearch newSearch){ + fromSearch(ServiceRequestSearch newSearch) { deviceSerialNumber = newSearch.deviceSerialNumber; deviceNumber = newSearch.deviceNumber; statusValue = newSearch.statusValue; @@ -27,32 +26,31 @@ class ServiceRequestSearch{ model = newSearch.model; } - Map toMap(){ - Map search = {}; - if(deviceSerialNumber != null && deviceSerialNumber.isNotEmpty){ + Map toMap() { + Map search = {}; + if (deviceSerialNumber != null && deviceSerialNumber.isNotEmpty) { search["assetSerialNumber"] = deviceSerialNumber; } - if(deviceNumber != null && deviceNumber.isNotEmpty){ + if (deviceNumber != null && deviceNumber.isNotEmpty) { search["assetNo"] = deviceNumber; } - if(statusValue != null){ + if (statusValue != null) { search["status"] = statusValue.toMap(); } - if(deviceName != null && deviceName.isNotEmpty){ + if (deviceName != null && deviceName.isNotEmpty) { search["assetName"] = deviceName; - } - if(hospital != null){ + if (hospital != null) { search["site"] = hospital.name; } - if(model != null){ + if (model != null) { search["modelDefinition"] = model; } return search; } -} \ No newline at end of file +} diff --git a/lib/models/subtitle.dart b/lib/models/subtitle.dart index 4972251..a825fa9 100644 --- a/lib/models/subtitle.dart +++ b/lib/models/subtitle.dart @@ -1,6 +1,6 @@ import 'package:meta/meta.dart'; -class Subtitle{ +class Subtitle { // http requests status messages String currentlyServiceNotAvailable; String waitUntilYourRequestComplete; @@ -223,7 +223,7 @@ class Subtitle{ String duplicateAlertMessage; String alert; - void setIssues(List issues){ + void setIssues(List issues) { issues.clear(); issues.add(reason1); issues.add(reason2); @@ -285,7 +285,6 @@ class Subtitle{ @required this.titleValidateMessage, @required this.to, @required this.urlNotFound, - @required this.nameExist, @required this.unitRequired, @required this.unite, @@ -391,7 +390,6 @@ class Subtitle{ @required this.pickImage, @required this.requiredImage, @required this.activationAlert, - @required this.callId, @required this.requiredWord, @required this.quantity, @@ -423,7 +421,7 @@ class Subtitle{ @required this.currentSituation, }); - factory Subtitle.fromJson(Map parsedJson){ + factory Subtitle.fromJson(Map parsedJson) { return Subtitle( currentlyServiceNotAvailable: parsedJson["server_error_message"], failedToCompleteRequest: parsedJson["failed_request_message"], @@ -437,7 +435,6 @@ class Subtitle{ signOut: parsedJson["sign_out"], signOutAlert: parsedJson["logout_alert"], language: parsedJson["language"], - name: parsedJson["name"], email: parsedJson["email"], phoneNumber: parsedJson["phone_number"], @@ -451,7 +448,6 @@ class Subtitle{ passwordValidateMessage: parsedJson["password_validate_message"], confirmPasswordValidateMessage: parsedJson["confirm_password_validate_message"], phoneNumberValidateMessage: parsedJson["phone_number_validate_message"], - forgetPasswordWithMark: parsedJson["forget_password_with_mark"], showPassword: parsedJson["show_password"], wrongEmailOrPassword: parsedJson["wrong_email_or_password"], @@ -461,7 +457,6 @@ class Subtitle{ back: parsedJson["back"], search: parsedJson["search"], searchByName: parsedJson["search_by_name"], - address: parsedJson["address"], addressNotFound: parsedJson["address_not_found"], addressValidateMessage: parsedJson["address_validate_message"], @@ -480,7 +475,6 @@ class Subtitle{ titleNotFound: parsedJson["title_not_found"], titleValidateMessage: parsedJson["title_validate_message"], urlNotFound: parsedJson["url_not_found"], - date: parsedJson["date"], status: parsedJson["status"], code: parsedJson["code"], @@ -556,7 +550,6 @@ class Subtitle{ visitDate: parsedJson["visitDate"], whatsApp: parsedJson["whatsApp"], workPerformed: parsedJson["workPerformed"], - actualDate: parsedJson["actualDate"], done: parsedJson["done"], expectDate: parsedJson["expectDate"], @@ -587,7 +580,6 @@ class Subtitle{ requiredImage: parsedJson["requiredImage"], taskStatus: parsedJson["taskStatus"], activationAlert: parsedJson["activationAlert"], - attachImage: parsedJson["attachImage"], callLastSituation: parsedJson["callLastSituation"], customer: parsedJson["customer"], @@ -606,19 +598,17 @@ class Subtitle{ requiredWord: parsedJson["requiredWord"], serviceType: parsedJson["serviceType"], workPreformed: parsedJson["workPreformed"], - alert: parsedJson["alert"], duplicateAlert: parsedJson["duplicateAlert"], duplicateAlertMessage: parsedJson["duplicateAlertMessage"], duplicateRequest: parsedJson["duplicateRequest"], - orderWorkNumber:parsedJson["orderWorkNumber"], - assignedEmployee:parsedJson["assignedEmployee"], - assetSN:parsedJson["assetSN"], - assetName:parsedJson["assetName"], - site:parsedJson["site"], - maintenanceSituation:parsedJson["maintenanceSituation"], - currentSituation:parsedJson["currentSituation"], + orderWorkNumber: parsedJson["orderWorkNumber"], + assignedEmployee: parsedJson["assignedEmployee"], + assetSN: parsedJson["assetSN"], + assetName: parsedJson["assetName"], + site: parsedJson["site"], + maintenanceSituation: parsedJson["maintenanceSituation"], + currentSituation: parsedJson["currentSituation"], ); } - -} \ No newline at end of file +} diff --git a/lib/models/timer_model.dart b/lib/models/timer_model.dart index 191128f..c6434f9 100644 --- a/lib/models/timer_model.dart +++ b/lib/models/timer_model.dart @@ -3,5 +3,5 @@ class TimerModel { DateTime endAt; int durationInSecond; - TimerModel({this.startAt,this.endAt,this.durationInSecond}); -} \ No newline at end of file + TimerModel({this.startAt, this.endAt, this.durationInSecond}); +} diff --git a/lib/models/visits/visit.dart b/lib/models/visits/visit.dart index 10717be..f3faed0 100644 --- a/lib/models/visits/visit.dart +++ b/lib/models/visits/visit.dart @@ -1,7 +1,7 @@ import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/pantry/pentry.dart'; -class Visit{ +class Visit { int id; String serialNumber; String expectDate; @@ -44,36 +44,35 @@ class Visit{ this.deviceNumber, }); - factory Visit.fromJson(Map parsedJson){ + factory Visit.fromJson(Map parsedJson) { List images = []; - if(parsedJson["vAttachments"] is List){ + if (parsedJson["vAttachments"] is List) { List list = parsedJson["vAttachments"]; images = list.map((e) => e["attachmentURL"].toString()).toList(); } return Visit( - id: parsedJson["id"], - serialNumber: parsedJson["visitCode"], - ppmScheduleId: parsedJson["ppmScheduleId"], - hospitalId: parsedJson["siteId"], - deviceNumber: parsedJson["assetNumber"], - hospitalName: parsedJson["siteName"], - deviceId: parsedJson["assetId"], - deviceSerialNumber: parsedJson["assetSerialNo"], - deviceEnglishName: parsedJson["assetName"], - deviceArabicName: parsedJson["assetName"], - employId: parsedJson["assignedToId"].toString(), - employName: parsedJson["assignedToName"], - expectDate: parsedJson["expectedDate"].toString().split("T").first, - actualDate: parsedJson["actualDate"].toString().split("T").first, - modelAndBrand: "${parsedJson["modelName"]} / ${parsedJson["manufacturerName"]}", - // contactStatus: parsedJson["contactStatus"], - images: images, - status: Lookup( - id: parsedJson["visitStatusId"], // actual value (0,1,2) - name: parsedJson["visitStatusName"] // text value - ), - assignTo: parsedJson["assignedToName"], - pentry: Pentry.fromMap(parsedJson) - ); + id: parsedJson["id"], + serialNumber: parsedJson["visitCode"], + ppmScheduleId: parsedJson["ppmScheduleId"], + hospitalId: parsedJson["siteId"], + deviceNumber: parsedJson["assetNumber"], + hospitalName: parsedJson["siteName"], + deviceId: parsedJson["assetId"], + deviceSerialNumber: parsedJson["assetSerialNo"], + deviceEnglishName: parsedJson["assetName"], + deviceArabicName: parsedJson["assetName"], + employId: parsedJson["assignedToId"].toString(), + employName: parsedJson["assignedToName"], + expectDate: parsedJson["expectedDate"].toString().split("T").first, + actualDate: parsedJson["actualDate"].toString().split("T").first, + modelAndBrand: "${parsedJson["modelName"]} / ${parsedJson["manufacturerName"]}", + // contactStatus: parsedJson["contactStatus"], + images: images, + status: Lookup( + id: parsedJson["visitStatusId"], // actual value (0,1,2) + name: parsedJson["visitStatusName"] // text value + ), + assignTo: parsedJson["assignedToName"], + pentry: Pentry.fromMap(parsedJson)); } -} \ No newline at end of file +} diff --git a/lib/models/visits/visits_group.dart b/lib/models/visits/visits_group.dart index 57f377a..7ced9b3 100644 --- a/lib/models/visits/visits_group.dart +++ b/lib/models/visits/visits_group.dart @@ -1,8 +1,7 @@ - import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/visits/visit.dart'; -class VisitsGroup{ +class VisitsGroup { // String userId; // String workingHours; // String travelingHours; @@ -21,14 +20,14 @@ class VisitsGroup{ // this.jobSheetNumber, // this.travelingHours, // this.workingHours, - this.visits, - this.engineer, + this.visits, + this.engineer, // this.image, // this.taskStatus, }); - Map toJson(){ - Map jsonObject = {}; + Map toJson() { + Map jsonObject = {}; jsonObject["ids"] = visits.map((e) => e.id).toList(); jsonObject["assignedEmployeeId"] = engineer?.id; // if(status != null) jsonObject["taskStatusId"] = status.id.toString(); @@ -43,6 +42,4 @@ class VisitsGroup{ // if(taskStatus != null) jsonObject["task_status"] = taskStatus.id.toString(); return jsonObject; } - - -} \ No newline at end of file +} diff --git a/lib/models/visits/visits_search.dart b/lib/models/visits/visits_search.dart index 737277f..5c3692b 100644 --- a/lib/models/visits/visits_search.dart +++ b/lib/models/visits/visits_search.dart @@ -1,7 +1,7 @@ import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/lookup.dart'; -class VisitsSearch{ +class VisitsSearch { String deviceSerialNumber; Hospital hospital; String brand; @@ -26,7 +26,7 @@ class VisitsSearch{ this.expectedDateTo, }); - fromSearch(VisitsSearch newSearch){ + fromSearch(VisitsSearch newSearch) { deviceSerialNumber = newSearch.deviceSerialNumber; brand = newSearch.brand; hospital = newSearch.hospital; @@ -39,49 +39,48 @@ class VisitsSearch{ statusValue = newSearch.statusValue; } - Map toMap(){ - Map _search = {}; - if(deviceSerialNumber != null && deviceSerialNumber.isNotEmpty){ - _search["assetId"]= deviceSerialNumber; + Map toMap() { + Map _search = {}; + if (deviceSerialNumber != null && deviceSerialNumber.isNotEmpty) { + _search["assetId"] = deviceSerialNumber; } - if(hospital != null){ - _search["siteId"]= hospital.id; + if (hospital != null) { + _search["siteId"] = hospital.id; } - if(brand != null && brand.isNotEmpty){ + if (brand != null && brand.isNotEmpty) { // todo get new key - _search[""]= brand; + _search[""] = brand; } - if(model != null){ - _search["modelId"]= model.id; + if (model != null) { + _search["modelId"] = model.id; } - if(expectedDateFrom != null){ - _search["expectedDateFrom"]= expectedDateFrom.toIso8601String(); + if (expectedDateFrom != null) { + _search["expectedDateFrom"] = expectedDateFrom.toIso8601String(); } - if(expectedDateTo != null){ - _search["expectedDateTo"]= expectedDateTo.toIso8601String(); + if (expectedDateTo != null) { + _search["expectedDateTo"] = expectedDateTo.toIso8601String(); } - if(actualDateFrom != null){ - _search["actualDateFrom"]= actualDateFrom.toIso8601String(); + if (actualDateFrom != null) { + _search["actualDateFrom"] = actualDateFrom.toIso8601String(); } - if(actualDateTo != null){ - _search["actualDateTo"]= actualDateTo.toIso8601String(); + if (actualDateTo != null) { + _search["actualDateTo"] = actualDateTo.toIso8601String(); } - if(statusValue != null){ - _search["visitStatusId"]= statusValue.id; + if (statusValue != null) { + _search["visitStatusId"] = statusValue.id; } - if(contactStatus != null){ - _search["assignedToId"]= contactStatus.id; + if (contactStatus != null) { + _search["assignedToId"] = contactStatus.id; } return _search; } } - diff --git a/lib/views/app_style/colors.dart b/lib/views/app_style/colors.dart index 9e4ad36..3d24795 100644 --- a/lib/views/app_style/colors.dart +++ b/lib/views/app_style/colors.dart @@ -1,40 +1,49 @@ import 'package:flutter/material.dart'; + class AColors { AColors._(); - static const Color white = Color(0xffffffff); - static const Color black = Color(0xff000000); - static const Color grey3A = Color(0xff2e303a); - static const Color grey = Color(0xffe1e7e7); - static const green = Colors.green; - static const Color orange = Colors.orange; - static const Color deepOrange = Colors.deepOrangeAccent; - static const Color red = Colors.red; - static const Color deepRed = Color(0xFFD32F2F); + static const Color white = Color(0xffffffff); + static const Color black = Color(0xff000000); + static const Color grey3A = Color(0xff2e303a); + static const Color grey = Color(0xffe1e7e7); + static const green = Colors.green; + static const Color orange = Colors.orange; + static const Color deepOrange = Colors.deepOrangeAccent; + static const Color red = Colors.red; + static const Color deepRed = Color(0xFFD32F2F); static const Color scaffoldBackgroundColor = Color(0xffffffff); - static const Color secondaryColor = Color(0xff111427); - static const Color primaryColor = Color(0xff5bb0da); - static const Color cyan = Color(0xff4A8DB7); - static const Color onPrimaryColor = Color(0xffffffff); + static const Color secondaryColor = Color(0xff111427); + static const Color primaryColor = Color(0xff5bb0da); + static const Color cyan = Color(0xff4A8DB7); + static const Color onPrimaryColor = Color(0xffffffff); static Color inputFieldBackgroundColor = Color(0xfff5f5f5); static Color greyEF = Color(0xffEFEFEF); - static Color getRequestStatusColor(int id){ - switch(id){ - case 4: return AColors.deepRed; - case 6: return AColors.green; - case 5: return AColors.orange; - case 8: return AColors.green; - case 9: return AColors.orange; - default : return AColors.grey; + static Color getRequestStatusColor(int id) { + switch (id) { + case 4: + return AColors.deepRed; + case 6: + return AColors.green; + case 5: + return AColors.orange; + case 8: + return AColors.green; + case 9: + return AColors.orange; + default: + return AColors.grey; } } - static Color getGasStatusColor(int id){ - switch(id){ - case 0: return AColors.orange; - case 1: return AColors.green; - default : return AColors.grey; + static Color getGasStatusColor(int id) { + switch (id) { + case 0: + return AColors.orange; + case 1: + return AColors.green; + default: + return AColors.grey; } } } - diff --git a/lib/views/app_style/sizing.dart b/lib/views/app_style/sizing.dart index bb66b31..e14f3bc 100644 --- a/lib/views/app_style/sizing.dart +++ b/lib/views/app_style/sizing.dart @@ -1,39 +1,31 @@ import 'package:flutter/material.dart'; + class AppStyle { AppStyle._(); static const double borderRadius = 10; - static const BoxShadow boxShadow = BoxShadow( - color: Colors.black26, - blurRadius: 3, - offset: Offset(0,2) - ); + static const BoxShadow boxShadow = BoxShadow(color: Colors.black26, blurRadius: 3, offset: Offset(0, 2)); - static double getBorderRadius(BuildContext context){ + static double getBorderRadius(BuildContext context) { return borderRadius * getScaleFactor(context); } - static double getScaleFactor(BuildContext context){ + static double getScaleFactor(BuildContext context) { return MediaQuery.of(context).orientation == Orientation.portrait - ? MediaQuery.of(context).size.width/(360) > 1.5 - ? 1.5 : MediaQuery.of(context).size.width/(360) - : MediaQuery.of(context).size.height/(360) > 1.5 - ? 1.5 : MediaQuery.of(context).size.height/(360); + ? MediaQuery.of(context).size.width / (360) > 1.5 + ? 1.5 + : MediaQuery.of(context).size.width / (360) + : MediaQuery.of(context).size.height / (360) > 1.5 + ? 1.5 + : MediaQuery.of(context).size.height / (360); } - static BorderRadius getCardBorder(BuildContext context){ + static BorderRadius getCardBorder(BuildContext context) { return BorderRadius.only( - topRight: Radius.circular( - AppStyle.borderRadius * AppStyle.getScaleFactor(context) - ), - topLeft: Radius.circular( - AppStyle.borderRadius * AppStyle.getScaleFactor(context) - ), - bottomRight: Radius.circular( - AppStyle.borderRadius * AppStyle.getScaleFactor(context) - ), + topRight: Radius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), + topLeft: Radius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), + bottomRight: Radius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), ); } - -} \ No newline at end of file +} diff --git a/lib/views/pages/device_transfer/device_transfer_details.dart b/lib/views/pages/device_transfer/device_transfer_details.dart index ee45e92..184cc4b 100644 --- a/lib/views/pages/device_transfer/device_transfer_details.dart +++ b/lib/views/pages/device_transfer/device_transfer_details.dart @@ -25,7 +25,6 @@ class DeviceTransferDetails extends StatefulWidget { } class _DeviceTransferDetailsState extends State { - final DeviceTransferInfo _model = DeviceTransferInfo(); bool _isSender = false; bool _isReceiver = false; @@ -39,8 +38,6 @@ class _DeviceTransferDetailsState extends State { @override void initState() { - - super.initState(); } @@ -66,7 +63,7 @@ class _DeviceTransferDetailsState extends State { children: [ Container( color: Theme.of(context).colorScheme.primary, - padding: const EdgeInsets.symmetric(horizontal: 0,vertical: 4), + padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), child: Row( children: [ const ABackButton(), @@ -74,10 +71,7 @@ class _DeviceTransferDetailsState extends State { child: Center( child: Text( _subtitle.details, - style: Theme.of(context).textTheme.headline6.copyWith( - color: AColors.white, - fontStyle: FontStyle.italic - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), ), ), ), @@ -87,7 +81,7 @@ class _DeviceTransferDetailsState extends State { ), Expanded( child: SingleChildScrollView( - padding: EdgeInsets.all(16*AppStyle.getScaleFactor(context)), + padding: EdgeInsets.all(16 * AppStyle.getScaleFactor(context)), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -99,59 +93,52 @@ class _DeviceTransferDetailsState extends State { title: _subtitle.device, info: widget.model.device.serialNumber, ), - const SizedBox(height:8), + const SizedBox(height: 8), Row( children: [ Expanded( - child: Text( - "Sender", - style: Theme.of(context).textTheme.headline6 - ), + child: Text("Sender", style: Theme.of(context).textTheme.headline6), ), - if(_isSender || true) + if (_isSender || true) ASmallButton( text: _subtitle.edit, - onPressed: (){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_)=> UpdateDeviceTransfer(model: widget.model,isSender: true,) - ) - ); + onPressed: () { + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => UpdateDeviceTransfer( + model: widget.model, + isSender: true, + ))); }, ), ], ), - const SizedBox(height:12), + const SizedBox(height: 12), DeviceTransferInfoSection( info: widget.model.sender, ), - const SizedBox(height:8), + const SizedBox(height: 8), Row( children: [ Expanded( - child: Text( - "Receiver", - style: Theme.of(context).textTheme.headline6 - ), - ), - if(_isReceiver || true) - ASmallButton( - text: _subtitle.edit, - onPressed: (){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_)=> UpdateDeviceTransfer(model: widget.model,isSender: false,) - ) - ); - }, + child: Text("Receiver", style: Theme.of(context).textTheme.headline6), ), + if (_isReceiver || true) + ASmallButton( + text: _subtitle.edit, + onPressed: () { + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => UpdateDeviceTransfer( + model: widget.model, + isSender: false, + ))); + }, + ), ], ), - const SizedBox(height:12), + const SizedBox(height: 12), DeviceTransferInfoSection( info: widget.model.receiver, ), - ], ), ), diff --git a/lib/views/pages/device_transfer/request_device_transfer.dart b/lib/views/pages/device_transfer/request_device_transfer.dart index b3beb23..f320fcf 100644 --- a/lib/views/pages/device_transfer/request_device_transfer.dart +++ b/lib/views/pages/device_transfer/request_device_transfer.dart @@ -35,7 +35,7 @@ class _RequestDeviceTransferState extends State { SettingProvider _settingProvider; DeviceTransferProvider _deviceTransferProvider; final TextEditingController _requestedQuantityController = TextEditingController(); - final DeviceTransfer _formModel = DeviceTransfer(receiver: DeviceTransferInfo(),sender: DeviceTransferInfo()); + final DeviceTransfer _formModel = DeviceTransfer(receiver: DeviceTransferInfo(), sender: DeviceTransferInfo()); final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); diff --git a/lib/views/pages/device_transfer/track_device_transfer.dart b/lib/views/pages/device_transfer/track_device_transfer.dart index 454d6d3..d62943e 100644 --- a/lib/views/pages/device_transfer/track_device_transfer.dart +++ b/lib/views/pages/device_transfer/track_device_transfer.dart @@ -9,6 +9,7 @@ import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/device_trancfer/device_transfer_list.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; + class TrackDeviceTransferPage extends StatefulWidget { static const String id = "/track-device-transfer"; @@ -18,8 +19,7 @@ class TrackDeviceTransferPage extends StatefulWidget { State createState() => _TrackDeviceTransferPageState(); } -class _TrackDeviceTransferPageState extends State - with TickerProviderStateMixin{ +class _TrackDeviceTransferPageState extends State with TickerProviderStateMixin { DeviceTransferProvider _deviceTransferProvider; UserProvider _userProvider; SettingProvider _settingProvider; @@ -48,8 +48,8 @@ class _TrackDeviceTransferPageState extends State Column( children: [ Container( - color:AColors.primaryColor, - padding: const EdgeInsets.symmetric(horizontal: 0,vertical: 4), + color: AColors.primaryColor, + padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), child: Column( children: [ Row( @@ -59,17 +59,15 @@ class _TrackDeviceTransferPageState extends State child: Center( child: Text( "Device Transfer", - style: Theme.of(context).textTheme.headline6.copyWith( - color: AColors.white, - fontStyle: FontStyle.italic - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), ), ), ), - const SizedBox(width: 48,) + const SizedBox( + width: 48, + ) ], ), - ], ), ), diff --git a/lib/views/pages/splash_screen.dart b/lib/views/pages/splash_screen.dart index bd7a770..2a1af30 100644 --- a/lib/views/pages/splash_screen.dart +++ b/lib/views/pages/splash_screen.dart @@ -22,12 +22,11 @@ class SplashScreen extends StatefulWidget { } class _SplashScreenState extends State { - SettingProvider _settingProvider; UserProvider _userProvider; - _goToUserScreen(User user){ - if(user.tokenLife != null && user.tokenLife.isAfter(DateTime.now())){ + _goToUserScreen(User user) { + if (user.tokenLife != null && user.tokenLife.isAfter(DateTime.now())) { _userProvider.user = user; // Navigator.of(context).pushNamed(Login.id); Navigator.of(context).pushNamed(LandPage.id); @@ -38,38 +37,30 @@ class _SplashScreenState extends State { void initState() { Firebase.initializeApp(); - NotificationManger.initialisation( - (notificationDetails) { - AppNotification notification = AppNotification.fromJson(json.decode(notificationDetails.payload)); - if(notification.path == null || notification.path.isEmpty) - return; - Navigator.pushNamed( - context, - notification.path, - arguments: notification.requestId - ); - } - , (id, title, body, payload) async { - }); + NotificationManger.initialisation((notificationDetails) { + AppNotification notification = AppNotification.fromJson(json.decode(notificationDetails.payload)); + if (notification.path == null || notification.path.isEmpty) return; + Navigator.pushNamed(context, notification.path, arguments: notification.requestId); + }, (id, title, body, payload) async {}); super.initState(); } @override Widget build(BuildContext context) { - _settingProvider = Provider.of(context,listen: false); - _userProvider = Provider.of(context,listen: false); + _settingProvider = Provider.of(context, listen: false); + _userProvider = Provider.of(context, listen: false); return Scaffold( backgroundColor: Colors.white, body: Center( child: SizedBox( - width: MediaQuery.of(context).size.width/1.1, - child: FlareActor( + width: MediaQuery.of(context).size.width / 1.1, + child: FlareActor( "assets/rives/atoms_splash.flr", fit: BoxFit.contain, animation: "splash", callback: (animation) async { Navigator.of(context).pushNamed(Login.id); - if(_settingProvider.isLoaded && _settingProvider.user != null){ + if (_settingProvider.isLoaded && _settingProvider.user != null) { _goToUserScreen(_settingProvider.user); } }, diff --git a/lib/views/pages/user/gas_refill/gas_refill_details.dart b/lib/views/pages/user/gas_refill/gas_refill_details.dart index bed4999..9171aea 100644 --- a/lib/views/pages/user/gas_refill/gas_refill_details.dart +++ b/lib/views/pages/user/gas_refill/gas_refill_details.dart @@ -21,6 +21,7 @@ import 'package:test_sa/views/widgets/status/gas_refill/gas_status.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import '../../../app_style/colors.dart'; + class GasRefillDetails extends StatefulWidget { final GasRefillModel model; const GasRefillDetails({Key key, this.model}) : super(key: key); @@ -30,7 +31,6 @@ class GasRefillDetails extends StatefulWidget { } class _GasRefillDetailsState extends State { - final GasRefillModel _model = GasRefillModel(); bool _enableEdit = false; bool _validate = false; @@ -43,39 +43,29 @@ class _GasRefillDetailsState extends State { final GlobalKey _scaffoldKey = GlobalKey(); _update() async { _validate = true; - if(!_formKey.currentState.validate()){ + if (!_formKey.currentState.validate()) { setState(() {}); return false; } _formKey.currentState.save(); - _isLoading =true; + _isLoading = true; setState(() {}); - int status = await _gasRefillProvider.updateModel( - user: _userProvider.user, - host: _settingProvider.host, - newModel: _model, - oldModel: widget.model - ); - _isLoading =false; + int status = await _gasRefillProvider.updateModel(user: _userProvider.user, host: _settingProvider.host, newModel: _model, oldModel: widget.model); + _isLoading = false; setState(() {}); - if(status >= 200 && status < 300){ + if (status >= 200 && status < 300) { Fluttertoast.showToast( msg: _subtitle.requestCompleteSuccessfully, ); _enableEdit = false; _validate = false; //Navigator.of(context).pop(); - }else{ - String errorMessage = HttpStatusManger.getStatusMessage( - status: status, subtitle: _subtitle); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - errorMessage - ), - ) - ); + } else { + String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle); + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text(errorMessage), + )); } } @@ -105,7 +95,7 @@ class _GasRefillDetailsState extends State { children: [ Container( color: Theme.of(context).colorScheme.primary, - padding: const EdgeInsets.symmetric(horizontal: 0,vertical: 4), + padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), child: Row( children: [ const ABackButton(), @@ -113,32 +103,31 @@ class _GasRefillDetailsState extends State { child: Center( child: Text( _subtitle.details, - style: Theme.of(context).textTheme.headline6.copyWith( - color: AColors.white, - fontStyle: FontStyle.italic - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), ), ), ), - if(_userProvider.user.type == UsersTypes.engineer) - AIconButton( - iconData: _enableEdit ? Icons.cancel : Icons.edit, - color: Theme.of(context).colorScheme.onPrimary, - buttonSize: 42, - backgroundColor: AColors.green, - onPressed: () async { - _enableEdit = !_enableEdit; - _model.fromGasRefillModel(widget.model); - setState(() {}); - }, - ), - const SizedBox(width: 16,) + if (_userProvider.user.type == UsersTypes.engineer) + AIconButton( + iconData: _enableEdit ? Icons.cancel : Icons.edit, + color: Theme.of(context).colorScheme.onPrimary, + buttonSize: 42, + backgroundColor: AColors.green, + onPressed: () async { + _enableEdit = !_enableEdit; + _model.fromGasRefillModel(widget.model); + setState(() {}); + }, + ), + const SizedBox( + width: 16, + ) ], ), ), Expanded( child: SingleChildScrollView( - padding: EdgeInsets.all(16*AppStyle.getScaleFactor(context)), + padding: EdgeInsets.all(16 * AppStyle.getScaleFactor(context)), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -150,64 +139,73 @@ class _GasRefillDetailsState extends State { title: _subtitle.hospital, info: _model.clientName, ), - _enableEdit ? - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const SizedBox(height: 8,), - ASubTitle(_subtitle.status), - if(_validate && _model.status == null) - ASubTitle(_subtitle.requiredWord,color: Colors.red,), - const SizedBox(height: 4,), - GasStatusMenu( - initialValue: _model.status, - onSelect: (status){ - _model.status = status; - }, - ) - ], - ): - Row( - children: [ - Expanded( - child: Text( - "${_subtitle.status} : ", - style: Theme.of(context).textTheme.subtitle2, - textScaleFactor: AppStyle.getScaleFactor(context), + _enableEdit + ? Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const SizedBox( + height: 8, + ), + ASubTitle(_subtitle.status), + if (_validate && _model.status == null) + ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ), + const SizedBox( + height: 4, + ), + GasStatusMenu( + initialValue: _model.status, + onSelect: (status) { + _model.status = status; + }, + ) + ], + ) + : Row( + children: [ + Expanded( + child: Text( + "${_subtitle.status} : ", + style: Theme.of(context).textTheme.subtitle2, + textScaleFactor: AppStyle.getScaleFactor(context), + ), + ), + if (_model.status?.id != null) StatusLabel(label: _model.status.name, color: AColors.getGasStatusColor(_model.status.id)), + ], ), - ), - if(_model.status?.id != null) - StatusLabel(label: _model.status.name, - color: AColors.getGasStatusColor(_model.status.id) - ), - ], + const SizedBox( + height: 8, ), - const SizedBox(height: 8,), const ASubTitle("Gas Requests"), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), ListView.builder( shrinkWrap: true, physics: const ClampingScrollPhysics(), itemCount: _model.details.length, - itemBuilder: (context,index){ + itemBuilder: (context, index) { final details = _model.details[index]; return GasRefillUpdateDetailsItem( details: details, validate: _validate, enableEdit: _enableEdit, ); - } - ), - if(_enableEdit) - Column( - children: [ - const SizedBox(height: 16,), - AButton( - text: _subtitle.update, - onPressed: _update, - ), - ], - ), + }), + if (_enableEdit) + Column( + children: [ + const SizedBox( + height: 16, + ), + AButton( + text: _subtitle.update, + onPressed: _update, + ), + ], + ), ], ), ), diff --git a/lib/views/pages/user/gas_refill/request_gas_refill.dart b/lib/views/pages/user/gas_refill/request_gas_refill.dart index 6dfcb72..79a2320 100644 --- a/lib/views/pages/user/gas_refill/request_gas_refill.dart +++ b/lib/views/pages/user/gas_refill/request_gas_refill.dart @@ -22,6 +22,7 @@ import 'package:test_sa/views/widgets/status/gas_refill/gas_type.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import '../../../../controllers/localization/localization.dart'; + class RequestGasRefill extends StatefulWidget { static const String id = "/request-gas-refill"; const RequestGasRefill({Key key}) : super(key: key); @@ -45,16 +46,16 @@ class _RequestGasRefillState extends State { final GlobalKey _scaffoldKey = GlobalKey(); @override - void setState(VoidCallback fn){ - if(mounted) super.setState(() {}); + void setState(VoidCallback fn) { + if (mounted) super.setState(() {}); } _onSubmit() async { - if(_formModel.details.isEmpty){ - if(!_addNewModel()) return; + if (_formModel.details.isEmpty) { + if (!_addNewModel()) return; } - _isLoading =true; + _isLoading = true; setState(() {}); int status = await _gasRefillProvider.createModel( @@ -62,40 +63,34 @@ class _RequestGasRefillState extends State { host: _settingProvider.host, model: _formModel, ); - _isLoading =false; + _isLoading = false; setState(() {}); - if(status >= 200 && status < 300){ + if (status >= 200 && status < 300) { Fluttertoast.showToast( msg: _subtitle.requestCompleteSuccessfully, ); Navigator.of(context).pop(); - }else{ - String errorMessage = HttpStatusManger.getStatusMessage( - status: status, subtitle: _subtitle); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - errorMessage - ), - ) - ); + } else { + String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle); + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text(errorMessage), + )); } } - bool _addNewModel(){ + bool _addNewModel() { _validate = true; - if(!_formKey.currentState.validate()){ + if (!_formKey.currentState.validate()) { setState(() {}); return false; } _formKey.currentState.save(); - if(!_currentDetails.validate()) { - setState(() { }); + if (!_currentDetails.validate()) { + setState(() {}); return false; } - - _formModel.details.insert(0,_currentDetails); + _formModel.details.insert(0, _currentDetails); _validate = false; Scrollable.ensureVisible(_DetailsKey.currentContext); _requestedQuantityController.clear(); @@ -109,12 +104,13 @@ class _RequestGasRefillState extends State { _requestedQuantityController.dispose(); super.dispose(); } + @override Widget build(BuildContext context) { _subtitle = AppLocalization.of(context).subtitle; _userProvider = Provider.of(context); _settingProvider = Provider.of(context); - _gasRefillProvider = Provider.of(context,listen: false); + _gasRefillProvider = Provider.of(context, listen: false); return Scaffold( key: _scaffoldKey, body: Form( @@ -135,11 +131,7 @@ class _RequestGasRefillState extends State { padding: const EdgeInsets.all(8.0), child: Text( "Request Gas Refill", - style: Theme.of(context).textTheme.headline5.copyWith( - color: Theme.of(context).primaryColor, - fontSize: 28, - fontWeight: FontWeight.bold - ), + style: Theme.of(context).textTheme.headline5.copyWith(color: Theme.of(context).primaryColor, fontSize: 28, fontWeight: FontWeight.bold), ), ), ), @@ -159,68 +151,101 @@ class _RequestGasRefillState extends State { // ), // const SizedBox(height: 8,), ASubTitle(_subtitle.status), - if(_validate && _formModel.status == null) - ASubTitle(_subtitle.requiredWord,color: Colors.red,), - const SizedBox(height: 4,), - GasStatusMenu( - initialValue: _formModel.status ?? const Lookup( - value: 1 + if (_validate && _formModel.status == null) + ASubTitle( + _subtitle.requiredWord, + color: Colors.red, ), - onSelect: (status){ + const SizedBox( + height: 4, + ), + GasStatusMenu( + initialValue: _formModel.status ?? const Lookup(value: 1), + onSelect: (status) { _formModel.status = status; }, ), - const SizedBox(height: 8,), - Divider(color: Theme.of(context).colorScheme.primary,), - const SizedBox(height: 4,), + const SizedBox( + height: 8, + ), + Divider( + color: Theme.of(context).colorScheme.primary, + ), + const SizedBox( + height: 4, + ), const ASubTitle("Type"), - if(_validate && _currentDetails.type == null) - ASubTitle(_subtitle.requiredWord,color: Colors.red,), - const SizedBox(height: 4,), + if (_validate && _currentDetails.type == null) + ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ), + const SizedBox( + height: 4, + ), GasTypeMenu( initialValue: _currentDetails.type, - onSelect: (status){ + onSelect: (status) { _currentDetails.type = status; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Cylinder Size"), - if(_validate && _currentDetails.cylinderSize == null) - ASubTitle(_subtitle.requiredWord,color: Colors.red,), - const SizedBox(height: 4,), + if (_validate && _currentDetails.cylinderSize == null) + ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ), + const SizedBox( + height: 4, + ), GasCylinderSizeMenu( initialValue: _currentDetails.cylinderSize, - onSelect: (status){ + onSelect: (status) { _currentDetails.cylinderSize = status; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Cylinder Type"), - if(_validate && _currentDetails.cylinderSize == null) - ASubTitle(_subtitle.requiredWord,color: Colors.red,), - const SizedBox(height: 4,), + if (_validate && _currentDetails.cylinderSize == null) + ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ), + const SizedBox( + height: 4, + ), GasCylinderTypesMenu( initialValue: _currentDetails.cylinderType, - onSelect: (status){ + onSelect: (status) { _currentDetails.cylinderType = status; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), ASubTitle(_subtitle.quantity), - if(_validate && _currentDetails.requestedQuantity == null) - ASubTitle(_subtitle.requiredWord,color: Colors.red,), - SizedBox(height: 4,), + if (_validate && _currentDetails.requestedQuantity == null) + ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ), + SizedBox( + height: 4, + ), ATextFormField( initialValue: (_currentDetails?.requestedQuantity ?? "").toString(), textAlign: TextAlign.center, controller: _requestedQuantityController, style: Theme.of(context).textTheme.subtitle1, - validator: (value) => - Validator.isNumeric(value) - ? null : "allow numbers only", + validator: (value) => Validator.isNumeric(value) ? null : "allow numbers only", textInputType: TextInputType.number, - onSaved: (value){ + onSaved: (value) { _currentDetails.requestedQuantity = double.tryParse(value); }, ), @@ -229,30 +254,30 @@ class _RequestGasRefillState extends State { text: _subtitle.add, onPressed: _addNewModel, ), - if(_formModel.details.isNotEmpty) - const ASubTitle("Gas Requests"), + if (_formModel.details.isNotEmpty) const ASubTitle("Gas Requests"), ListView.builder( - key: _DetailsKey, - shrinkWrap: true, - physics: const ClampingScrollPhysics(), - itemCount: _formModel.details.length, - itemBuilder: (context,index){ - final model = _formModel.details[index]; - return GasRefillCreateDetailsItem( - model: model, - onDelete: (){ - _formModel.details.remove(model); - setState(() {}); - }, - ); - } - ), + key: _DetailsKey, + shrinkWrap: true, + physics: const ClampingScrollPhysics(), + itemCount: _formModel.details.length, + itemBuilder: (context, index) { + final model = _formModel.details[index]; + return GasRefillCreateDetailsItem( + model: model, + onDelete: () { + _formModel.details.remove(model); + setState(() {}); + }, + ); + }), const SizedBox(height: 16), AButton( text: _subtitle.submit, onPressed: _onSubmit, ), - const SizedBox(height: 100,) + const SizedBox( + height: 100, + ) ], ), ), @@ -262,4 +287,3 @@ class _RequestGasRefillState extends State { ); } } - diff --git a/lib/views/pages/user/gas_refill/track_gas_refill.dart b/lib/views/pages/user/gas_refill/track_gas_refill.dart index 713c953..aa3141c 100644 --- a/lib/views/pages/user/gas_refill/track_gas_refill.dart +++ b/lib/views/pages/user/gas_refill/track_gas_refill.dart @@ -9,6 +9,7 @@ import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/gas_refill/gas_refill_list.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; + class TrackGasRefillPage extends StatefulWidget { static const String id = "/track-gas-refill"; @@ -18,8 +19,7 @@ class TrackGasRefillPage extends StatefulWidget { State createState() => _TrackGasRefillPageState(); } -class _TrackGasRefillPageState extends State - with TickerProviderStateMixin{ +class _TrackGasRefillPageState extends State with TickerProviderStateMixin { GasRefillProvider _gasRefillProvider; UserProvider _userProvider; SettingProvider _settingProvider; @@ -48,8 +48,8 @@ class _TrackGasRefillPageState extends State Column( children: [ Container( - color:AColors.white, - padding: const EdgeInsets.symmetric(horizontal: 0,vertical: 4), + color: AColors.white, + padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), child: Column( children: [ Row( @@ -59,17 +59,15 @@ class _TrackGasRefillPageState extends State child: Center( child: Text( _subtitle.serviceRequests, - style: Theme.of(context).textTheme.headline6.copyWith( - color: AColors.grey3A, - fontStyle: FontStyle.italic - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.grey3A, fontStyle: FontStyle.italic), ), ), ), - const SizedBox(width: 48,) + const SizedBox( + width: 48, + ) ], ), - ], ), ), @@ -87,7 +85,6 @@ class _TrackGasRefillPageState extends State ), ], ), - ], ), ), diff --git a/lib/views/pages/user/notifications/notifications_list.dart b/lib/views/pages/user/notifications/notifications_list.dart index 6034f1a..61c7c33 100644 --- a/lib/views/pages/user/notifications/notifications_list.dart +++ b/lib/views/pages/user/notifications/notifications_list.dart @@ -6,6 +6,7 @@ import 'package:test_sa/views/pages/user/requests/future_request_service_details import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/notifications/notification_item.dart'; + class NotificationsList extends StatelessWidget { final List notifications; final bool nextPage; @@ -16,28 +17,26 @@ class NotificationsList extends StatelessWidget { @override Widget build(BuildContext context) { Subtitle _subtitle = AppLocalization.of(context).subtitle; - if(notifications.length == 0){ - return NoItemFound(message: _subtitle.notificationsNotFound,); + if (notifications.length == 0) { + return NoItemFound( + message: _subtitle.notificationsNotFound, + ); } return LazyLoading( nextPage: nextPage, onLazyLoad: onLazyLoad, child: ListView.builder( - physics: BouncingScrollPhysics(), - itemCount: notifications.length, - padding: EdgeInsets.symmetric(horizontal: 16,vertical: 8), - itemBuilder: (context,itemIndex){ + physics: BouncingScrollPhysics(), + itemCount: notifications.length, + padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8), + itemBuilder: (context, itemIndex) { return NotificationItem( notification: notifications[itemIndex], - onPressed: (notification){ - Navigator.of(context).pushNamed( - FutureRequestServiceDetails.id, - arguments: notification.requestId - ); + onPressed: (notification) { + Navigator.of(context).pushNamed(FutureRequestServiceDetails.id, arguments: notification.requestId); }, ); - } - ), + }), ); } } diff --git a/lib/views/pages/user/notifications/notifications_page.dart b/lib/views/pages/user/notifications/notifications_page.dart index a0e8525..d06892d 100644 --- a/lib/views/pages/user/notifications/notifications_page.dart +++ b/lib/views/pages/user/notifications/notifications_page.dart @@ -9,14 +9,14 @@ import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/pages/user/notifications/notifications_list.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; + class NotificationsPage extends StatefulWidget { static final String id = "/notifications"; @override _NotificationsPageState createState() => _NotificationsPageState(); } -class _NotificationsPageState extends State - with TickerProviderStateMixin{ +class _NotificationsPageState extends State with TickerProviderStateMixin { NotificationsProvider _notificationsProvider; UserProvider _userProvider; SettingProvider _settingProvider; @@ -36,9 +36,9 @@ class _NotificationsPageState extends State onRefresh: () async { _notificationsProvider.reset(); await _notificationsProvider.getNotifications( - user: _userProvider.user, - host: _settingProvider.host, - hospitalId: _userProvider.user.hospital.id, + user: _userProvider.user, + host: _settingProvider.host, + hospitalId: _userProvider.user.hospital.id, ); }, child: Stack( @@ -46,8 +46,8 @@ class _NotificationsPageState extends State Column( children: [ Container( - color:AColors.primaryColor, - padding: const EdgeInsets.symmetric(horizontal: 0,vertical: 4), + color: AColors.primaryColor, + padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), child: Column( children: [ Row( @@ -57,17 +57,15 @@ class _NotificationsPageState extends State child: Center( child: Text( _subtitle.notifications, - style: Theme.of(context).textTheme.headline6.copyWith( - color: AColors.white, - fontStyle: FontStyle.italic - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), ), ), ), - SizedBox(width: 48,) + SizedBox( + width: 48, + ) ], ), - ], ), ), @@ -86,7 +84,6 @@ class _NotificationsPageState extends State ), ], ), - ], ), ), diff --git a/lib/views/pages/user/profile_page.dart b/lib/views/pages/user/profile_page.dart index 0b3757a..6b5c976 100644 --- a/lib/views/pages/user/profile_page.dart +++ b/lib/views/pages/user/profile_page.dart @@ -16,6 +16,7 @@ import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/departments/department_button.dart'; import 'package:test_sa/views/widgets/hospitals/hospital_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; + class ProfilePage extends StatefulWidget { static final String id = "/user/profile"; @override @@ -38,13 +39,13 @@ class _ProfilePageState extends State { _width = MediaQuery.of(context).size.width; _height = MediaQuery.of(context).size.height; Subtitle _subtitle = AppLocalization.of(context).subtitle; - if(_firstTime){ + if (_firstTime) { _user = User.fromJson(_userProvider.user.toJson()); _firstTime = false; } return Scaffold( key: _scaffoldKey, - body:LoadingManager( + body: LoadingManager( isLoading: _userProvider.isLoading, isFailedLoading: false, stateCode: 200, @@ -60,23 +61,19 @@ class _ProfilePageState extends State { Hero( tag: "logo", child: Image( - height: _height/4, + height: _height / 4, image: AssetImage("assets/images/logo.png"), ), ), Container( - padding: EdgeInsets.symmetric(horizontal: 16,vertical: 16), + padding: EdgeInsets.symmetric(horizontal: 16, vertical: 16), margin: EdgeInsets.symmetric(horizontal: 16), - decoration: BoxDecoration( - color: AColors.primaryColor, - borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), - boxShadow: [ - BoxShadow( - color: AColors.grey, - offset: Offset(0,-1), - ) - ] - ), + decoration: BoxDecoration(color: AColors.primaryColor, borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), boxShadow: [ + BoxShadow( + color: AColors.grey, + offset: Offset(0, -1), + ) + ]), child: Column( children: [ ATextFormField( @@ -85,13 +82,14 @@ class _ProfilePageState extends State { enable: false, prefixIconData: Icons.account_circle, style: Theme.of(context).textTheme.headline6, - validator: (value) => Validator.hasValue(value) - ? null : _subtitle.nameValidateMessage, - onSaved: (value){ + validator: (value) => Validator.hasValue(value) ? null : _subtitle.nameValidateMessage, + onSaved: (value) { _user.userName = value; }, ), - SizedBox(height: 8,), + SizedBox( + height: 8, + ), ATextFormField( initialValue: _user.email, hintText: _subtitle.email, @@ -99,110 +97,105 @@ class _ProfilePageState extends State { prefixIconData: Icons.email, textInputType: TextInputType.emailAddress, style: Theme.of(context).textTheme.headline6, - validator: (value) => Validator.isEmail(value) - ? null : _subtitle.emailValidateMessage, - onSaved: (value){ + validator: (value) => Validator.isEmail(value) ? null : _subtitle.emailValidateMessage, + onSaved: (value) { _user.email = value; }, ), - SizedBox(height: 8,), + SizedBox( + height: 8, + ), AbsorbPointer( child: HospitalButton( hospital: _user.hospital, - onHospitalPick: (hospital){ + onHospitalPick: (hospital) { _user.hospital = hospital; setState(() {}); }, ), ), - SizedBox(height: 8,), + SizedBox( + height: 8, + ), DepartmentButton( department: _user.department, - onDepartmentPick: (department){ + onDepartmentPick: (department) { _user.department = department; setState(() {}); }, ), - SizedBox(height: 8,), + SizedBox( + height: 8, + ), ATextFormField( initialValue: _user.phoneNumber, hintText: _subtitle.phoneNumber, style: Theme.of(context).textTheme.headline6, prefixIconData: Icons.phone_android, - validator: (value) => - Validator.isPhoneNumber(value) ? null : _subtitle.phoneNumberValidateMessage, + validator: (value) => Validator.isPhoneNumber(value) ? null : _subtitle.phoneNumberValidateMessage, textInputType: TextInputType.phone, - onSaved: (value){ + onSaved: (value) { _user.phoneNumber = value; }, ), - SizedBox(height: 8,), + SizedBox( + height: 8, + ), ATextFormField( initialValue: _user.whatsApp, hintText: _subtitle.whatsApp, style: Theme.of(context).textTheme.headline6, prefixIconData: FontAwesomeIcons.whatsapp, prefixIconSize: 36, - validator: (value) => - Validator.isPhoneNumber(value) ? null : _subtitle.phoneNumberValidateMessage, + validator: (value) => Validator.isPhoneNumber(value) ? null : _subtitle.phoneNumberValidateMessage, textInputType: TextInputType.phone, - onSaved: (value){ + onSaved: (value) { _user.whatsApp = value; }, ), ], ), ), - SizedBox(height: 16,), + SizedBox( + height: 16, + ), Center( child: SizedBox( height: _width / 8, - width: _width/1.2, + width: _width / 1.2, child: AButton( text: _subtitle.update, onPressed: () async { - if(!_formKey.currentState.validate()) - return; + if (!_formKey.currentState.validate()) return; _formKey.currentState.save(); - if(_user.department?.id == null){ - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - _subtitle.unitRequired - ), - ) - ); + if (_user.department?.id == null) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text(_subtitle.unitRequired), + )); return; } int status = await _userProvider.updateProfile( user: _user, host: _settingProvider.host, ); - if(status >= 200 && status < 300){ + if (status >= 200 && status < 300) { _settingProvider.setUser(_userProvider.user); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - _subtitle.requestCompleteSuccessfully - ), - ) - ); - }else{ - String errorMessage = HttpStatusManger.getStatusMessage( - status: status, subtitle: _subtitle); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - errorMessage - ), - ) - ); + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text(_subtitle.requestCompleteSuccessfully), + )); + } else { + String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle); + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text(errorMessage), + )); } }, ), ), ), - SizedBox(height: 32,), + SizedBox( + height: 32, + ), ], ), ), diff --git a/lib/views/pages/user/report_issues_page.dart b/lib/views/pages/user/report_issues_page.dart index a1641b2..3a2f3f3 100644 --- a/lib/views/pages/user/report_issues_page.dart +++ b/lib/views/pages/user/report_issues_page.dart @@ -16,6 +16,7 @@ import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/issues/report_issue_item.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; + class ReportIssuesPage extends StatefulWidget { static final String id = "/report-issue"; final ServiceRequest serviceRequest; @@ -64,22 +65,18 @@ class _ReportIssuesPageState extends State { ), child: Text( _subtitle.reportIssue, - style: Theme.of(context).textTheme.headline5.copyWith( - color: AColors.cyan, - fontWeight: FontWeight.bold - ), + style: Theme.of(context).textTheme.headline5.copyWith(color: AColors.cyan, fontWeight: FontWeight.bold), ), ), ), Image( - height: _height/8, + height: _height / 8, image: AssetImage("assets/images/logo.png"), ), - Container( padding: EdgeInsets.symmetric( - horizontal: 16, - vertical: 16, + horizontal: 16, + vertical: 16, ), decoration: BoxDecoration( color: AColors.grey, @@ -90,10 +87,9 @@ class _ReportIssuesPageState extends State { boxShadow: [ BoxShadow( color: AColors.grey, - offset: Offset(0,-1), + offset: Offset(0, -1), ) - ] - ), + ]), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -102,32 +98,30 @@ class _ReportIssuesPageState extends State { hintText: _subtitle.title, textAlign: TextAlign.center, style: Theme.of(context).textTheme.headline6, - validator: (value) => - Validator.hasValue(value) - ? null : _subtitle.titleValidateMessage, + validator: (value) => Validator.hasValue(value) ? null : _subtitle.titleValidateMessage, textInputType: TextInputType.name, - onSaved: (value){ + onSaved: (value) { _issue.title = value; }, ), - SizedBox(height: 8,), - Column( - children: List.generate( - _issues.length, - (index) => ReportIssueItem( - isSelected: _issue.reports.contains(index), - issueInfo: _issues[index], - onChange: (info,value){ - if(value){ - _issue.reports.add(index); - } else { - _issue.reports.remove(index); - } - setState(() {}); - }, - ) - ) + SizedBox( + height: 8, ), + Column( + children: List.generate( + _issues.length, + (index) => ReportIssueItem( + isSelected: _issue.reports.contains(index), + issueInfo: _issues[index], + onChange: (info, value) { + if (value) { + _issue.reports.add(index); + } else { + _issue.reports.remove(index); + } + setState(() {}); + }, + ))), Padding( padding: const EdgeInsets.all(8.0), child: Text( @@ -139,7 +133,7 @@ class _ReportIssuesPageState extends State { hintText: _subtitle.description, style: Theme.of(context).textTheme.subtitle1, textInputType: TextInputType.multiline, - onSaved: (value){ + onSaved: (value) { _issue.description = value; }, ), @@ -148,20 +142,19 @@ class _ReportIssuesPageState extends State { child: AButton( text: _subtitle.submit, onPressed: () async { - if(!_formKey.currentState.validate()) - return; + if (!_formKey.currentState.validate()) return; _formKey.currentState.save(); _issue.serviceRequestId = widget.serviceRequest.id; - _isLoading =true; + _isLoading = true; setState(() {}); int status = await _serviceRequestsProvider.createIssueReport( user: _userProvider.user, host: _settingProvider.host, issue: _issue, ); - _isLoading =false; + _isLoading = false; setState(() {}); - if(status >= 200 && status < 300){ + if (status >= 200 && status < 300) { Fluttertoast.showToast( msg: _subtitle.requestCompleteSuccessfully, ); diff --git a/lib/views/pages/user/requests/create_request.dart b/lib/views/pages/user/requests/create_request.dart index b5c7147..c344698 100644 --- a/lib/views/pages/user/requests/create_request.dart +++ b/lib/views/pages/user/requests/create_request.dart @@ -31,6 +31,7 @@ import 'package:test_sa/views/widgets/status/service_request/service_request_pri import 'package:test_sa/views/widgets/status/service_request/service_request_through_mune.dart'; import 'package:test_sa/views/widgets/status/service_request/service_request_types_mune.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; + class CreateRequestPage extends StatefulWidget { static final String id = "/create-request"; @@ -136,40 +137,56 @@ class _CreateRequestPageState extends State { setState(() {}); }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Priority"), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ServiceRequestPriorityMenu( initialValue: _serviceRequest.priority, - onSelect: (status){ + onSelect: (status) { _serviceRequest.priority = status; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Defect Type"), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ServiceRequestDefectTypesMenu( initialValue: _serviceRequest.defectType, - onSelect: (status){ + onSelect: (status) { _serviceRequest.defectType = status; }, ), 12.height, - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Type"), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ServiceRequestTypesMenu( initialValue: _serviceRequest.type, - onSelect: (status){ + onSelect: (status) { _serviceRequest.type = status; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Through"), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ServiceRequestedThroughMenu( - initialValue: const Lookup(name: "App",value: 3), - onSelect: (status){ + initialValue: const Lookup(name: "App", value: 3), + onSelect: (status) { _serviceRequest.requestedThrough = status; }, ), @@ -210,9 +227,8 @@ class _CreateRequestPageState extends State { _serviceRequest.deviceId = _device?.id ?? ""; _isLoading = true; setState(() {}); - _serviceRequest.devicePhotos = _deviceImages.map( - (e) => "${e.path.split("/").last}|${base64Encode(e.readAsBytesSync())}").toList(); - if(_serviceRequest.audio != null){ + _serviceRequest.devicePhotos = _deviceImages.map((e) => "${e.path.split("/").last}|${base64Encode(e.readAsBytesSync())}").toList(); + if (_serviceRequest.audio != null) { final file = File(_serviceRequest.audio); _serviceRequest.audio = "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}"; } diff --git a/lib/views/pages/user/requests/future_request_service_details.dart b/lib/views/pages/user/requests/future_request_service_details.dart index 1c2dbe3..3ece8e6 100644 --- a/lib/views/pages/user/requests/future_request_service_details.dart +++ b/lib/views/pages/user/requests/future_request_service_details.dart @@ -9,6 +9,7 @@ import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/pages/user/requests/request_details.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/failed_loading.dart'; + class FutureRequestServiceDetails extends StatefulWidget { static final String id = "/service-request-details"; @@ -17,7 +18,6 @@ class FutureRequestServiceDetails extends StatefulWidget { } class _FutureRequestServiceDetailsState extends State { - UserProvider _userProvider; SettingProvider _settingProvider; @override @@ -28,19 +28,16 @@ class _FutureRequestServiceDetailsState extends State( - future: ServiceRequestsProvider().getSingleServiceRequest( - requestId: requestId, - user: _userProvider.user, - host: _settingProvider.host, - subtitle: _subtitle - ), - builder: (BuildContext context, AsyncSnapshot snapshot){ - if(snapshot.hasError) + future: ServiceRequestsProvider().getSingleServiceRequest(requestId: requestId, user: _userProvider.user, host: _settingProvider.host, subtitle: _subtitle), + builder: (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.hasError) return FailedLoading( message: snapshot.error.toString(), - onReload: (){setState(() {});}, + onReload: () { + setState(() {}); + }, ); - if(snapshot.hasData){ + if (snapshot.hasData) { return RequestDetailsPage( serviceRequest: snapshot.data, ); diff --git a/lib/views/pages/user/requests/report/create_service_report.dart b/lib/views/pages/user/requests/report/create_service_report.dart index f077fbd..3afe07b 100644 --- a/lib/views/pages/user/requests/report/create_service_report.dart +++ b/lib/views/pages/user/requests/report/create_service_report.dart @@ -37,18 +37,17 @@ import 'package:test_sa/views/widgets/status/report/service_report_type.dart'; import 'package:test_sa/views/widgets/status/report/service_status.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; + class CreateServiceReport extends StatefulWidget { static final String id = "/create-service-report"; - final ServiceRequest request ; + final ServiceRequest request; const CreateServiceReport({Key key, this.request}) : super(key: key); @override _CreateServiceReportState createState() => _CreateServiceReportState(); } -class _CreateServiceReportState extends State with TickerProviderStateMixin{ - - +class _CreateServiceReportState extends State with TickerProviderStateMixin { UserProvider _userProvider; SettingProvider _settingProvider; ServiceRequestsProvider _serviceRequestsProvider; @@ -67,11 +66,10 @@ class _CreateServiceReportState extends State with TickerPr @override void initState() { _serviceReport = ServiceReport( - visitDate: DateTime.now(), - //type: const Lookup(value: 2), - device: widget.request.device, - parts: [] - ); + visitDate: DateTime.now(), + //type: const Lookup(value: 2), + device: widget.request.device, + parts: []); super.initState(); } @@ -81,6 +79,7 @@ class _CreateServiceReportState extends State with TickerPr _workPreformedController.dispose(); super.dispose(); } + @override Widget build(BuildContext context) { _userProvider = Provider.of(context); @@ -102,52 +101,54 @@ class _CreateServiceReportState extends State with TickerPr ListView( children: [ //AppNameBar(), - const SizedBox(height: 16,), + const SizedBox( + height: 16, + ), Center( child: Padding( padding: const EdgeInsets.all(8.0), child: Text( _subtitle.newServiceReport, - style: Theme.of(context).textTheme.headline5.copyWith( - color: AColors.cyan, - fontSize: 28, - fontWeight: FontWeight.bold - ), + style: Theme.of(context).textTheme.headline5.copyWith(color: AColors.cyan, fontSize: 28, fontWeight: FontWeight.bold), ), ), ), Container( padding: const EdgeInsets.symmetric(horizontal: 16), - margin: const EdgeInsets.symmetric(horizontal: 16,vertical: 16), - decoration: BoxDecoration( + margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 16), + decoration: BoxDecoration(color: AColors.grey, borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), boxShadow: [ + const BoxShadow( color: AColors.grey, - borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), - boxShadow: [ - const BoxShadow( - color: AColors.grey, - offset: Offset(0,-1), - ) - ] - ), + offset: Offset(0, -1), + ) + ]), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), Wrap( spacing: 10, children: [ - ASubTitle("${_subtitle.callId}: ${widget.request.requestCode}",font: 14,), - widget.request.deviceSerialNumber == null ? const SizedBox(): - ASubTitle("${_subtitle.deviceSN}: ${widget.request.deviceSerialNumber}",font: 14,), + ASubTitle( + "${_subtitle.callId}: ${widget.request.requestCode}", + font: 14, + ), + widget.request.deviceSerialNumber == null + ? const SizedBox() + : ASubTitle( + "${_subtitle.deviceSN}: ${widget.request.deviceSerialNumber}", + font: 14, + ), Text( "${_subtitle.customer}: ${widget.request.hospitalName}", style: Theme.of(context).textTheme.subtitle1.copyWith( - fontWeight: FontWeight.bold, - fontSize: 12, - ), + fontWeight: FontWeight.bold, + fontSize: 12, + ), textScaleFactor: AppStyle.getScaleFactor(context), ) - ], ), const Divider(), @@ -181,9 +182,12 @@ class _CreateServiceReportState extends State with TickerPr crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.visitDate), - _validate && _serviceReport.visitDate == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), + _validate && _serviceReport.visitDate == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), Row( children: [ Expanded( @@ -191,7 +195,7 @@ class _CreateServiceReportState extends State with TickerPr date: _serviceReport.visitDate, from: DateTime.now().subtract(const Duration(days: 365)), to: DateTime.now().add(const Duration(days: 365)), - onDatePicker: (date){ + onDatePicker: (date) { _serviceReport.visitDate = date; setState(() {}); }, @@ -202,10 +206,11 @@ class _CreateServiceReportState extends State with TickerPr ], ), ), - ], ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), // device sn Visibility( visible: widget.request.deviceSerialNumber == null, @@ -213,33 +218,47 @@ class _CreateServiceReportState extends State with TickerPr crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.deviceSN), - _validate && _serviceReport.device?.id == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), + _validate && _serviceReport.device?.id == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), AutoCompleteDeviceField( hospitalId: widget.request.hospitalId, initialValue: _serviceReport.device, - onPick: (id){ + onPick: (id) { _serviceReport.device.id = id; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), ], ), ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), ASubTitle(_subtitle.serviceType), - _validate && _serviceReport.assetType == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), - const SizedBox(height: 4,), + _validate && _serviceReport.assetType == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), + const SizedBox( + height: 4, + ), ServiceAssetTypeMenu( initialValue: _serviceReport.assetType, - onSelect: (status){ + onSelect: (status) { _serviceReport.assetType = status; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), // Report status and Service Type Row( children: [ @@ -249,40 +268,51 @@ class _CreateServiceReportState extends State with TickerPr crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.reportStatus), - _validate && _serviceReport.status == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), - const SizedBox(height: 4,), + _validate && _serviceReport.status == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), + const SizedBox( + height: 4, + ), ServiceReportStatusMenu( report: _serviceReport, - onSelect: (status){ + onSelect: (status) { _serviceReport.status = status; }, ), ], ), ), - const SizedBox(width: 8,), + const SizedBox( + width: 8, + ), // Provider.of(context).isLoading == null // ? const SizedBox.shrink(): // Call's last Situation Consumer( builder: (_, provider, __) { - if(provider.isLoading == null) return const SizedBox.shrink(); - return Expanded( + if (provider.isLoading == null) return const SizedBox.shrink(); + return Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.callLastSituation), - _validate && _serviceReport.callLastSituation == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), - const SizedBox(height: 4,), + _validate && _serviceReport.callLastSituation == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), + const SizedBox( + height: 4, + ), ServiceReportLastCallsMenu( report: _serviceReport, - onSelect: (status){ - if(status?.value == 12 - || _serviceReport.callLastSituation?.value == 12){ + onSelect: (status) { + if (status?.value == 12 || _serviceReport.callLastSituation?.value == 12) { _serviceReport.callLastSituation = status; setState(() {}); } else { @@ -297,69 +327,83 @@ class _CreateServiceReportState extends State with TickerPr ), ], ), - SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), const ASubTitle("Assign Employee"), - const SizedBox(height: 8,), - _validate && _serviceReport.engineer == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), - const SizedBox(height: 4,), + const SizedBox( + height: 8, + ), + _validate && _serviceReport.engineer == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), + const SizedBox( + height: 4, + ), EngineersMenu( initialValue: _serviceReport.engineer, - onSelect: (engineer){ + onSelect: (engineer) { _serviceReport.engineer = engineer; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), // invoice number & code - _serviceReport.callLastSituation?.id != 12 ? const SizedBox.shrink(): - Row( - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, + _serviceReport.callLastSituation?.id != 12 + ? const SizedBox.shrink() + : Row( children: [ - ASubTitle(_subtitle.invoiceNumber), - const SizedBox(height: 8,), - ATextFormField( - initialValue: _serviceReport?.invoiceNumber, - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - validator: (value) => - Validator.hasValue(value) - ? null : _subtitle.requiredWord, - textInputType: TextInputType.number, - onSaved: (value){ - _serviceReport.invoiceNumber = value; - }, + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ASubTitle(_subtitle.invoiceNumber), + const SizedBox( + height: 8, + ), + ATextFormField( + initialValue: _serviceReport?.invoiceNumber, + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord, + textInputType: TextInputType.number, + onSaved: (value) { + _serviceReport.invoiceNumber = value; + }, + ), + ], + ), ), - ], - ), - ), - const SizedBox(width: 8,), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ASubTitle(_subtitle.invoiceCode), - const SizedBox(height: 4,), - ATextFormField( - initialValue: _serviceReport?.invoiceCode, - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - validator: (value) => - Validator.hasValue(value) - ? null : _subtitle.requiredWord, - textInputType: TextInputType.text, - onSaved: (value){ - _serviceReport.invoiceCode = value; - }, + const SizedBox( + width: 8, + ), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ASubTitle(_subtitle.invoiceCode), + const SizedBox( + height: 4, + ), + ATextFormField( + initialValue: _serviceReport?.invoiceCode, + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord, + textInputType: TextInputType.text, + onSaved: (value) { + _serviceReport.invoiceCode = value; + }, + ), + ], + ), ), ], ), - ), - ], - ), // const SizedBox(height: 8,), // Row( @@ -421,7 +465,9 @@ class _CreateServiceReportState extends State with TickerPr // ), // const SizedBox(height: 8,), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), Row( children: [ // reasons @@ -430,17 +476,21 @@ class _CreateServiceReportState extends State with TickerPr crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.reasons), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ServiceReportReasonsMenu( initialValue: _serviceReport.reason, - onSelect: (status){ + onSelect: (status) { _serviceReport.reason = status; }, ), ], ), ), - const SizedBox(width: 8,), + const SizedBox( + width: 8, + ), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -449,8 +499,8 @@ class _CreateServiceReportState extends State with TickerPr AMiniOneImagePicker( //error: _validate && _serviceReport.image == null, image: _image, - onPick: (image){ - _image =image; + onPick: (image) { + _image = image; _serviceReport.image = "${image.path.split("/").last}|${base64Encode(image.readAsBytesSync())}"; }, ), @@ -459,7 +509,9 @@ class _CreateServiceReportState extends State with TickerPr ), ], ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), // Traveling Hours & Working Hours Row( children: [ @@ -468,13 +520,15 @@ class _CreateServiceReportState extends State with TickerPr crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.workingHours), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), Row( children: [ Expanded( child: AppTimer( timer: _serviceReport.timer, - onChange: (timer) async{ + onChange: (timer) async { _serviceReport.timer = timer; return true; }, @@ -523,7 +577,9 @@ class _CreateServiceReportState extends State with TickerPr // ), ], ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), // Operating Hours and Job Sheet Number // Row( // children: [ @@ -571,29 +627,39 @@ class _CreateServiceReportState extends State with TickerPr // ], // ), //const SizedBox(height: 8,), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Nurse Signature"), ESignature( oldSignature: _serviceReport.signatureNurse, newSignature: _serviceReport.localNurseSignature, - onSaved: (signature){ - if(signature == null || signature.isEmpty) {return;} + onSaved: (signature) { + if (signature == null || signature.isEmpty) { + return; + } _serviceReport.localNurseSignature = signature; _serviceReport.signatureNurse = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Engineer Signature"), ESignature( oldSignature: _serviceReport.signatureEngineer, newSignature: _serviceReport.localNurseSignature, - onSaved: (signature){ - if(signature == null || signature.isEmpty) {return;} + onSaved: (signature) { + if (signature == null || signature.isEmpty) { + return; + } _serviceReport.localNurseSignature = signature; _serviceReport.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), // Part Number and Quantity Row( children: [ @@ -603,45 +669,49 @@ class _CreateServiceReportState extends State with TickerPr crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.partNumber), - _validate && _serviceReport.parts == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), - const SizedBox(height: 4,), + _validate && _serviceReport.parts == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), + const SizedBox( + height: 4, + ), AutoCompletePartsField( - onPick: (part){ + onPick: (part) { _serviceReport.parts.add(part); }, ), ], ), ), - ], ), - SizedBox(height: 8*AppStyle.getScaleFactor(context),), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), Row( children: [ - Expanded(flex:3,child: Text(_subtitle.number)), - Expanded(flex: 1,child: Text(_subtitle.quantity)), + Expanded(flex: 3, child: Text(_subtitle.number)), + Expanded(flex: 1, child: Text(_subtitle.quantity)), ], ), Column( - children: List.generate( - _serviceReport.parts.length, - (index) { - Part _part = _serviceReport.parts[index]; - return PartItem( - part: _part, - onDelete: (part){ - _serviceReport.parts.remove(part); - setState(() {}); - }, - ); - } - ), + children: List.generate(_serviceReport.parts.length, (index) { + Part _part = _serviceReport.parts[index]; + return PartItem( + part: _part, + onDelete: (part) { + _serviceReport.parts.remove(part); + setState(() {}); + }, + ); + }), + ), + const SizedBox( + height: 16, ), - const SizedBox(height: 16,), - ], ), ), @@ -651,47 +721,37 @@ class _CreateServiceReportState extends State with TickerPr text: _subtitle.submit, onPressed: () async { _validate = true; - if(!_formKey.currentState.validate()){ + if (!_formKey.currentState.validate()) { setState(() {}); return; } - if(!_serviceReport.validate()) return; + if (!_serviceReport.validate()) return; _formKey.currentState.save(); - _isLoading =true; + _isLoading = true; setState(() {}); - - - int status = await _serviceRequestsProvider.createServiceReport( - user: _userProvider.user, - host: _settingProvider.host, - report: _serviceReport, - request: widget.request - ); - _isLoading =false; + int status = await _serviceRequestsProvider.createServiceReport(user: _userProvider.user, host: _settingProvider.host, report: _serviceReport, request: widget.request); + _isLoading = false; setState(() {}); - if(status >= 200 && status < 300){ + if (status >= 200 && status < 300) { Fluttertoast.showToast( - msg: _subtitle.requestCompleteSuccessfully, + msg: _subtitle.requestCompleteSuccessfully, ); Navigator.of(context).pop(); Navigator.of(context).pop(); - }else{ - String errorMessage = HttpStatusManger.getStatusMessage( - status: status, subtitle: _subtitle); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - errorMessage - ), - ) - ); + } else { + String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle); + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text(errorMessage), + )); } }, ), ), - const SizedBox(height: 300,) + const SizedBox( + height: 300, + ) ], ), const ABackButton(), diff --git a/lib/views/pages/user/requests/report/edit_service_report.dart b/lib/views/pages/user/requests/report/edit_service_report.dart index bfc8f4f..61692bb 100644 --- a/lib/views/pages/user/requests/report/edit_service_report.dart +++ b/lib/views/pages/user/requests/report/edit_service_report.dart @@ -36,9 +36,10 @@ import 'package:test_sa/views/widgets/status/report/service_report_type.dart'; import 'package:test_sa/views/widgets/status/report/service_status.dart'; import 'package:test_sa/views/widgets/timer/app_timer.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; + class EditServiceReport extends StatefulWidget { static final String id = "/edit-service-report"; - final ServiceRequest request ; + final ServiceRequest request; final ServiceReport report; const EditServiceReport({Key key, this.request, this.report}) : super(key: key); @@ -46,9 +47,7 @@ class EditServiceReport extends StatefulWidget { _EditServiceReportState createState() => _EditServiceReportState(); } -class _EditServiceReportState extends State with TickerProviderStateMixin{ - - +class _EditServiceReportState extends State with TickerProviderStateMixin { UserProvider _userProvider; SettingProvider _settingProvider; ServiceRequestsProvider _serviceRequestsProvider; @@ -76,6 +75,7 @@ class _EditServiceReportState extends State with TickerProvid _workPreformedController.dispose(); super.dispose(); } + @override Widget build(BuildContext context) { _userProvider = Provider.of(context); @@ -97,52 +97,54 @@ class _EditServiceReportState extends State with TickerProvid ListView( children: [ //AppNameBar(), - const SizedBox(height: 16,), + const SizedBox( + height: 16, + ), Center( child: Padding( padding: const EdgeInsets.all(8.0), child: Text( _subtitle.editServiceReport, - style: Theme.of(context).textTheme.headline5.copyWith( - color: AColors.cyan, - fontSize: 28, - fontWeight: FontWeight.bold - ), + style: Theme.of(context).textTheme.headline5.copyWith(color: AColors.cyan, fontSize: 28, fontWeight: FontWeight.bold), ), ), ), Container( padding: const EdgeInsets.symmetric(horizontal: 16), - margin: const EdgeInsets.symmetric(horizontal: 16,vertical: 16), - decoration: BoxDecoration( + margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 16), + decoration: BoxDecoration(color: AColors.grey, borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), boxShadow: [ + const BoxShadow( color: AColors.grey, - borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), - boxShadow: [ - const BoxShadow( - color: AColors.grey, - offset: Offset(0,-1), - ) - ] - ), + offset: Offset(0, -1), + ) + ]), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), Wrap( spacing: 10, children: [ - ASubTitle("${_subtitle.callId}: ${widget.request.requestCode}",font: 14,), - widget.request.deviceSerialNumber == null ? const SizedBox(): - ASubTitle("${_subtitle.deviceSN}: ${widget.request.deviceSerialNumber}",font: 14,), + ASubTitle( + "${_subtitle.callId}: ${widget.request.requestCode}", + font: 14, + ), + widget.request.deviceSerialNumber == null + ? const SizedBox() + : ASubTitle( + "${_subtitle.deviceSN}: ${widget.request.deviceSerialNumber}", + font: 14, + ), Text( "${_subtitle.customer}: ${widget.request.hospitalName}", style: Theme.of(context).textTheme.subtitle1.copyWith( - fontWeight: FontWeight.bold, - fontSize: 12, - ), + fontWeight: FontWeight.bold, + fontSize: 12, + ), textScaleFactor: AppStyle.getScaleFactor(context), ) - ], ), const Divider(), @@ -156,29 +158,39 @@ class _EditServiceReportState extends State with TickerProvid crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.reportType), - _validate && _serviceReport.type == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), - const SizedBox(height: 4,), + _validate && _serviceReport.type == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), + const SizedBox( + height: 4, + ), ServiceReportTypeMenu( initialValue: _serviceReport.type, - onSelect: (status){ + onSelect: (status) { _serviceReport.type = status; }, ), ], ), ), - const SizedBox(width: 8,), + const SizedBox( + width: 8, + ), // visit date Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.visitDate), - _validate && _serviceReport.visitDate == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), + _validate && _serviceReport.visitDate == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), Row( children: [ Expanded( @@ -186,7 +198,7 @@ class _EditServiceReportState extends State with TickerProvid date: _serviceReport.visitDate, from: DateTime.now().subtract(const Duration(days: 365)), to: DateTime.now().add(const Duration(days: 365)), - onDatePicker: (date){ + onDatePicker: (date) { _serviceReport.visitDate = date; setState(() {}); }, @@ -197,58 +209,84 @@ class _EditServiceReportState extends State with TickerProvid ], ), ), - ], ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), // device sn Visibility( - visible: true,//widget.report.device == null, + visible: true, //widget.report.device == null, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.deviceSN), - _validate && _serviceReport.device?.id == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), + _validate && _serviceReport.device?.id == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), AutoCompleteDeviceField( hospitalId: widget.request.hospitalId, initialValue: _serviceReport.device, - onPick: (id){ + onPick: (id) { _serviceReport.device.id = id; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), ], ), ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), ASubTitle(_subtitle.serviceType), - _validate && _serviceReport.assetType == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), - const SizedBox(height: 4,), + _validate && _serviceReport.assetType == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), + const SizedBox( + height: 4, + ), ServiceAssetTypeMenu( initialValue: _serviceReport.assetType, - onSelect: (status){ + onSelect: (status) { _serviceReport.assetType = status; }, ), - const SizedBox(height: 8,), - SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + const SizedBox( + height: 8, + ), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), const ASubTitle("Assign Employee"), - const SizedBox(height: 8,), - _validate && _serviceReport.engineer == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), - const SizedBox(height: 4,), + const SizedBox( + height: 8, + ), + _validate && _serviceReport.engineer == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), + const SizedBox( + height: 4, + ), EngineersMenu( initialValue: _serviceReport.engineer, - onSelect: (engineer){ + onSelect: (engineer) { _serviceReport.engineer = engineer; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), // Report status and Service Type Row( children: [ @@ -258,37 +296,48 @@ class _EditServiceReportState extends State with TickerProvid crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.reportStatus), - _validate && _serviceReport.status == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), - const SizedBox(height: 4,), + _validate && _serviceReport.status == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), + const SizedBox( + height: 4, + ), ServiceReportStatusMenu( report: _serviceReport, - onSelect: (status){ + onSelect: (status) { _serviceReport.status = status; }, ), ], ), ), - const SizedBox(width: 8,), + const SizedBox( + width: 8, + ), Consumer( builder: (_, provider, __) { - if(provider.isLoading == null) return const SizedBox.shrink(); - return Expanded( + if (provider.isLoading == null) return const SizedBox.shrink(); + return Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.callLastSituation), - _validate && _serviceReport.callLastSituation == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), - const SizedBox(height: 4,), + _validate && _serviceReport.callLastSituation == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), + const SizedBox( + height: 4, + ), ServiceReportLastCallsMenu( report: _serviceReport, - onSelect: (status){ - if(status?.value == 12 - || _serviceReport.callLastSituation?.value == 12){ + onSelect: (status) { + if (status?.value == 12 || _serviceReport.callLastSituation?.value == 12) { _serviceReport.callLastSituation = status; setState(() {}); } else { @@ -303,56 +352,61 @@ class _EditServiceReportState extends State with TickerProvid ), ], ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), // invoice number & code - _serviceReport.callLastSituation?.value != 12 ? const SizedBox.shrink(): - Row( - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, + _serviceReport.callLastSituation?.value != 12 + ? const SizedBox.shrink() + : Row( children: [ - ASubTitle(_subtitle.invoiceNumber), - const SizedBox(height: 8,), - ATextFormField( - initialValue: _serviceReport?.invoiceNumber, - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - validator: (value) => - Validator.hasValue(value) - ? null : _subtitle.requiredWord, - textInputType: TextInputType.number, - onSaved: (value){ - _serviceReport.invoiceNumber = value; - }, + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ASubTitle(_subtitle.invoiceNumber), + const SizedBox( + height: 8, + ), + ATextFormField( + initialValue: _serviceReport?.invoiceNumber, + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord, + textInputType: TextInputType.number, + onSaved: (value) { + _serviceReport.invoiceNumber = value; + }, + ), + ], + ), ), - ], - ), - ), - const SizedBox(width: 8,), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ASubTitle(_subtitle.invoiceCode), - const SizedBox(height: 4,), - ATextFormField( - initialValue: _serviceReport?.invoiceCode, - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - validator: (value) => - Validator.hasValue(value) - ? null : _subtitle.requiredWord, - textInputType: TextInputType.text, - onSaved: (value){ - _serviceReport.invoiceCode = value; - }, + const SizedBox( + width: 8, + ), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ASubTitle(_subtitle.invoiceCode), + const SizedBox( + height: 4, + ), + ATextFormField( + initialValue: _serviceReport?.invoiceCode, + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + validator: (value) => Validator.hasValue(value) ? null : _subtitle.requiredWord, + textInputType: TextInputType.text, + onSaved: (value) { + _serviceReport.invoiceCode = value; + }, + ), + ], + ), ), ], ), - ), - ], - ), // const SizedBox(height: 8,), // Row( @@ -414,7 +468,9 @@ class _EditServiceReportState extends State with TickerProvid // ), // const SizedBox(height: 8,), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), Row( children: [ // reasons @@ -423,17 +479,21 @@ class _EditServiceReportState extends State with TickerProvid crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.reasons), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ServiceReportReasonsMenu( initialValue: _serviceReport.reason, - onSelect: (status){ + onSelect: (status) { _serviceReport.reason = status; }, ), ], ), ), - const SizedBox(width: 8,), + const SizedBox( + width: 8, + ), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -442,8 +502,8 @@ class _EditServiceReportState extends State with TickerProvid AMiniOneImagePicker( //error: _validate && _serviceReport.image == null, image: _image, - onPick: (image){ - _image =image; + onPick: (image) { + _image = image; _serviceReport.image = base64Encode(image.readAsBytesSync()); }, ), @@ -452,7 +512,9 @@ class _EditServiceReportState extends State with TickerProvid ), ], ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), // Traveling Hours & Working Hours Row( children: [ @@ -461,13 +523,15 @@ class _EditServiceReportState extends State with TickerProvid crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.workingHours), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), Row( children: [ Expanded( child: AppTimer( timer: _serviceReport.timer, - onChange: (timer) async{ + onChange: (timer) async { _serviceReport.timer = timer; return true; }, @@ -516,7 +580,9 @@ class _EditServiceReportState extends State with TickerProvid // ), ], ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), // Operating Hours and Job Sheet Number // Row( // children: [ @@ -564,29 +630,39 @@ class _EditServiceReportState extends State with TickerProvid // ], // ), //const SizedBox(height: 8,), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Nurse Signature"), ESignature( oldSignature: _serviceReport.signatureNurse, newSignature: _serviceReport.localNurseSignature, - onChange: (signature){ - if(signature == null || signature.isEmpty) {return;} + onChange: (signature) { + if (signature == null || signature.isEmpty) { + return; + } _serviceReport.localNurseSignature = signature; _serviceReport.signatureNurse = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Engineer Signature"), ESignature( oldSignature: _serviceReport.signatureEngineer, newSignature: _serviceReport.localNurseSignature, - onChange: (signature){ - if(signature == null || signature.isEmpty) {return;} + onChange: (signature) { + if (signature == null || signature.isEmpty) { + return; + } _serviceReport.localNurseSignature = signature; _serviceReport.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), // Part Number and Quantity Row( children: [ @@ -596,12 +672,17 @@ class _EditServiceReportState extends State with TickerProvid crossAxisAlignment: CrossAxisAlignment.start, children: [ ASubTitle(_subtitle.partNumber), - _validate && _serviceReport.parts == null ? - ASubTitle(_subtitle.requiredWord,color: Colors.red,): - const SizedBox.shrink(), - const SizedBox(height: 4,), + _validate && _serviceReport.parts == null + ? ASubTitle( + _subtitle.requiredWord, + color: Colors.red, + ) + : const SizedBox.shrink(), + const SizedBox( + height: 4, + ), AutoCompletePartsField( - onPick: (part){ + onPick: (part) { _serviceReport.parts.add(part); setState(() {}); }, @@ -609,34 +690,33 @@ class _EditServiceReportState extends State with TickerProvid ], ), ), - ], ), - SizedBox(height: 8*AppStyle.getScaleFactor(context),), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), Row( children: [ - Expanded(flex:3,child: Text(_subtitle.number)), - Expanded(flex: 1,child: Text(_subtitle.quantity)), + Expanded(flex: 3, child: Text(_subtitle.number)), + Expanded(flex: 1, child: Text(_subtitle.quantity)), ], ), Column( - children: List.generate( - _serviceReport.parts.length, - (index) { - Part _part = _serviceReport.parts[index]; - return PartItem( - part: _part, - onDelete: (part){ - _serviceReport.parts.remove(part); - setState(() {}); - }, - ); - } - ), + children: List.generate(_serviceReport.parts.length, (index) { + Part _part = _serviceReport.parts[index]; + return PartItem( + part: _part, + onDelete: (part) { + _serviceReport.parts.remove(part); + setState(() {}); + }, + ); + }), ), - const SizedBox(height: 16,), - + const SizedBox( + height: 16, + ), ], ), ), @@ -646,48 +726,40 @@ class _EditServiceReportState extends State with TickerProvid text: _subtitle.update, onPressed: () async { _validate = true; - if(!_formKey.currentState.validate()){ + if (!_formKey.currentState.validate()) { setState(() {}); return; } - if(!_serviceReport.validate()) { + if (!_serviceReport.validate()) { setState(() {}); return; } _formKey.currentState.save(); - _isLoading =true; + _isLoading = true; setState(() {}); - int status = await _serviceRequestsProvider.updateServiceReport( - user: _userProvider.user, - host: _settingProvider.host, - report: _serviceReport, - request: widget.request - ); - _isLoading =false; + int status = await _serviceRequestsProvider.updateServiceReport(user: _userProvider.user, host: _settingProvider.host, report: _serviceReport, request: widget.request); + _isLoading = false; setState(() {}); - if(status >= 200 && status < 300){ + if (status >= 200 && status < 300) { Fluttertoast.showToast( - msg: _subtitle.requestCompleteSuccessfully, + msg: _subtitle.requestCompleteSuccessfully, ); Navigator.of(context).pop(); Navigator.of(context).pop(); - }else{ - String errorMessage = HttpStatusManger.getStatusMessage( - status: status, subtitle: _subtitle); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - errorMessage - ), - ) - ); + } else { + String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle); + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text(errorMessage), + )); } }, ), ), - const SizedBox(height: 300,) + const SizedBox( + height: 300, + ) ], ), const ABackButton(), diff --git a/lib/views/pages/user/requests/requests_page.dart b/lib/views/pages/user/requests/requests_page.dart index 6c04d82..fb73812 100644 --- a/lib/views/pages/user/requests/requests_page.dart +++ b/lib/views/pages/user/requests/requests_page.dart @@ -12,14 +12,14 @@ import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/requests/service_request_list.dart'; import 'package:test_sa/views/widgets/search/service_request_search_bar.dart'; + class ServiceRequestsPage extends StatefulWidget { static final String id = "/service-requests"; @override _ServiceRequestsPageState createState() => _ServiceRequestsPageState(); } -class _ServiceRequestsPageState extends State - with TickerProviderStateMixin{ +class _ServiceRequestsPageState extends State with TickerProviderStateMixin { ServiceRequestsProvider _serviceRequestsProvider; UserProvider _userProvider; SettingProvider _settingProvider; @@ -31,7 +31,7 @@ class _ServiceRequestsPageState extends State _userProvider = Provider.of(context); _settingProvider = Provider.of(context); Subtitle _subtitle = AppLocalization.of(context).subtitle; - if(_firstTime){ + if (_firstTime) { _serviceRequestsProvider.reset(); _firstTime = false; } @@ -45,9 +45,9 @@ class _ServiceRequestsPageState extends State onRefresh: () async { _serviceRequestsProvider.reset(); await _serviceRequestsProvider.getRequests( - user: _userProvider.user, - host: _settingProvider.host, - hospitalId: _userProvider.user.hospital?.id, + user: _userProvider.user, + host: _settingProvider.host, + hospitalId: _userProvider.user.hospital?.id, ); }, child: Stack( @@ -55,8 +55,8 @@ class _ServiceRequestsPageState extends State Column( children: [ Container( - color:AColors.primaryColor, - padding: const EdgeInsets.symmetric(horizontal: 0,vertical: 4), + color: AColors.primaryColor, + padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), child: Column( children: [ Row( @@ -66,10 +66,7 @@ class _ServiceRequestsPageState extends State child: Center( child: Text( _subtitle.serviceRequests, - style: Theme.of(context).textTheme.headline6.copyWith( - color: AColors.white, - fontStyle: FontStyle.italic - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), ), ), ), @@ -83,22 +80,23 @@ class _ServiceRequestsPageState extends State ServiceRequestSearch _temp = await showModalBottomSheet( context: context, isScrollControlled: true, - builder: (context){ + builder: (context) { return ServiceRequestsSearchDialog( initialSearchValue: _serviceRequestsProvider.search, ); }); - if(_temp != null){ + if (_temp != null) { _serviceRequestsProvider.search = _temp; _serviceRequestsProvider.reset(); setState(() {}); } }, ), - SizedBox(width: 16,) + SizedBox( + width: 16, + ) ], ), - ], ), ), @@ -107,9 +105,9 @@ class _ServiceRequestsPageState extends State nextPage: _serviceRequestsProvider.nextPage, onLazyLoad: () async { await _serviceRequestsProvider.getRequests( - user: _userProvider.user, - host: _settingProvider.host, - hospitalId: _userProvider.user.hospital.id, + user: _userProvider.user, + host: _settingProvider.host, + hospitalId: _userProvider.user.hospital.id, ); }, requests: _serviceRequestsProvider.serviceRequests, @@ -117,7 +115,6 @@ class _ServiceRequestsPageState extends State ), ], ), - ], ), ), diff --git a/lib/views/pages/user/visits/pantry/edit_pentry.dart b/lib/views/pages/user/visits/pantry/edit_pentry.dart index a758bb9..d0df5e3 100644 --- a/lib/views/pages/user/visits/pantry/edit_pentry.dart +++ b/lib/views/pages/user/visits/pantry/edit_pentry.dart @@ -21,13 +21,13 @@ import 'package:test_sa/views/widgets/pentry/pentry_ppm_check_list_form.dart'; class EditPentry extends StatefulWidget { final Pentry pentry; final Visit visit; - const EditPentry({Key key,this.pentry, this.visit}) : super(key: key); + const EditPentry({Key key, this.pentry, this.visit}) : super(key: key); @override State createState() => _EditPentryState(); } -class _EditPentryState extends State with SingleTickerProviderStateMixin{ +class _EditPentryState extends State with SingleTickerProviderStateMixin { bool _isLoading = false; bool _validate = false; Subtitle _subtitle; @@ -41,29 +41,24 @@ class _EditPentryState extends State with SingleTickerProviderStateM _onSubmit() async { _validate = true; - if(!_pentry.validate()) { - setState(() { }); + if (!_pentry.validate()) { + setState(() {}); return; } _isLoading = true; setState(() {}); - int status = await _regularVisitsProvider.updatePentry( - user: _userProvider.user, - host: _settingProvider.host, - pentry: _pentry, - visit: widget.visit - ); - _isLoading =false; + int status = await _regularVisitsProvider.updatePentry(user: _userProvider.user, host: _settingProvider.host, pentry: _pentry, visit: widget.visit); + _isLoading = false; setState(() {}); - if(status >= 200 && status < 300){ + if (status >= 200 && status < 300) { Fluttertoast.showToast( msg: _subtitle.requestCompleteSuccessfully, ); Navigator.of(context).pop(); Navigator.of(context).pop(); - }else{ + } else { // String errorMessage = HttpStatusManger.getStatusMessage( // status: status, subtitle: _subtitle); // Fluttertoast.showToast( @@ -75,9 +70,9 @@ class _EditPentryState extends State with SingleTickerProviderStateM @override void initState() { _pentry = widget.pentry.copyWith(); - if(_pentry.pmKits.isEmpty) _pentry.pmKits.add(PMKit()); - if(_pentry.calibrationTools.isEmpty) _pentry.calibrationTools.add(CalibrationTool()); - if(_pentry.ppmCheckLists.isEmpty) _pentry.ppmCheckLists.add(PPMCheckList()); + if (_pentry.pmKits.isEmpty) _pentry.pmKits.add(PMKit()); + if (_pentry.calibrationTools.isEmpty) _pentry.calibrationTools.add(CalibrationTool()); + if (_pentry.ppmCheckLists.isEmpty) _pentry.ppmCheckLists.add(PPMCheckList()); _tabController = TabController(length: 4, vsync: this); super.initState(); } @@ -98,96 +93,105 @@ class _EditPentryState extends State with SingleTickerProviderStateM key: _scaffoldKey, body: SafeArea( child: LoadingManager( - isLoading: _isLoading, - isFailedLoading: false, - stateCode: 200, - onRefresh: () async {}, - child: Column( - children: [ - Material( - color: Theme.of(context).colorScheme.primary, - child: Padding( - padding: const EdgeInsets.all(2.0), - child: TabBar( - controller: _tabController, - isScrollable: true, - onTap: (index){ - setState(() {}); - }, - tabs: const [ - Tab(text: "PPM Check List",), - Tab(text: "Calibration Tools",), - Tab(text: "PK Kits",), - Tab(text: "Pentry",), - ]), - ), - ), - Expanded( - child: Stack( - children: [ - TabBarView( - physics: const NeverScrollableScrollPhysics(), - controller: _tabController, - children: [ - PentryPPMCheckListForm( - models: _pentry.ppmCheckLists, - enableValidate: _validate, - ), - PentryCalibrationToolForm( - models: _pentry.calibrationTools, - enableValidate: _validate, - ), - PentryPMKitForm( - models: _pentry.pmKits, - enableValidate: _validate, - ), - PentryInfoForm( - model: _pentry, - enableValidate: _validate, - ) + isLoading: _isLoading, + isFailedLoading: false, + stateCode: 200, + onRefresh: () async {}, + child: Column( + children: [ + Material( + color: Theme.of(context).colorScheme.primary, + child: Padding( + padding: const EdgeInsets.all(2.0), + child: TabBar( + controller: _tabController, + isScrollable: true, + onTap: (index) { + setState(() {}); + }, + tabs: const [ + Tab( + text: "PPM Check List", + ), + Tab( + text: "Calibration Tools", + ), + Tab( + text: "PK Kits", + ), + Tab( + text: "Pentry", + ), + ]), + ), + ), + Expanded( + child: Stack( + children: [ + TabBarView( + physics: const NeverScrollableScrollPhysics(), + controller: _tabController, + children: [ + PentryPPMCheckListForm( + models: _pentry.ppmCheckLists, + enableValidate: _validate, + ), + PentryCalibrationToolForm( + models: _pentry.calibrationTools, + enableValidate: _validate, + ), + PentryPMKitForm( + models: _pentry.pmKits, + enableValidate: _validate, + ), + PentryInfoForm( + model: _pentry, + enableValidate: _validate, + ) + ], + ), + Align( + alignment: Alignment.bottomCenter, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Row( + children: [ + if (_tabController.index != 0) + ASmallButton( + text: _subtitle.back, + onPressed: () { + _tabController.animateTo( + _tabController.index - 1, + ); + setState(() {}); + }, + ), + const Spacer(), + if (_tabController.index != _tabController.length - 1) + ASmallButton( + text: _subtitle.next, + onPressed: () { + _tabController.animateTo( + _tabController.index + 1, + ); + setState(() {}); + }, + ), + if (_tabController.index == _tabController.length - 1) + ASmallButton( + text: _subtitle.update, + onPressed: _onSubmit, + ), + ], + ), + ), + ) ], - ), - Align( - alignment: Alignment.bottomCenter, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Row( - children: [ - if(_tabController.index != 0) - ASmallButton( - text: _subtitle.back, - onPressed: (){ - _tabController.animateTo(_tabController.index - 1,); - setState(() {}); - }, - ), - const Spacer(), - if(_tabController.index != _tabController.length -1) - ASmallButton( - text: _subtitle.next, - onPressed: (){ - _tabController.animateTo(_tabController.index + 1,); - setState(() {}); - }, - ), - if(_tabController.index == _tabController.length -1) - ASmallButton( - text: _subtitle.update, - onPressed: _onSubmit, - ), - ], - ), - ), - ) - ], - ), - ), - - ], - ) - ), + ), + ), + ], + )), ), ); } } - diff --git a/lib/views/pages/user/visits/pantry/future_edit_pently.dart b/lib/views/pages/user/visits/pantry/future_edit_pently.dart index 161df3c..1f050f5 100644 --- a/lib/views/pages/user/visits/pantry/future_edit_pently.dart +++ b/lib/views/pages/user/visits/pantry/future_edit_pently.dart @@ -10,8 +10,8 @@ import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/views/pages/user/visits/pantry/edit_pentry.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/failed_loading.dart'; -class FutureEditPentry extends StatefulWidget { +class FutureEditPentry extends StatefulWidget { final Visit visit; const FutureEditPentry({Key key, this.visit}) : super(key: key); @@ -21,7 +21,6 @@ class FutureEditPentry extends StatefulWidget { } class _FutureEditPentryState extends State { - UserProvider _userProvider; SettingProvider _settingProvider; @override @@ -32,20 +31,17 @@ class _FutureEditPentryState extends State { Subtitle subtitle = AppLocalization.of(context).subtitle; return Scaffold( body: FutureBuilder( - future: RegularVisitsProvider().getPently( - user: _userProvider.user, - host: _settingProvider.host, - id: widget.visit.id - ), - builder: (BuildContext context, AsyncSnapshot snapshot){ - if(snapshot.hasError) { - + future: RegularVisitsProvider().getPently(user: _userProvider.user, host: _settingProvider.host, id: widget.visit.id), + builder: (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.hasError) { return FailedLoading( message: subtitle.failedToCompleteRequest, - onReload: (){setState(() {});}, + onReload: () { + setState(() {}); + }, ); } - if(snapshot.hasData){ + if (snapshot.hasData) { return EditPentry( pentry: snapshot.data, visit: widget.visit, diff --git a/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart b/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart index d61c984..9dccd44 100644 --- a/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart +++ b/lib/views/pages/user/visits/preventive_maintenance_visits_page.dart @@ -18,14 +18,14 @@ import 'package:test_sa/views/widgets/buttons/app_icon_button.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/search/visits_search_bar.dart'; import 'package:test_sa/views/widgets/visits/visits_list.dart'; + class PreventiveMaintenanceVisitsPage extends StatefulWidget { static final String id = "/preventive-maintenance-visits"; @override _PreventiveMaintenanceVisitsPageState createState() => _PreventiveMaintenanceVisitsPageState(); } -class _PreventiveMaintenanceVisitsPageState extends State - with TickerProviderStateMixin{ +class _PreventiveMaintenanceVisitsPageState extends State with TickerProviderStateMixin { PreventiveMaintenanceVisitsProvider _visitsProvider; UserProvider _userProvider; SettingProvider _settingProvider; @@ -57,8 +57,8 @@ class _PreventiveMaintenanceVisitsPageState extends State( context: context, barrierDismissible: false, @@ -151,24 +152,17 @@ class _PreventiveMaintenanceVisitsPageState extends State= 200 && status < 300){ + if (status >= 200 && status < 300) { Fluttertoast.showToast( msg: _subtitle.preventiveMaintenanceUpdatedSuccessfully, toastLength: Toast.LENGTH_LONG, gravity: ToastGravity.BOTTOM, ); - }else{ + } else { Fluttertoast.showToast( - msg: HttpStatusManger.getStatusMessage( - status: status, - subtitle: _subtitle - ), + msg: HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle), toastLength: Toast.LENGTH_LONG, gravity: ToastGravity.BOTTOM, ); @@ -180,7 +174,6 @@ class _PreventiveMaintenanceVisitsPageState extends State _RegularVisitsPageState(); } -class _RegularVisitsPageState extends State - with TickerProviderStateMixin{ +class _RegularVisitsPageState extends State with TickerProviderStateMixin { RegularVisitsProvider _visitsProvider; UserProvider _userProvider; SettingProvider _settingProvider; @@ -47,8 +47,8 @@ class _RegularVisitsPageState extends State _visitsProvider.reset(); //_visitsProvider.visitsSearch = VisitsSearch(); await _visitsProvider.getVisits( - user: _userProvider.user, - host: _settingProvider.host, + user: _userProvider.user, + host: _settingProvider.host, ); }, child: Stack( @@ -56,8 +56,8 @@ class _RegularVisitsPageState extends State Column( children: [ Container( - color:AColors.primaryColor, - padding: const EdgeInsets.symmetric(horizontal: 0,vertical: 4), + color: AColors.primaryColor, + padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), child: Column( children: [ Row( @@ -67,10 +67,7 @@ class _RegularVisitsPageState extends State child: Center( child: Text( _subtitle.preventiveMaintenance, - style: Theme.of(context).textTheme.headline6.copyWith( - color: AColors.white, - fontStyle: FontStyle.italic - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), ), ), ), @@ -78,7 +75,7 @@ class _RegularVisitsPageState extends State duration: Duration(milliseconds: 400), child: AIconButton( key: ValueKey(_expandedSearch), - iconData: _expandedSearch ? Icons.keyboard_arrow_up :Icons.search, + iconData: _expandedSearch ? Icons.keyboard_arrow_up : Icons.search, color: AColors.secondaryColor, buttonSize: 42, backgroundColor: AColors.white, @@ -86,23 +83,24 @@ class _RegularVisitsPageState extends State VisitsSearch _temp = await showModalBottomSheet( context: context, isScrollControlled: true, - builder: (context){ + builder: (context) { return VisitsSearchDialog( initialSearchValue: _visitsProvider.visitsSearch, ); }); - if(_temp != null){ - _visitsProvider.visitsSearch.fromSearch(_temp) ; + if (_temp != null) { + _visitsProvider.visitsSearch.fromSearch(_temp); _visitsProvider.reset(); setState(() {}); } }, ), ), - SizedBox(width: 16,) + SizedBox( + width: 16, + ) ], ), - ], ), ), @@ -112,7 +110,7 @@ class _RegularVisitsPageState extends State padding: const EdgeInsets.all(8.0), child: AButton( text: _subtitle.clearSearch, - onPressed: (){ + onPressed: () { _visitsProvider.visitsSearch = VisitsSearch(); _visitsProvider.reset(); setState(() {}); @@ -125,8 +123,8 @@ class _RegularVisitsPageState extends State nextPage: _visitsProvider.nextPage, onLazyLoad: () async { await _visitsProvider.getVisits( - user: _userProvider.user, - host: _settingProvider.host, + user: _userProvider.user, + host: _settingProvider.host, ); }, onEditGroup: (visits) async { @@ -134,10 +132,13 @@ class _RegularVisitsPageState extends State isScrollControlled: true, context: context, builder: (context) { - return UpdateVisitsGroupSheet(visits: visits,title: _subtitle.updateRegularVisits,); + return UpdateVisitsGroupSheet( + visits: visits, + title: _subtitle.updateRegularVisits, + ); }, - )as VisitsGroup; - if(_group != null){ + ) as VisitsGroup; + if (_group != null) { showDialog( context: context, barrierDismissible: false, @@ -148,24 +149,17 @@ class _RegularVisitsPageState extends State ); }, ); - int status = await _visitsProvider.updateGroupOfVisits( - user: _userProvider.user, - host: _settingProvider.host, - group: _group - ); + int status = await _visitsProvider.updateGroupOfVisits(user: _userProvider.user, host: _settingProvider.host, group: _group); Navigator.of(context).pop(); - if(status >= 200 && status < 300){ + if (status >= 200 && status < 300) { Fluttertoast.showToast( - msg: _subtitle.preventiveMaintenanceUpdatedSuccessfully, - toastLength: Toast.LENGTH_LONG, - gravity: ToastGravity.BOTTOM, + msg: _subtitle.preventiveMaintenanceUpdatedSuccessfully, + toastLength: Toast.LENGTH_LONG, + gravity: ToastGravity.BOTTOM, ); - }else{ + } else { Fluttertoast.showToast( - msg: HttpStatusManger.getStatusMessage( - status: status, - subtitle: _subtitle - ), + msg: HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle), toastLength: Toast.LENGTH_LONG, gravity: ToastGravity.BOTTOM, ); @@ -177,7 +171,6 @@ class _RegularVisitsPageState extends State ), ], ), - ], ), ), diff --git a/lib/views/pages/user/visits/update_visits_group_sheet.dart b/lib/views/pages/user/visits/update_visits_group_sheet.dart index 8b0368e..7068b2a 100644 --- a/lib/views/pages/user/visits/update_visits_group_sheet.dart +++ b/lib/views/pages/user/visits/update_visits_group_sheet.dart @@ -14,6 +14,7 @@ import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/status/employee/engineers_mune.dart'; import 'package:test_sa/views/widgets/visits/visit_status.dart'; + class UpdateVisitsGroupSheet extends StatefulWidget { final List visits; final String title; @@ -70,20 +71,24 @@ class _UpdateVisitsGroupSheetState extends State { ), ASmallButton( text: _subtitle.cancel, - onPressed: (){ + onPressed: () { Navigator.of(context).pop(); }, ), ], ), - SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), EngineersMenu( initialValue: _group.engineer, - onSelect: (engineer){ + onSelect: (engineer) { _group.engineer = engineer; }, ), - SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), // AOneImagePicker( // image: _image, // onPick: (image){ @@ -91,146 +96,138 @@ class _UpdateVisitsGroupSheetState extends State { // _group.image = base64Encode(image.readAsBytesSync()); // }, // ), - // SizedBox(height: 12 * AppStyle.getScaleFactor(context),), - // ATextFormField( - // initialValue: _group.jobSheetNumber, - // hintText: _subtitle.jobSheetNumber, - // style: Theme.of(context).textTheme.headline6, - // onSaved: (value){ - // _group.jobSheetNumber = value; - // }, - // ), - // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), - // ATextFormField( - // initialValue: _group.workingHours, - // hintText: _subtitle.workingHours, - // style: Theme.of(context).textTheme.headline6, - // onSaved: (value){ - // _group.workingHours = value; - // }, - // ), - // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), - // ATextFormField( - // initialValue: _group.travelingHours, - // hintText: _subtitle.travelingHours, - // style: Theme.of(context).textTheme.headline6, - // onSaved: (value){ - // _group.travelingHours = value; - // }, - // ), - // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), - // Row( - // children: [ - // Expanded( - // child: Text( - // "${_subtitle.date} :", - // style: Theme.of(context).textTheme.subtitle1, - // textScaleFactor: AppStyle.getScaleFactor(context), - // ), - // ), - // ADatePicker( - // date: _group.date ?? DateTime.now(), - // onDatePicker: (date){ - // _group.date = date; - // setState(() {}); - // }, - // ), - // ], - // ), - // // SizedBox(height: 8 * AStyling.getScaleFactor(context),), - // Text( - // "${_subtitle.status} :", - // style: Theme.of(context).textTheme.subtitle1, - // textScaleFactor: AppStyle.getScaleFactor(context), - // ), - // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), - // Center( - // child: Wrap( - // spacing: 10, - // runSpacing: 10, - // children: List.generate( - // status.length, - // (index) { - // bool isSelected = _group.status == status[index]; - // return FilterItem( - // isSelected: isSelected, - // onSelected: (){ - // if(isSelected) - // _group.status = null; - // else - // _group.status = status[index]; - // - // setState(() {}); - // }, - // status: status[index], - // ); - // } - // - // ), - // ), - // ), - // Text( - // "${_subtitle.taskStatus} :", - // style: Theme.of(context).textTheme.subtitle1, - // textScaleFactor: AppStyle.getScaleFactor(context), - // ), - // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), - // Center( - // child: Wrap( - // spacing: 10, - // runSpacing: 10, - // children: List.generate( - // taskStatus.length, - // (index) { - // bool isSelected = _group.taskStatus == taskStatus[index]; - // return FilterItem( - // isSelected: isSelected, - // onSelected: (){ - // if(isSelected) - // _group.taskStatus = null; - // else - // _group.taskStatus = taskStatus[index]; - // - // setState(() {}); - // }, - // status: taskStatus[index], - // ); - // } - // - // ), - // ), - // ), - SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + // SizedBox(height: 12 * AppStyle.getScaleFactor(context),), + // ATextFormField( + // initialValue: _group.jobSheetNumber, + // hintText: _subtitle.jobSheetNumber, + // style: Theme.of(context).textTheme.headline6, + // onSaved: (value){ + // _group.jobSheetNumber = value; + // }, + // ), + // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + // ATextFormField( + // initialValue: _group.workingHours, + // hintText: _subtitle.workingHours, + // style: Theme.of(context).textTheme.headline6, + // onSaved: (value){ + // _group.workingHours = value; + // }, + // ), + // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + // ATextFormField( + // initialValue: _group.travelingHours, + // hintText: _subtitle.travelingHours, + // style: Theme.of(context).textTheme.headline6, + // onSaved: (value){ + // _group.travelingHours = value; + // }, + // ), + // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + // Row( + // children: [ + // Expanded( + // child: Text( + // "${_subtitle.date} :", + // style: Theme.of(context).textTheme.subtitle1, + // textScaleFactor: AppStyle.getScaleFactor(context), + // ), + // ), + // ADatePicker( + // date: _group.date ?? DateTime.now(), + // onDatePicker: (date){ + // _group.date = date; + // setState(() {}); + // }, + // ), + // ], + // ), + // // SizedBox(height: 8 * AStyling.getScaleFactor(context),), + // Text( + // "${_subtitle.status} :", + // style: Theme.of(context).textTheme.subtitle1, + // textScaleFactor: AppStyle.getScaleFactor(context), + // ), + // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + // Center( + // child: Wrap( + // spacing: 10, + // runSpacing: 10, + // children: List.generate( + // status.length, + // (index) { + // bool isSelected = _group.status == status[index]; + // return FilterItem( + // isSelected: isSelected, + // onSelected: (){ + // if(isSelected) + // _group.status = null; + // else + // _group.status = status[index]; + // + // setState(() {}); + // }, + // status: status[index], + // ); + // } + // + // ), + // ), + // ), + // Text( + // "${_subtitle.taskStatus} :", + // style: Theme.of(context).textTheme.subtitle1, + // textScaleFactor: AppStyle.getScaleFactor(context), + // ), + // SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + // Center( + // child: Wrap( + // spacing: 10, + // runSpacing: 10, + // children: List.generate( + // taskStatus.length, + // (index) { + // bool isSelected = _group.taskStatus == taskStatus[index]; + // return FilterItem( + // isSelected: isSelected, + // onSelected: (){ + // if(isSelected) + // _group.taskStatus = null; + // else + // _group.taskStatus = taskStatus[index]; + // + // setState(() {}); + // }, + // status: taskStatus[index], + // ); + // } + // + // ), + // ), + // ), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), Expanded( child: ListView.builder( itemCount: widget.visits.length, - itemBuilder: (context,index){ + itemBuilder: (context, index) { Visit visit = widget.visits[index]; return Container( - padding: EdgeInsets.symmetric(vertical: 8,horizontal: 8), + padding: EdgeInsets.symmetric(vertical: 8, horizontal: 8), margin: EdgeInsets.symmetric(vertical: 4), - decoration: BoxDecoration( - color: AColors.primaryColor, - borderRadius: BorderRadius.circular( - AppStyle.getBorderRadius(context) - ), - boxShadow: [ - AppStyle.boxShadow - ] - ), + decoration: BoxDecoration(color: AColors.primaryColor, borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), boxShadow: [AppStyle.boxShadow]), child: Row( children: [ Expanded( child: Text( - "${_subtitle.sn}: "+visit.deviceSerialNumber ?? _subtitle.noSerialNumberFound, - style: Theme.of(context).textTheme.headline6.copyWith( - color: AColors.white, - fontSize: 16, - fontWeight: FontWeight.bold - ), + "${_subtitle.sn}: " + visit.deviceSerialNumber ?? _subtitle.noSerialNumberFound, + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontSize: 16, fontWeight: FontWeight.bold), ), ), - VisitStatusLabel(visit: visit,) + VisitStatusLabel( + visit: visit, + ) ], ), ); @@ -239,13 +236,12 @@ class _UpdateVisitsGroupSheetState extends State { ), AButton( text: _subtitle.update, - onPressed: (){ - Navigator.of(context).pop(_group); + onPressed: () { + Navigator.of(context).pop(_group); }, ), ], ), - ], ), ); diff --git a/lib/views/pages/user/visits/visit_details.dart b/lib/views/pages/user/visits/visit_details.dart index c2e7037..145dd68 100644 --- a/lib/views/pages/user/visits/visit_details.dart +++ b/lib/views/pages/user/visits/visit_details.dart @@ -29,8 +29,8 @@ class VisitDetailsPage extends StatelessWidget { child: Column( children: [ Container( - color:AColors.primaryColor, - padding: const EdgeInsets.symmetric(horizontal: 0,vertical: 4), + color: AColors.primaryColor, + padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), child: Row( children: [ ABackButton(), @@ -38,10 +38,7 @@ class VisitDetailsPage extends StatelessWidget { child: Center( child: Text( _subtitle.visitInformation, - style: Theme.of(context).textTheme.headline6.copyWith( - color: AColors.white, - fontStyle: FontStyle.italic - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), ), ), ), @@ -51,9 +48,11 @@ class VisitDetailsPage extends StatelessWidget { buttonSize: 42, backgroundColor: AColors.green, onPressed: () async { - Navigator.of(context).push( - MaterialPageRoute(builder: (_)=> EditPentry(visit: visit,pentry: visit.pentry,)) - ); + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => EditPentry( + visit: visit, + pentry: visit.pentry, + ))); }, ), SizedBox(width: 42) @@ -64,13 +63,14 @@ class VisitDetailsPage extends StatelessWidget { child: ListView( padding: EdgeInsets.symmetric(horizontal: 16), children: [ - SizedBox(height: 8,), + SizedBox( + height: 8, + ), MaterialButton( padding: EdgeInsets.zero, - onPressed: (){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => Scaffold( + onPressed: () { + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => Scaffold( body: InteractiveViewer( child: Center( child: ImageLoader( @@ -79,27 +79,29 @@ class VisitDetailsPage extends StatelessWidget { ), ), ), - ) - ) - ); + ))); }, child: SizedBox( height: 140 * AppStyle.getScaleFactor(context), width: MediaQuery.of(context).size.width, child: ImageLoader( - url: visit.images.isEmpty ? " ":visit.images.first, + url: visit.images.isEmpty ? " " : visit.images.first, boxFit: BoxFit.cover, ), ), ), - SizedBox(height: 8,), SizedBox( - height: 60* AppStyle.getScaleFactor(context), + height: 8, + ), + SizedBox( + height: 60 * AppStyle.getScaleFactor(context), child: ImagesList( images: visit.images, ), ), - SizedBox(height: 8,), + SizedBox( + height: 8, + ), RequestInfoRow( title: _subtitle.code, info: visit.serialNumber, @@ -112,7 +114,6 @@ class VisitDetailsPage extends StatelessWidget { title: _subtitle.deviceSN, info: visit.deviceSerialNumber, ), - RequestInfoRow( title: _subtitle.expectDate, info: visit.expectDate, @@ -126,17 +127,18 @@ class VisitDetailsPage extends StatelessWidget { Expanded( child: Text( "${_subtitle.status} : ", - style: Theme.of(context).textTheme.subtitle1.copyWith( - fontWeight: FontWeight.bold - ), + style: Theme.of(context).textTheme.subtitle1.copyWith(fontWeight: FontWeight.bold), textScaleFactor: AppStyle.getScaleFactor(context), ), ), - VisitStatusLabel(visit: visit,), + VisitStatusLabel( + visit: visit, + ), ], ), - - Divider(color: Theme.of(context).primaryColor,), + Divider( + color: Theme.of(context).primaryColor, + ), RequestInfoRow( title: _subtitle.contactStatus, info: visit.assignTo, diff --git a/lib/views/widgets/app_name_bar.dart b/lib/views/widgets/app_name_bar.dart index 8aebd90..9979dac 100644 --- a/lib/views/widgets/app_name_bar.dart +++ b/lib/views/widgets/app_name_bar.dart @@ -1,20 +1,18 @@ import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class AppNameBar extends StatelessWidget { @override Widget build(BuildContext context) { return Container( height: 50 * AppStyle.getScaleFactor(context), - color:AColors.primaryColor, + color: AColors.primaryColor, padding: const EdgeInsets.all(8.0), child: Center( child: Text( "Test SA", - style: Theme.of(context).textTheme.headline6.copyWith( - color: AColors.white, - fontStyle: FontStyle.italic - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontStyle: FontStyle.italic), ), ), ); diff --git a/lib/views/widgets/buttons/app_back_button.dart b/lib/views/widgets/buttons/app_back_button.dart index a7ce9c2..ef26325 100644 --- a/lib/views/widgets/buttons/app_back_button.dart +++ b/lib/views/widgets/buttons/app_back_button.dart @@ -7,7 +7,7 @@ class ABackButton extends StatelessWidget { final VoidCallback onPressed; final IconData icon; - const ABackButton({Key key, this.onPressed,this.icon}) : super(key: key); + const ABackButton({Key key, this.onPressed, this.icon}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/views/widgets/buttons/app_button.dart b/lib/views/widgets/buttons/app_button.dart index 6c0459d..c3fd168 100644 --- a/lib/views/widgets/buttons/app_button.dart +++ b/lib/views/widgets/buttons/app_button.dart @@ -27,7 +27,7 @@ class AButton extends StatelessWidget { onPressed: onPressed, child: Text( text ?? "", - style: textStyle ?? Theme.of(context).textTheme.subtitle2.copyWith(color: AColors.white, fontSize: 14,fontWeight: FontWeight.w600), + style: textStyle ?? Theme.of(context).textTheme.subtitle2.copyWith(color: AColors.white, fontSize: 14, fontWeight: FontWeight.w600), textScaleFactor: AppStyle.getScaleFactor(context), ), ), diff --git a/lib/views/widgets/buttons/app_flat_button.dart b/lib/views/widgets/buttons/app_flat_button.dart index f8df57b..b154ac4 100644 --- a/lib/views/widgets/buttons/app_flat_button.dart +++ b/lib/views/widgets/buttons/app_flat_button.dart @@ -8,19 +8,19 @@ class AFlatButton extends StatelessWidget { final EdgeInsets padding; final VoidCallback onPressed; - const AFlatButton({Key key, this.text, this.textColor,this.style ,this.onPressed,this.padding}) : super(key: key); + const AFlatButton({Key key, this.text, this.textColor, this.style, this.onPressed, this.padding}) : super(key: key); @override Widget build(BuildContext context) { return TextButton( - style: TextButton.styleFrom( - foregroundColor: this.textColor ?? Colors.black, padding: padding, - ), - onPressed: onPressed, - child: Text( - text??"", - style: style ?? Theme.of(context).textTheme.bodyText1, - textScaleFactor: AppStyle.getScaleFactor(context), - ) - ); + style: TextButton.styleFrom( + foregroundColor: this.textColor ?? Colors.black, + padding: padding, + ), + onPressed: onPressed, + child: Text( + text ?? "", + style: style ?? Theme.of(context).textTheme.bodyText1, + textScaleFactor: AppStyle.getScaleFactor(context), + )); } } diff --git a/lib/views/widgets/buttons/app_icon_button.dart b/lib/views/widgets/buttons/app_icon_button.dart index 07e9c9a..139d70c 100644 --- a/lib/views/widgets/buttons/app_icon_button.dart +++ b/lib/views/widgets/buttons/app_icon_button.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -class AIconButton extends StatelessWidget { +class AIconButton extends StatelessWidget { final IconData iconData; final Color color; final Color backgroundColor; @@ -11,16 +11,7 @@ class AIconButton extends StatelessWidget { final double iconSize; final double buttonSize; - - const AIconButton({ - Key key, - this.iconData, - this.onPressed, - this.color, - this.iconSize, - this.buttonSize = 54, - this.backgroundColor - }) : super(key: key); + const AIconButton({Key key, this.iconData, this.onPressed, this.color, this.iconSize, this.buttonSize = 54, this.backgroundColor}) : super(key: key); @override Widget build(BuildContext context) { @@ -30,12 +21,8 @@ class AIconButton extends StatelessWidget { child: ElevatedButton( style: ElevatedButton.styleFrom( padding: EdgeInsets.zero, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - (AppStyle.borderRadius - 4) * AppStyle.getScaleFactor(context) - ) - ), - backgroundColor: backgroundColor ?? AColors.onPrimaryColor, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular((AppStyle.borderRadius - 4) * AppStyle.getScaleFactor(context))), + backgroundColor: backgroundColor ?? AColors.onPrimaryColor, ), onPressed: onPressed, child: FaIcon( diff --git a/lib/views/widgets/buttons/app_icon_button2.dart b/lib/views/widgets/buttons/app_icon_button2.dart index bce6319..1726a37 100644 --- a/lib/views/widgets/buttons/app_icon_button2.dart +++ b/lib/views/widgets/buttons/app_icon_button2.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:test_sa/views/app_style/sizing.dart'; -class AIconButton2 extends StatelessWidget { +class AIconButton2 extends StatelessWidget { final IconData iconData; final Color color; final VoidCallback onPressed; diff --git a/lib/views/widgets/buttons/app_outlined_button.dart b/lib/views/widgets/buttons/app_outlined_button.dart index ddfb304..b7e18bd 100644 --- a/lib/views/widgets/buttons/app_outlined_button.dart +++ b/lib/views/widgets/buttons/app_outlined_button.dart @@ -16,11 +16,7 @@ class AOutLinedButton extends StatelessWidget { return OutlinedButton( style: ElevatedButton.styleFrom( padding: padding ?? EdgeInsets.symmetric(vertical: 12), - textStyle: textStyle ?? Theme - .of(context) - .textTheme - .subtitle2 - .copyWith(fontSize: 18), + textStyle: textStyle ?? Theme.of(context).textTheme.subtitle2.copyWith(fontSize: 18), shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context))), ), onPressed: onPressed, @@ -29,11 +25,7 @@ class AOutLinedButton extends StatelessWidget { Expanded( child: Text( text ?? "", - style: Theme - .of(context) - .textTheme - .subtitle2 - .copyWith(color: AColors.primaryColor, fontSize: 14, fontWeight: FontWeight.w600), + style: Theme.of(context).textTheme.subtitle2.copyWith(color: AColors.primaryColor, fontSize: 14, fontWeight: FontWeight.w600), textAlign: TextAlign.center, textScaleFactor: AppStyle.getScaleFactor(context), ), diff --git a/lib/views/widgets/buttons/app_small_button.dart b/lib/views/widgets/buttons/app_small_button.dart index 10c103f..44073d6 100644 --- a/lib/views/widgets/buttons/app_small_button.dart +++ b/lib/views/widgets/buttons/app_small_button.dart @@ -8,26 +8,20 @@ class ASmallButton extends StatelessWidget { final EdgeInsets padding; final VoidCallback onPressed; - const ASmallButton({Key key, this.text, this.style ,this.onPressed,this.padding, this.color}) : super(key: key); + const ASmallButton({Key key, this.text, this.style, this.onPressed, this.padding, this.color}) : super(key: key); @override Widget build(BuildContext context) { return ElevatedButton( - style: ElevatedButton.styleFrom( - padding: padding, - primary: color ?? Theme.of(context).primaryColor, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8) + style: ElevatedButton.styleFrom( + padding: padding, + primary: color ?? Theme.of(context).primaryColor, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)), ), - ), - child: Text( - text??"", - style: style ?? Theme.of(context).textTheme.bodyText1.copyWith( - color: color == Colors.white - ? Theme.of(context).primaryColor : Colors.white + child: Text( + text ?? "", + style: style ?? Theme.of(context).textTheme.bodyText1.copyWith(color: color == Colors.white ? Theme.of(context).primaryColor : Colors.white), + textScaleFactor: AppStyle.getScaleFactor(context), ), - textScaleFactor: AppStyle.getScaleFactor(context), - ), - onPressed: onPressed - ); + onPressed: onPressed); } } diff --git a/lib/views/widgets/custom_clip_path/carve_in_image.dart b/lib/views/widgets/custom_clip_path/carve_in_image.dart index a9f72b0..9b4783c 100644 --- a/lib/views/widgets/custom_clip_path/carve_in_image.dart +++ b/lib/views/widgets/custom_clip_path/carve_in_image.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; class CarveInImage extends CustomClipper { final double gab; - var radius=10.0; + var radius = 10.0; CarveInImage(this.gab); @@ -10,14 +10,14 @@ class CarveInImage extends CustomClipper { Path getClip(Size size) { Path path = Path(); path.lineTo(0, size.height); - path.lineTo(size.width/2 - gab / 2, size.height); - path.arcToPoint(Offset(size.width/2 + gab / 2, size.height), - radius: Radius.circular(gab/2)); + path.lineTo(size.width / 2 - gab / 2, size.height); + path.arcToPoint(Offset(size.width / 2 + gab / 2, size.height), radius: Radius.circular(gab / 2)); path.lineTo(size.width, size.height); path.lineTo(size.width, 0); path.lineTo(0, 0); return path; } + @override bool shouldReclip(CustomClipper oldClipper) => true; -} \ No newline at end of file +} diff --git a/lib/views/widgets/date_and_time/date_picker.dart b/lib/views/widgets/date_and_time/date_picker.dart index a313634..54c4ef8 100644 --- a/lib/views/widgets/date_and_time/date_picker.dart +++ b/lib/views/widgets/date_and_time/date_picker.dart @@ -16,23 +16,15 @@ class ADatePicker extends StatelessWidget { foregroundColor: Colors.white, textStyle: Theme.of(context).textTheme.subtitle2, shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - 12 * AppStyle.getScaleFactor(context) - ), + borderRadius: BorderRadius.circular(12 * AppStyle.getScaleFactor(context)), ), ), child: Text( - date == null ? "Pick Date" : - date.toString().split(" ").first, + date == null ? "Pick Date" : date.toString().split(" ").first, textScaleFactor: AppStyle.getScaleFactor(context), ), onPressed: () async { - DateTime picked = await showDatePicker( - context: context, - initialDate: DateTime.now(), - firstDate: from ?? DateTime.now(), - lastDate: to ?? DateTime.now().add(Duration(days: 365)) - ); + DateTime picked = await showDatePicker(context: context, initialDate: DateTime.now(), firstDate: from ?? DateTime.now(), lastDate: to ?? DateTime.now().add(Duration(days: 365))); onDatePicker(picked); }, ); diff --git a/lib/views/widgets/date_and_time/from_to_date_bar.dart b/lib/views/widgets/date_and_time/from_to_date_bar.dart index 4ef79e8..1288c74 100644 --- a/lib/views/widgets/date_and_time/from_to_date_bar.dart +++ b/lib/views/widgets/date_and_time/from_to_date_bar.dart @@ -4,6 +4,7 @@ import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'date_picker.dart'; + class FromToDateBar extends StatefulWidget { final DateTime from; final DateTime to; @@ -32,22 +33,18 @@ class _FromToDateBarState extends State { return Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ - Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( _subtitle.from, - style: Theme.of(context).textTheme.bodyText1.copyWith( - fontSize: 12, - fontWeight: FontWeight.normal - ), + style: Theme.of(context).textTheme.bodyText1.copyWith(fontSize: 12, fontWeight: FontWeight.normal), textScaleFactor: AppStyle.getScaleFactor(context), ), ADatePicker( date: _from, from: DateTime(1950), - onDatePicker: (date){ + onDatePicker: (date) { _from = date; setState(() {}); widget.onPickFrom(date); @@ -60,16 +57,13 @@ class _FromToDateBarState extends State { children: [ Text( _subtitle.to, - style: Theme.of(context).textTheme.bodyText1.copyWith( - fontSize: 12, - fontWeight: FontWeight.normal - ), + style: Theme.of(context).textTheme.bodyText1.copyWith(fontSize: 12, fontWeight: FontWeight.normal), textScaleFactor: AppStyle.getScaleFactor(context), ), ADatePicker( date: _to, from: DateTime(1950), - onDatePicker: (date){ + onDatePicker: (date) { _to = date; setState(() {}); widget.onPickTo(date); diff --git a/lib/views/widgets/departments/department_button.dart b/lib/views/widgets/departments/department_button.dart index cf85987..47bc81c 100644 --- a/lib/views/widgets/departments/department_button.dart +++ b/lib/views/widgets/departments/department_button.dart @@ -6,6 +6,7 @@ import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/departments/single_department_picker.dart'; + class DepartmentButton extends StatelessWidget { final Function(Department) onDepartmentPick; final Department department; diff --git a/lib/views/widgets/departments/department_item.dart b/lib/views/widgets/departments/department_item.dart index 4ac240e..4474af6 100644 --- a/lib/views/widgets/departments/department_item.dart +++ b/lib/views/widgets/departments/department_item.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:test_sa/models/department.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class DepartmentItem extends StatelessWidget { final Department department; final Function(Department) onPressed; @@ -10,28 +11,23 @@ class DepartmentItem extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: EdgeInsets.symmetric(horizontal: 16,vertical: 6), + padding: EdgeInsets.symmetric(horizontal: 16, vertical: 6), child: ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: AColors.primaryColor, shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - AppStyle.getBorderRadius(context) - ), + borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), ), ), - onPressed: (){ + onPressed: () { onPressed(department); }, child: ListTile( title: Text( - department.name ?? "", - style: Theme.of(context).textTheme.subtitle1.copyWith( - color: AColors.white - ), + department.name ?? "", + style: Theme.of(context).textTheme.subtitle1.copyWith(color: AColors.white), textDirection: TextDirection.rtl, ), - ), ), ); diff --git a/lib/views/widgets/departments/single_department_picker.dart b/lib/views/widgets/departments/single_department_picker.dart index e5fb916..d055a87 100644 --- a/lib/views/widgets/departments/single_department_picker.dart +++ b/lib/views/widgets/departments/single_department_picker.dart @@ -10,6 +10,7 @@ import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import '../app_text_form_field.dart'; + class SingleDepartmentPicker extends StatefulWidget { static final String id = "/single-Department-Picker"; @override @@ -26,7 +27,7 @@ class _SingleDepartmentPickerState extends State { _departmentsProvider = Provider.of(context); _settingProvider = Provider.of(context); Subtitle _subtitle = AppLocalization.of(context).subtitle; - if(_firstTime && _departmentsProvider.departments != null){ + if (_firstTime && _departmentsProvider.departments != null) { _searchableList.addAll(_departmentsProvider.departments); _firstTime = false; } @@ -45,40 +46,40 @@ class _SingleDepartmentPickerState extends State { }, child: Column( children: [ - SizedBox(height: 48,), + SizedBox( + height: 48, + ), Padding( - padding: const EdgeInsets.symmetric(vertical: 8,horizontal: 16), + padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), child: ATextFormField( hintText: _subtitle.searchByName, - style: Theme.of(context).textTheme.headline6, + style: Theme.of(context).textTheme.headline6, suffixIcon: Icon(Icons.search_rounded), - onChange: (value){ + onChange: (value) { _searchableList.clear(); - _searchableList.addAll(_departmentsProvider.departments.where( - (element) => element.name.toLowerCase().contains( - value.toLowerCase() - ) - ).toList()); + _searchableList.addAll(_departmentsProvider.departments.where((element) => element.name.toLowerCase().contains(value.toLowerCase())).toList()); setState(() {}); }, ), ), Expanded( - child: _searchableList.isEmpty ? - NoItemFound(message: _subtitle.noUniteFound,): - ListView.builder( - padding: EdgeInsets.zero, - shrinkWrap: true, - itemCount: _searchableList.length, - itemBuilder: (listContext,itemIndex){ - return DepartmentItem( - department: _searchableList[itemIndex], - onPressed: (hospital){ - Navigator.of(context).pop(hospital); - }, - ); - }, - ), + child: _searchableList.isEmpty + ? NoItemFound( + message: _subtitle.noUniteFound, + ) + : ListView.builder( + padding: EdgeInsets.zero, + shrinkWrap: true, + itemCount: _searchableList.length, + itemBuilder: (listContext, itemIndex) { + return DepartmentItem( + department: _searchableList[itemIndex], + onPressed: (hospital) { + Navigator.of(context).pop(hospital); + }, + ); + }, + ), ), ], ), diff --git a/lib/views/widgets/device_trancfer/device_transfer_info_section.dart b/lib/views/widgets/device_trancfer/device_transfer_info_section.dart index 03e694c..55e6b1d 100644 --- a/lib/views/widgets/device_trancfer/device_transfer_info_section.dart +++ b/lib/views/widgets/device_trancfer/device_transfer_info_section.dart @@ -5,6 +5,7 @@ import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/widgets/loaders/image_loader.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; + class DeviceTransferInfoSection extends StatelessWidget { final DeviceTransferInfo info; final VoidCallback onEdit; @@ -41,19 +42,16 @@ class DeviceTransferInfoSection extends StatelessWidget { ), RequestInfoRow( title: "Signature", - info: info.signature?.isEmpty != false - ? subtitle.noDateFound : null, - contentWidget: info.signature?.isEmpty != false ? null : - ImageLoader( - url: info.signature, - ), + info: info.signature?.isEmpty != false ? subtitle.noDateFound : null, + contentWidget: info.signature?.isEmpty != false + ? null + : ImageLoader( + url: info.signature, + ), ), RequestInfoRow( title: subtitle.status, - infoWidget: StatusLabel( - label: info.status?.name, - color: AColors.getGasStatusColor(info.status?.id) - ), + infoWidget: StatusLabel(label: info.status?.name, color: AColors.getGasStatusColor(info.status?.id)), ), ], ); diff --git a/lib/views/widgets/device_trancfer/device_transfer_item.dart b/lib/views/widgets/device_trancfer/device_transfer_item.dart index 4b2d78c..9da46fa 100644 --- a/lib/views/widgets/device_trancfer/device_transfer_item.dart +++ b/lib/views/widgets/device_trancfer/device_transfer_item.dart @@ -9,6 +9,7 @@ import 'package:test_sa/models/user.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; + class DeviceTransferItem extends StatelessWidget { final int index; final DeviceTransfer item; @@ -18,28 +19,22 @@ class DeviceTransferItem extends StatelessWidget { @override Widget build(BuildContext context) { Subtitle _subtitle = AppLocalization.of(context).subtitle; - User _user = Provider.of(context,listen: false).user; - Color itemColor = index % 2 == 0 - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.onPrimary; - Color onItemColor = index % 2 != 0 - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.onPrimary; + User _user = Provider.of(context, listen: false).user; + Color itemColor = index % 2 == 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; + Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; return Padding( padding: const EdgeInsets.symmetric(vertical: 4), child: ElevatedButton( - style: ElevatedButton.styleFrom( - padding: EdgeInsets.symmetric(vertical: 8,horizontal: 8), - backgroundColor: itemColor, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - AppStyle.getBorderRadius(context) - ), - ), - ), + style: ElevatedButton.styleFrom( + padding: EdgeInsets.symmetric(vertical: 8, horizontal: 8), + backgroundColor: itemColor, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), + ), + ), //padding: EdgeInsets.symmetric(vertical: 8,horizontal: 8), - onPressed: (){ + onPressed: () { onPressed(item); }, child: Column( @@ -53,28 +48,25 @@ class DeviceTransferItem extends StatelessWidget { children: [ Text( item.title ?? "-----", - style: Theme.of(context).textTheme.headline6.copyWith( - color: onItemColor, - fontSize: 16, - fontWeight: FontWeight.bold - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: onItemColor, fontSize: 16, fontWeight: FontWeight.bold), + ), + Divider( + color: onItemColor, ), - Divider(color: onItemColor,), Row( children: [ Expanded( child: Text( _subtitle.from, style: Theme.of(context).textTheme.subtitle2.copyWith( - color: onItemColor, - ), + color: onItemColor, + ), ), ), - StatusLabel( - color: AColors.getRequestStatusColor(item.sender.status?.id), - label: item.sender.status?.name, - ) - + StatusLabel( + color: AColors.getRequestStatusColor(item.sender.status?.id), + label: item.sender.status?.name, + ) ], ), //const SizedBox(height: 8,), @@ -84,37 +76,36 @@ class DeviceTransferItem extends StatelessWidget { child: Text( item.sender.client.name, style: Theme.of(context).textTheme.subtitle2.copyWith( - color: onItemColor, - ), + color: onItemColor, + ), ), ), - - ], ), - if(item.sender.department.id != null) - Text( - item.sender.department.name, - style: Theme.of(context).textTheme.bodySmall.copyWith( - color: onItemColor, + if (item.sender.department.id != null) + Text( + item.sender.department.name, + style: Theme.of(context).textTheme.bodySmall.copyWith( + color: onItemColor, + ), ), + Divider( + color: onItemColor, ), - Divider(color: onItemColor,), Row( children: [ Expanded( child: Text( _subtitle.to, style: Theme.of(context).textTheme.subtitle2.copyWith( - color: onItemColor, - ), + color: onItemColor, + ), ), ), StatusLabel( color: AColors.getRequestStatusColor(item.receiver.status?.id), label: item.receiver.status?.name, ) - ], ), //const SizedBox(height: 8,), @@ -124,26 +115,23 @@ class DeviceTransferItem extends StatelessWidget { child: Text( item.receiver.client.name, style: Theme.of(context).textTheme.subtitle2.copyWith( - color: onItemColor, - ), + color: onItemColor, + ), ), ), - - ], ), - if(item.receiver.department.id != null) - Text( - item.receiver.department.name, - style: Theme.of(context).textTheme.bodySmall.copyWith( - color: onItemColor, + if (item.receiver.department.id != null) + Text( + item.receiver.department.name, + style: Theme.of(context).textTheme.bodySmall.copyWith( + color: onItemColor, + ), ), - ), //Divider(color: onItemColor,), ], ), ), - ], ), ], diff --git a/lib/views/widgets/device_trancfer/device_transfer_list.dart b/lib/views/widgets/device_trancfer/device_transfer_list.dart index 18bee92..dd6f021 100644 --- a/lib/views/widgets/device_trancfer/device_transfer_list.dart +++ b/lib/views/widgets/device_trancfer/device_transfer_list.dart @@ -6,6 +6,7 @@ import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart import 'package:test_sa/views/widgets/device_trancfer/device_transfer_item.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; + class DeviceTransferList extends StatelessWidget { final List items; final bool nextPage; @@ -15,32 +16,31 @@ class DeviceTransferList extends StatelessWidget { @override Widget build(BuildContext context) { - - if(items.length == 0){ + if (items.length == 0) { Subtitle subtitle = AppLocalization.of(context).subtitle; - return NoItemFound(message: subtitle.noServiceRequestFound,); + return NoItemFound( + message: subtitle.noServiceRequestFound, + ); } return LazyLoading( nextPage: nextPage, onLazyLoad: onLazyLoad, child: ListView.builder( - //physics: const BouncingScrollPhysics(), - itemCount: items.length, - padding: const EdgeInsets.symmetric(horizontal: 16,vertical: 8), - itemBuilder: (context,itemIndex){ + //physics: const BouncingScrollPhysics(), + itemCount: items.length, + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + itemBuilder: (context, itemIndex) { return DeviceTransferItem( index: itemIndex, item: items[itemIndex], - onPressed: (model){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_)=> DeviceTransferDetails(model: model,) - ) - ); + onPressed: (model) { + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => DeviceTransferDetails( + model: model, + ))); }, ); - } - ), + }), ); } } diff --git a/lib/views/widgets/dialogs/dialog.dart b/lib/views/widgets/dialogs/dialog.dart index 7bb08f2..bf9db49 100644 --- a/lib/views/widgets/dialogs/dialog.dart +++ b/lib/views/widgets/dialogs/dialog.dart @@ -2,6 +2,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:test_sa/controllers/localization/localization.dart'; import 'package:test_sa/models/subtitle.dart'; + class AAlertDialog extends StatelessWidget { final String title; final String content; @@ -12,12 +13,8 @@ class AAlertDialog extends StatelessWidget { Widget build(BuildContext context) { Subtitle _subtitle = AppLocalization.of(context).subtitle; return CupertinoAlertDialog( - title: title != null - ? Text(title) - : null, - content: content != null - ? Text(content) - : null, + title: title != null ? Text(title) : null, + content: content != null ? Text(content) : null, actions: [ TextButton( child: Text(_subtitle.confirm), diff --git a/lib/views/widgets/drawer/drawer_item.dart b/lib/views/widgets/drawer/drawer_item.dart index 1bbc247..70e072e 100644 --- a/lib/views/widgets/drawer/drawer_item.dart +++ b/lib/views/widgets/drawer/drawer_item.dart @@ -25,7 +25,7 @@ class DrawerItem extends StatelessWidget { onPressed: onPressed, child: Row( children: [ - Icon(icon, color: AColors.grey3A,size: 20), + Icon(icon, color: AColors.grey3A, size: 20), 12.width, Text( title, @@ -33,7 +33,7 @@ class DrawerItem extends StatelessWidget { textScaleFactor: AppStyle.getScaleFactor(context), ), ], - ).paddingOnly(left: 20,right: 20), + ).paddingOnly(left: 20, right: 20), ), ); } diff --git a/lib/views/widgets/equipment/auto_complete_devices_field.dart b/lib/views/widgets/equipment/auto_complete_devices_field.dart index 3c6fbc9..5d9cd1e 100644 --- a/lib/views/widgets/equipment/auto_complete_devices_field.dart +++ b/lib/views/widgets/equipment/auto_complete_devices_field.dart @@ -8,6 +8,7 @@ import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; + class AutoCompleteDeviceField extends StatefulWidget { final Device initialValue; final int hospitalId; @@ -20,7 +21,6 @@ class AutoCompleteDeviceField extends StatefulWidget { } class _AutoCompleteDeviceFieldState extends State { - SettingProvider _settingProvider; DevicesProvider _devicesProvider; UserProvider _userProvider; @@ -37,6 +37,7 @@ class _AutoCompleteDeviceFieldState extends State { _controller.dispose(); super.dispose(); } + @override Widget build(BuildContext context) { _settingProvider = Provider.of(context); @@ -44,64 +45,53 @@ class _AutoCompleteDeviceFieldState extends State { _devicesProvider = Provider.of(context); //Subtitle _subtitle = AppLocalization.of(context).subtitle; return LoadingManager( - isLoading: _devicesProvider.isLoading, - isFailedLoading: _devicesProvider.devices == null, - stateCode: _devicesProvider.stateCode, - onRefresh: () async { - _devicesProvider.reset(); - await _devicesProvider.getEquipment( - host: _settingProvider.host, - user: _userProvider.user, - hospitalId: widget.hospitalId - ); - }, - child: Container( - padding: const EdgeInsets.symmetric( - horizontal: 16 - ), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color:AColors.black), - borderRadius: BorderRadius.circular( - AppStyle.borderRadius * AppStyle.getScaleFactor(context) - ), - boxShadow: [ - AppStyle.boxShadow - ] - ), - child: TypeAheadField( - textFieldConfiguration: TextFieldConfiguration( - style: Theme.of(context).textTheme.headline6, - controller: _controller, - textAlign: TextAlign.center, - decoration: const InputDecoration( - border: InputBorder.none, - disabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - enabledBorder: InputBorder.none, - ), - textInputAction: TextInputAction.search, + isLoading: _devicesProvider.isLoading, + isFailedLoading: _devicesProvider.devices == null, + stateCode: _devicesProvider.stateCode, + onRefresh: () async { + _devicesProvider.reset(); + await _devicesProvider.getEquipment(host: _settingProvider.host, user: _userProvider.user, hospitalId: widget.hospitalId); + }, + child: Container( + padding: const EdgeInsets.symmetric(horizontal: 16), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color: AColors.black), + borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), + boxShadow: [AppStyle.boxShadow]), + child: TypeAheadField( + textFieldConfiguration: TextFieldConfiguration( + style: Theme.of(context).textTheme.headline6, + controller: _controller, + textAlign: TextAlign.center, + decoration: const InputDecoration( + border: InputBorder.none, + disabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, ), - suggestionsCallback: (value) async { - return await _devicesProvider.getDevicesList( - host: _settingProvider.host, - user: _userProvider.user, - hospitalId: widget.hospitalId ?? _userProvider.user.hospital.id, - serialNumber: value, - ); - }, - itemBuilder: (context, device) { - return ListTile( - title: Text(device.serialNumber), - subtitle: Text("${device.modelDefinition.modelName}/${device.modelDefinition.manufacturerName}"), - ); - }, - onSuggestionSelected: (device) { - _controller.text = device.serialNumber; - widget.onPick(device.id); - }, + textInputAction: TextInputAction.search, ), + suggestionsCallback: (value) async { + return await _devicesProvider.getDevicesList( + host: _settingProvider.host, + user: _userProvider.user, + hospitalId: widget.hospitalId ?? _userProvider.user.hospital.id, + serialNumber: value, + ); + }, + itemBuilder: (context, device) { + return ListTile( + title: Text(device.serialNumber), + subtitle: Text("${device.modelDefinition.modelName}/${device.modelDefinition.manufacturerName}"), + ); + }, + onSuggestionSelected: (device) { + _controller.text = device.serialNumber; + widget.onPick(device.id); + }, ), + ), ); } } diff --git a/lib/views/widgets/equipment/auto_complete_models_field.dart b/lib/views/widgets/equipment/auto_complete_models_field.dart index 7f776b9..7b2c755 100644 --- a/lib/views/widgets/equipment/auto_complete_models_field.dart +++ b/lib/views/widgets/equipment/auto_complete_models_field.dart @@ -7,18 +7,22 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class AutoCompleteModelField extends StatefulWidget { final Lookup initialValue; final Function(Lookup) onPick; - const AutoCompleteModelField({Key key, this.initialValue, this.onPick,}) : super(key: key); + const AutoCompleteModelField({ + Key key, + this.initialValue, + this.onPick, + }) : super(key: key); @override _AutoCompleteModelFieldState createState() => _AutoCompleteModelFieldState(); } class _AutoCompleteModelFieldState extends State { - SettingProvider _settingProvider; DevicesProvider _devicesProvider; UserProvider _userProvider; @@ -35,6 +39,7 @@ class _AutoCompleteModelFieldState extends State { _controller.dispose(); super.dispose(); } + @override Widget build(BuildContext context) { _settingProvider = Provider.of(context); @@ -42,37 +47,29 @@ class _AutoCompleteModelFieldState extends State { _devicesProvider = Provider.of(context); //Subtitle _subtitle = AppLocalization.of(context).subtitle; return Container( - padding: const EdgeInsets.symmetric( - horizontal: 16 - ), + padding: const EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( color: Colors.white, - border: Border.all(color:AColors.black), - borderRadius: BorderRadius.circular( - AppStyle.borderRadius * AppStyle.getScaleFactor(context) - ), - boxShadow: [ - AppStyle.boxShadow - ] - ), + border: Border.all(color: AColors.black), + borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), + boxShadow: [AppStyle.boxShadow]), child: TypeAheadField( textFieldConfiguration: TextFieldConfiguration( - style: Theme.of(context).textTheme.headline6, - controller: _controller, - textAlign: TextAlign.center, - - decoration: const InputDecoration( - hintText: "Model", - border: InputBorder.none, - disabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - enabledBorder: InputBorder.none, - ), - textInputAction: TextInputAction.search, + style: Theme.of(context).textTheme.headline6, + controller: _controller, + textAlign: TextAlign.center, + decoration: const InputDecoration( + hintText: "Model", + border: InputBorder.none, + disabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + ), + textInputAction: TextInputAction.search, ), suggestionsCallback: (value) async { return await _devicesProvider.getModels( - code: value, + code: value, ); }, itemBuilder: (context, lookup) { diff --git a/lib/views/widgets/equipment/device_item.dart b/lib/views/widgets/equipment/device_item.dart index 0ead41e..e9fb904 100644 --- a/lib/views/widgets/equipment/device_item.dart +++ b/lib/views/widgets/equipment/device_item.dart @@ -4,6 +4,7 @@ import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class DeviceItem extends StatelessWidget { final Device device; final Function(Device) onPressed; @@ -13,41 +14,38 @@ class DeviceItem extends StatelessWidget { Widget build(BuildContext context) { Subtitle _subtitle = AppLocalization.of(context).subtitle; return Padding( - padding: EdgeInsets.symmetric(horizontal: 16,vertical: 6), + padding: EdgeInsets.symmetric(horizontal: 16, vertical: 6), child: ElevatedButton( style: ElevatedButton.styleFrom( primary: AColors.primaryColor, shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - AppStyle.getBorderRadius(context) - ), + borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), ), ), - - onPressed: (){ + onPressed: () { onPressed(device); }, child: ListTile( - title: Text("${_subtitle.sn} : ${device.serialNumber}", - style: Theme.of(context).textTheme.headline6.copyWith( - color: AColors.white - ), - + title: Text( + "${_subtitle.sn} : ${device.serialNumber}", + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white), ), subtitle: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Divider(color: Theme.of(context).scaffoldBackgroundColor,), - Text("${_subtitle.brand} : ${device.modelDefinition.manufacturerName}", - style: Theme.of(context).textTheme.subtitle1.copyWith( - color: AColors.white - ), + Divider( + color: Theme.of(context).scaffoldBackgroundColor, + ), + Text( + "${_subtitle.brand} : ${device.modelDefinition.manufacturerName}", + style: Theme.of(context).textTheme.subtitle1.copyWith(color: AColors.white), + ), + Divider( + color: Theme.of(context).scaffoldBackgroundColor, ), - Divider(color: Theme.of(context).scaffoldBackgroundColor,), - Text("${_subtitle.model} : ${device.modelDefinition.modelName}", - style: Theme.of(context).textTheme.subtitle1.copyWith( - color: AColors.white - ), + Text( + "${_subtitle.model} : ${device.modelDefinition.modelName}", + style: Theme.of(context).textTheme.subtitle1.copyWith(color: AColors.white), ), ], ), diff --git a/lib/views/widgets/equipment/single_device_picker.dart b/lib/views/widgets/equipment/single_device_picker.dart index 03b0d66..566037c 100644 --- a/lib/views/widgets/equipment/single_device_picker.dart +++ b/lib/views/widgets/equipment/single_device_picker.dart @@ -14,6 +14,7 @@ import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/qr/scan_qr.dart'; import '../app_text_form_field.dart'; + class SingleDevicePicker extends StatefulWidget { static final String id = "/single-device-Picker"; final bool sandraChoice = true; @@ -32,22 +33,16 @@ class _SingleDevicePickerState extends State { TextEditingController numberController = TextEditingController(); TextEditingController snController = TextEditingController(); _getDevice(String result) async { - if(result == null) return; + if (result == null) return; showDialog( barrierDismissible: false, context: context, - builder: (dialogContext){ + builder: (dialogContext) { return const Center(child: CircularProgressIndicator()); - } - ); - List devices = await _devicesProvider.getDevicesListBySN( - host: _settingProvider.host, - user: _userProvider.user, - hospitalId: _userProvider.user.hospital.id, - sn: result - ); + }); + List devices = await _devicesProvider.getDevicesListBySN(host: _settingProvider.host, user: _userProvider.user, hospitalId: _userProvider.user.hospital.id, sn: result); Navigator.of(context).pop(); - if(devices.isEmpty){ + if (devices.isEmpty) { Fluttertoast.showToast(msg: _subtitle.noDeviceFound); return; } @@ -72,7 +67,7 @@ class _SingleDevicePickerState extends State { _userProvider = Provider.of(context); _settingProvider = Provider.of(context); - if(_firstTime && _devicesProvider.devices != null){ + if (_firstTime && _devicesProvider.devices != null) { _searchableList.clear(); _searchableList.addAll(_devicesProvider.devices); } @@ -85,54 +80,42 @@ class _SingleDevicePickerState extends State { isFailedLoading: _devicesProvider.devices == null, onRefresh: () async { _devicesProvider.reset(); - await _devicesProvider.getEquipment( - user: _userProvider.user, - host: _settingProvider.host, - hospitalId: _userProvider.user.hospital?.id - ); + await _devicesProvider.getEquipment(user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.hospital?.id); }, child: Column( children: [ const SizedBox(height: 48), Padding( - padding: const EdgeInsets.symmetric(vertical: 8,horizontal: 16), + padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), child: Column( children: [ ATextFormField( hintText: _subtitle.searchBySn, controller: snController, - style: Theme.of(context).textTheme.subtitle1, + style: Theme.of(context).textTheme.subtitle1, suffixIcon: const Icon(Icons.search_rounded), textInputAction: TextInputAction.search, onAction: () async { _devicesProvider.reset(); await _devicesProvider.getEquipment( - user: _userProvider.user, - host: _settingProvider.host, - hospitalId: _userProvider.user.hospital?.id, - serialNumber: snController.text, - number: numberController.text - ); + user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.hospital?.id, serialNumber: snController.text, number: numberController.text); _searchableList.clear(); _searchableList.addAll(_devicesProvider.devices); }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), ATextFormField( hintText: "Search by Number", controller: numberController, - style: Theme.of(context).textTheme.subtitle1, + style: Theme.of(context).textTheme.subtitle1, suffixIcon: const Icon(Icons.search_rounded), textInputAction: TextInputAction.search, onAction: () async { _devicesProvider.reset(); await _devicesProvider.getEquipment( - user: _userProvider.user, - host: _settingProvider.host, - hospitalId: _userProvider.user.hospital?.id, - serialNumber: snController.text, - number: numberController.text - ); + user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.hospital?.id, serialNumber: snController.text, number: numberController.text); _searchableList.clear(); _searchableList.addAll(_devicesProvider.devices); }, @@ -141,34 +124,30 @@ class _SingleDevicePickerState extends State { ), ), Expanded( - child: _searchableList.isEmpty ? - NoItemFound(message: _subtitle.noDeviceFound,): - LazyLoading( - nextPage: _devicesProvider.nextPage, - onLazyLoad: () async { - await _devicesProvider.getDevicesList( - user: _userProvider.user, - host: _settingProvider.host, - hospitalId: _userProvider.user.hospital?.id, - serialNumber: snController.text, - number: numberController.text - ); - }, - child:ListView.builder( - padding: EdgeInsets.zero, - shrinkWrap: true, - itemCount: _searchableList.length, - itemBuilder: (listContext,itemIndex){ - return DeviceItem( - device: _searchableList[itemIndex], - onPressed: (device){ - Navigator.of(context).pop(device); - }, - ); - }, - ), - ) - ), + child: _searchableList.isEmpty + ? NoItemFound( + message: _subtitle.noDeviceFound, + ) + : LazyLoading( + nextPage: _devicesProvider.nextPage, + onLazyLoad: () async { + await _devicesProvider.getDevicesList( + user: _userProvider.user, host: _settingProvider.host, hospitalId: _userProvider.user.hospital?.id, serialNumber: snController.text, number: numberController.text); + }, + child: ListView.builder( + padding: EdgeInsets.zero, + shrinkWrap: true, + itemCount: _searchableList.length, + itemBuilder: (listContext, itemIndex) { + return DeviceItem( + device: _searchableList[itemIndex], + onPressed: (device) { + Navigator.of(context).pop(device); + }, + ); + }, + ), + )), ], ), ), diff --git a/lib/views/widgets/gas_refill/gas_refill_create_details_item.dart b/lib/views/widgets/gas_refill/gas_refill_create_details_item.dart index 375a1b1..41d0806 100644 --- a/lib/views/widgets/gas_refill/gas_refill_create_details_item.dart +++ b/lib/views/widgets/gas_refill/gas_refill_create_details_item.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; import 'package:test_sa/models/gas_refill/gas_refill_details.dart'; import 'package:test_sa/views/app_style/colors.dart'; -class GasRefillCreateDetailsItem extends StatelessWidget { +class GasRefillCreateDetailsItem extends StatelessWidget { final GasRefillDetails model; final VoidCallback onDelete; @@ -14,14 +14,7 @@ class GasRefillCreateDetailsItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( - children: [ - Expanded(child: Text(model.type.name)), - IconButton( - onPressed: onDelete, - color: AColors.red, - icon: const Icon(Icons.delete) - ) - ], + children: [Expanded(child: Text(model.type.name)), IconButton(onPressed: onDelete, color: AColors.red, icon: const Icon(Icons.delete))], ), Wrap( spacing: 10, @@ -31,13 +24,13 @@ class GasRefillCreateDetailsItem extends StatelessWidget { Text("Cylinder Type: ${model.cylinderType.name}"), ], ), - if(model.deliveredQuantity != null) - Row( - children: [ - const Text("Delivered Quantity"), - Text(model.deliveredQuantity.toStringAsFixed(0)), - ], - ), + if (model.deliveredQuantity != null) + Row( + children: [ + const Text("Delivered Quantity"), + Text(model.deliveredQuantity.toStringAsFixed(0)), + ], + ), const Divider(), ], ); diff --git a/lib/views/widgets/gas_refill/gas_refill_item.dart b/lib/views/widgets/gas_refill/gas_refill_item.dart index 47af778..0ad575c 100644 --- a/lib/views/widgets/gas_refill/gas_refill_item.dart +++ b/lib/views/widgets/gas_refill/gas_refill_item.dart @@ -9,6 +9,7 @@ import 'package:test_sa/models/user.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; + class GasRefillItem extends StatelessWidget { final int index; final GasRefillModel item; @@ -18,28 +19,22 @@ class GasRefillItem extends StatelessWidget { @override Widget build(BuildContext context) { Subtitle _subtitle = AppLocalization.of(context).subtitle; - User _user = Provider.of(context,listen: false).user; - Color itemColor = index % 2 == 0 - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.onPrimary; - Color onItemColor = index % 2 != 0 - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.onPrimary; + User _user = Provider.of(context, listen: false).user; + Color itemColor = index % 2 == 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; + Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; return Padding( padding: const EdgeInsets.symmetric(vertical: 4), child: ElevatedButton( - style: ElevatedButton.styleFrom( - padding: EdgeInsets.symmetric(vertical: 8,horizontal: 8), - backgroundColor: itemColor, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - AppStyle.getBorderRadius(context) - ), - ), - ), + style: ElevatedButton.styleFrom( + padding: EdgeInsets.symmetric(vertical: 8, horizontal: 8), + backgroundColor: itemColor, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), + ), + ), //padding: EdgeInsets.symmetric(vertical: 8,horizontal: 8), - onPressed: (){ + onPressed: () { onPressed(item); }, child: Column( @@ -53,11 +48,7 @@ class GasRefillItem extends StatelessWidget { children: [ Text( item.title ?? "-----", - style: Theme.of(context).textTheme.headline6.copyWith( - color: onItemColor, - fontSize: 16, - fontWeight: FontWeight.bold - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: onItemColor, fontSize: 16, fontWeight: FontWeight.bold), ), Row( children: [ @@ -65,43 +56,39 @@ class GasRefillItem extends StatelessWidget { child: Text( _subtitle.hospital, style: Theme.of(context).textTheme.subtitle2.copyWith( - color: onItemColor, - ), + color: onItemColor, + ), ), ), - if(item.clientName != null) - Text( - item.clientName, - style: Theme.of(context).textTheme.subtitle2.copyWith( - color: onItemColor, + if (item.clientName != null) + Text( + item.clientName, + style: Theme.of(context).textTheme.subtitle2.copyWith( + color: onItemColor, + ), ), - ), - ], ), - Divider(color: onItemColor,), + Divider( + color: onItemColor, + ), Row( children: [ Expanded( child: Text( _subtitle.status, style: Theme.of(context).textTheme.subtitle2.copyWith( - color: onItemColor, - ), + color: onItemColor, + ), ), ), - if(item.status?.id != null) - StatusLabel(label: item.status.name, - color: AColors.getGasStatusColor(item.status.id) - ), + if (item.status?.id != null) StatusLabel(label: item.status.name, color: AColors.getGasStatusColor(item.status.id)), ], ), //Divider(color: onItemColor,), - ], ), ), - ], ), ], diff --git a/lib/views/widgets/gas_refill/gas_refill_list.dart b/lib/views/widgets/gas_refill/gas_refill_list.dart index e25797d..b6f58e8 100644 --- a/lib/views/widgets/gas_refill/gas_refill_list.dart +++ b/lib/views/widgets/gas_refill/gas_refill_list.dart @@ -6,6 +6,7 @@ import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart'; import 'package:test_sa/views/widgets/gas_refill/gas_refill_item.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; + class GasRefillList extends StatelessWidget { final List items; final bool nextPage; @@ -15,32 +16,31 @@ class GasRefillList extends StatelessWidget { @override Widget build(BuildContext context) { - - if(items.length == 0){ + if (items.length == 0) { Subtitle subtitle = AppLocalization.of(context).subtitle; - return NoItemFound(message: subtitle.noServiceRequestFound,); + return NoItemFound( + message: subtitle.noServiceRequestFound, + ); } return LazyLoading( nextPage: nextPage, onLazyLoad: onLazyLoad, child: ListView.builder( - //physics: const BouncingScrollPhysics(), - itemCount: items.length, - padding: const EdgeInsets.symmetric(horizontal: 16,vertical: 8), - itemBuilder: (context,itemIndex){ + //physics: const BouncingScrollPhysics(), + itemCount: items.length, + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + itemBuilder: (context, itemIndex) { return GasRefillItem( index: itemIndex, item: items[itemIndex], - onPressed: (model){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_)=> GasRefillDetails(model: model,) - ) - ); + onPressed: (model) { + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => GasRefillDetails( + model: model, + ))); }, ); - } - ), + }), ); } } diff --git a/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart b/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart index aa9804c..d71b261 100644 --- a/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart +++ b/lib/views/widgets/gas_refill/gas_refill_update_details_item.dart @@ -7,8 +7,8 @@ import 'package:test_sa/views/widgets/app_text_form_field.dart'; import 'package:test_sa/views/widgets/requests/info_row.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/widgets/titles/app_title.dart'; -class GasRefillUpdateDetailsItem extends StatelessWidget { +class GasRefillUpdateDetailsItem extends StatelessWidget { final GasRefillDetails details; final bool enableEdit; final bool validate; @@ -23,39 +23,42 @@ class GasRefillUpdateDetailsItem extends StatelessWidget { children: [ ATitle(details.type.name), RequestInfoRow( - title: "Cylinder Size", + title: "Cylinder Size", info: details.cylinderSize.name, ), RequestInfoRow( - title: "Requested Quantity", + title: "Requested Quantity", info: details.requestedQuantity.toStringAsFixed(0), ), - enableEdit ? - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ASubTitle(subtitle.quantity), - if(validate && details.deliveredQuantity == null) - ASubTitle(subtitle.requiredWord,color: Colors.red,), - SizedBox(height: 4,), - ATextFormField( - initialValue: (details.deliveredQuantity ?? "").toString(), - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - validator: (value) => - Validator.isNumeric(value) - ? null : "allow numbers only", - textInputType: TextInputType.number, - onSaved: (value){ - details.deliveredQuantity = double.tryParse(value); - }, - ), - ], - ): - RequestInfoRow( - title: "Delivered Quantity", - info: details.deliveredQuantity?.toStringAsFixed(0), - ), + enableEdit + ? Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ASubTitle(subtitle.quantity), + if (validate && details.deliveredQuantity == null) + ASubTitle( + subtitle.requiredWord, + color: Colors.red, + ), + SizedBox( + height: 4, + ), + ATextFormField( + initialValue: (details.deliveredQuantity ?? "").toString(), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + validator: (value) => Validator.isNumeric(value) ? null : "allow numbers only", + textInputType: TextInputType.number, + onSaved: (value) { + details.deliveredQuantity = double.tryParse(value); + }, + ), + ], + ) + : RequestInfoRow( + title: "Delivered Quantity", + info: details.deliveredQuantity?.toStringAsFixed(0), + ), //SizedBox(height: 16,) ], ); diff --git a/lib/views/widgets/hospitals/hospital_auto_complete_field.dart b/lib/views/widgets/hospitals/hospital_auto_complete_field.dart index ca0df0f..40e1eb6 100644 --- a/lib/views/widgets/hospitals/hospital_auto_complete_field.dart +++ b/lib/views/widgets/hospitals/hospital_auto_complete_field.dart @@ -8,19 +8,23 @@ import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class HospitalAutoCompleteField extends StatefulWidget { final String initialValue; final Function(Hospital) onSearch; //final Function(Hospital) onSave; - const HospitalAutoCompleteField({Key key, this.onSearch, this.initialValue, }) : super(key: key); + const HospitalAutoCompleteField({ + Key key, + this.onSearch, + this.initialValue, + }) : super(key: key); @override _HospitalAutoCompleteFieldState createState() => _HospitalAutoCompleteFieldState(); } class _HospitalAutoCompleteFieldState extends State { - SettingProvider _settingProvider; TextEditingController _controller; @@ -54,17 +58,17 @@ class _HospitalAutoCompleteFieldState extends State { ), child: TypeAheadField( textFieldConfiguration: TextFieldConfiguration( - style: Theme.of(context).textTheme.headline6, - controller: _controller, - textAlign: TextAlign.center, - decoration: InputDecoration( - hintText: _subtitle.hospital, - border: InputBorder.none, - disabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - enabledBorder: InputBorder.none, - ), - textInputAction: TextInputAction.search, + style: Theme.of(context).textTheme.headline6, + controller: _controller, + textAlign: TextAlign.center, + decoration: InputDecoration( + hintText: _subtitle.hospital, + border: InputBorder.none, + disabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + ), + textInputAction: TextInputAction.search, ), suggestionsCallback: (vale) async { return await HospitalsProvider().getHospitalsList(host: _settingProvider.host, title: vale); diff --git a/lib/views/widgets/hospitals/hospital_button.dart b/lib/views/widgets/hospitals/hospital_button.dart index 2990aca..86fb867 100644 --- a/lib/views/widgets/hospitals/hospital_button.dart +++ b/lib/views/widgets/hospitals/hospital_button.dart @@ -6,6 +6,7 @@ import 'package:test_sa/models/subtitle.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/hospitals/single_hospital_picker.dart'; + class HospitalButton extends StatelessWidget { final Function(Hospital) onHospitalPick; final Hospital hospital; @@ -31,7 +32,7 @@ class HospitalButton extends StatelessWidget { child: Text( hospital?.name ?? _subtitle.pickHospital, style: Theme.of(context).textTheme.bodyText1.copyWith(fontSize: 14, color: AColors.grey3A), - // textScaleFactor: AppStyle.getScaleFactor(context), + // textScaleFactor: AppStyle.getScaleFactor(context), textDirection: TextDirection.rtl, textAlign: TextAlign.left, ), diff --git a/lib/views/widgets/hospitals/hospital_item.dart b/lib/views/widgets/hospitals/hospital_item.dart index 3ee5b69..0228144 100644 --- a/lib/views/widgets/hospitals/hospital_item.dart +++ b/lib/views/widgets/hospitals/hospital_item.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:test_sa/models/hospital.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class HospitalItem extends StatelessWidget { final Hospital hospital; final Function(Hospital) onPressed; @@ -10,29 +11,25 @@ class HospitalItem extends StatelessWidget { @override Widget build(BuildContext context) { return Padding( - padding: const EdgeInsets.symmetric(horizontal: 16,vertical: 6), + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 6), child: ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: AColors.primaryColor, shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - AppStyle.getBorderRadius(context) - ), + borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), ), ), - - onPressed: onPressed == null ? null : (){ - onPressed(hospital); - }, + onPressed: onPressed == null + ? null + : () { + onPressed(hospital); + }, child: ListTile( title: Text( - hospital.name ?? "", - style: Theme.of(context).textTheme.subtitle1.copyWith( - color: AColors.white - ), + hospital.name ?? "", + style: Theme.of(context).textTheme.subtitle1.copyWith(color: AColors.white), textDirection: TextDirection.rtl, ), - ), ), ); diff --git a/lib/views/widgets/hospitals/single_hospital_picker.dart b/lib/views/widgets/hospitals/single_hospital_picker.dart index 27ca086..244166f 100644 --- a/lib/views/widgets/hospitals/single_hospital_picker.dart +++ b/lib/views/widgets/hospitals/single_hospital_picker.dart @@ -10,6 +10,7 @@ import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import '../app_text_form_field.dart'; + class SingleHospitalPicker extends StatefulWidget { static final String id = "/single-Hospital-Picker"; final bool sandraChoice = true; @@ -26,7 +27,7 @@ class _SingleHospitalPickerState extends State { Widget build(BuildContext context) { _hospitalsProvider = Provider.of(context); _settingProvider = Provider.of(context); - if(_firstTime && _hospitalsProvider.hospitals != null){ + if (_firstTime && _hospitalsProvider.hospitals != null) { _searchableList.addAll(_hospitalsProvider.hospitals); _firstTime = false; } @@ -39,44 +40,46 @@ class _SingleHospitalPickerState extends State { isFailedLoading: _hospitalsProvider.hospitals == null, onRefresh: () async { _hospitalsProvider.reset(); - await _hospitalsProvider.getHospitals(host: _settingProvider.host,); + await _hospitalsProvider.getHospitals( + host: _settingProvider.host, + ); }, child: Column( children: [ - SizedBox(height: 48,), + SizedBox( + height: 48, + ), Padding( - padding: const EdgeInsets.symmetric(vertical: 8,horizontal: 16), + padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), child: ATextFormField( hintText: _subtitle.searchByName, - style: Theme.of(context).textTheme.headline6, + style: Theme.of(context).textTheme.headline6, suffixIcon: Icon(Icons.search_rounded), - onChange: (value){ + onChange: (value) { _searchableList.clear(); - _searchableList.addAll(_hospitalsProvider.hospitals.where( - (element) => element.name.toLowerCase().contains( - value.toLowerCase() - ) - ).toList()); + _searchableList.addAll(_hospitalsProvider.hospitals.where((element) => element.name.toLowerCase().contains(value.toLowerCase())).toList()); setState(() {}); }, ), ), Expanded( - child: _searchableList.isEmpty ? - NoItemFound(message: _subtitle.noHospitalFound,): - ListView.builder( - padding: EdgeInsets.zero, - shrinkWrap: true, - itemCount: _searchableList.length, - itemBuilder: (listContext,itemIndex){ - return HospitalItem( - hospital: _searchableList[itemIndex], - onPressed: (hospital){ - Navigator.of(context).pop(hospital); - }, - ); - }, - ), + child: _searchableList.isEmpty + ? NoItemFound( + message: _subtitle.noHospitalFound, + ) + : ListView.builder( + padding: EdgeInsets.zero, + shrinkWrap: true, + itemCount: _searchableList.length, + itemBuilder: (listContext, itemIndex) { + return HospitalItem( + hospital: _searchableList[itemIndex], + onPressed: (hospital) { + Navigator.of(context).pop(hospital); + }, + ); + }, + ), ), ], ), diff --git a/lib/views/widgets/images/image_item.dart b/lib/views/widgets/images/image_item.dart index 5e2412a..5d2dee9 100644 --- a/lib/views/widgets/images/image_item.dart +++ b/lib/views/widgets/images/image_item.dart @@ -3,17 +3,13 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/loaders/image_loader.dart'; + class ImageItem extends StatelessWidget { final String url; final bool isVideo; final VoidCallback onPressed; - const ImageItem({ - Key key, - this.url, - this.isVideo = false, - this.onPressed - }) : super(key: key); + const ImageItem({Key key, this.url, this.isVideo = false, this.onPressed}) : super(key: key); @override Widget build(BuildContext context) { @@ -24,11 +20,11 @@ class ImageItem extends StatelessWidget { horizontal: 4 * AppStyle.getScaleFactor(context), ), decoration: BoxDecoration( - border: Border.all( - color: Theme.of(context).dividerColor, - width: 2 * AppStyle.getScaleFactor(context), - ), - borderRadius: BorderRadius.circular(8 * AppStyle.getScaleFactor(context)), + border: Border.all( + color: Theme.of(context).dividerColor, + width: 2 * AppStyle.getScaleFactor(context), + ), + borderRadius: BorderRadius.circular(8 * AppStyle.getScaleFactor(context)), ), child: ClipRRect( borderRadius: BorderRadius.circular(6 * AppStyle.getScaleFactor(context)), @@ -36,26 +32,27 @@ class ImageItem extends StatelessWidget { fit: StackFit.expand, alignment: Alignment.center, children: [ - ImageLoader(url: url,), + ImageLoader( + url: url, + ), MaterialButton( onPressed: onPressed, padding: EdgeInsets.zero, child: Visibility( - visible: isVideo, - child: Center( - child: Container( - decoration: BoxDecoration( - color: Colors.black45, - shape: BoxShape.circle, - ), - child: FaIcon( - FontAwesomeIcons.playCircle, - size: 32 * AppStyle.getScaleFactor(context), - color: AColors.orange, + visible: isVideo, + child: Center( + child: Container( + decoration: BoxDecoration( + color: Colors.black45, + shape: BoxShape.circle, + ), + child: FaIcon( + FontAwesomeIcons.playCircle, + size: 32 * AppStyle.getScaleFactor(context), + color: AColors.orange, + ), ), - ), - ) - ), + )), ), ], ), diff --git a/lib/views/widgets/images/images_list.dart b/lib/views/widgets/images/images_list.dart index df2bdb0..f130f6d 100644 --- a/lib/views/widgets/images/images_list.dart +++ b/lib/views/widgets/images/images_list.dart @@ -3,6 +3,7 @@ import 'package:test_sa/views/app_style/sizing.dart'; import 'image_item.dart'; import 'images_viewer.dart'; + class ImagesList extends StatelessWidget { final List images; final EdgeInsets padding; @@ -12,22 +13,20 @@ class ImagesList extends StatelessWidget { @override Widget build(BuildContext context) { return ListView.builder( - padding: padding?? EdgeInsets.symmetric(horizontal: 32 * AppStyle.getScaleFactor(context)), - scrollDirection: Axis.horizontal, - itemCount: images.length, - itemBuilder: (context,itemIndex){ - return ImageItem( - url: images[itemIndex], - onPressed: (){ - Navigator.of(context).push( - MaterialPageRoute(builder: (_)=> ImagesViewer( - initialIndex: itemIndex, - images: images, - )) - ); - }, - ); - } - ); + padding: padding ?? EdgeInsets.symmetric(horizontal: 32 * AppStyle.getScaleFactor(context)), + scrollDirection: Axis.horizontal, + itemCount: images.length, + itemBuilder: (context, itemIndex) { + return ImageItem( + url: images[itemIndex], + onPressed: () { + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => ImagesViewer( + initialIndex: itemIndex, + images: images, + ))); + }, + ); + }); } } diff --git a/lib/views/widgets/images/images_viewer.dart b/lib/views/widgets/images/images_viewer.dart index 865f030..b4becc0 100644 --- a/lib/views/widgets/images/images_viewer.dart +++ b/lib/views/widgets/images/images_viewer.dart @@ -20,53 +20,60 @@ class ImagesViewer extends StatelessWidget { child: SafeArea( child: Column( children: [ - images.length == 1 ? SizedBox.shrink() : - Column( - children: [ - SizedBox(height: 8 * AppStyle.getScaleFactor(context),), - TabBar( - isScrollable: images.length * 84 > MediaQuery.of(context).size.width, - indicator: BoxDecoration( - color: Theme.of(context).primaryColor, - borderRadius: BorderRadius.only( - topRight: Radius.circular(24 * AppStyle.getScaleFactor(context)), - bottomLeft: Radius.circular(24 * AppStyle.getScaleFactor(context)), - ), - ), - indicatorSize: TabBarIndicatorSize.label, - tabs: images.map( - (imagePath) => InteractiveViewer( - child: Container( - height: 60, - width: 80, - padding: EdgeInsets.all(AppStyle.getScaleFactor(context),), - child: ClipRRect( - borderRadius: BorderRadius.only( - topRight: Radius.circular(22 * AppStyle.getScaleFactor(context)), - bottomLeft: Radius.circular(22 * AppStyle.getScaleFactor(context)), - ), - child: ImageLoader( - url: imagePath, - boxFit: BoxFit.cover, - ), + images.length == 1 + ? SizedBox.shrink() + : Column( + children: [ + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), + TabBar( + isScrollable: images.length * 84 > MediaQuery.of(context).size.width, + indicator: BoxDecoration( + color: Theme.of(context).primaryColor, + borderRadius: BorderRadius.only( + topRight: Radius.circular(24 * AppStyle.getScaleFactor(context)), + bottomLeft: Radius.circular(24 * AppStyle.getScaleFactor(context)), ), ), - ) - ).toList(), - ), - SizedBox(height: 8 * AppStyle.getScaleFactor(context),), - ], - ), + indicatorSize: TabBarIndicatorSize.label, + tabs: images + .map((imagePath) => InteractiveViewer( + child: Container( + height: 60, + width: 80, + padding: EdgeInsets.all( + AppStyle.getScaleFactor(context), + ), + child: ClipRRect( + borderRadius: BorderRadius.only( + topRight: Radius.circular(22 * AppStyle.getScaleFactor(context)), + bottomLeft: Radius.circular(22 * AppStyle.getScaleFactor(context)), + ), + child: ImageLoader( + url: imagePath, + boxFit: BoxFit.cover, + ), + ), + ), + )) + .toList(), + ), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), + ], + ), Expanded( child: TabBarView( - children: images.map( - (imagePath) => InteractiveViewer( - child: ImageLoader( - url: imagePath, - boxFit: BoxFit.contain, - ), - ) - ).toList(), + children: images + .map((imagePath) => InteractiveViewer( + child: ImageLoader( + url: imagePath, + boxFit: BoxFit.contain, + ), + )) + .toList(), ), ), ], diff --git a/lib/views/widgets/images/mini_one_image_picker.dart b/lib/views/widgets/images/mini_one_image_picker.dart index 710e960..13c8f42 100644 --- a/lib/views/widgets/images/mini_one_image_picker.dart +++ b/lib/views/widgets/images/mini_one_image_picker.dart @@ -12,7 +12,7 @@ class AMiniOneImagePicker extends StatefulWidget { final File image; final String label; final bool error; - const AMiniOneImagePicker({Key key, this.label, this.error,this.image, this.onPick}) : super(key: key); + const AMiniOneImagePicker({Key key, this.label, this.error, this.image, this.onPick}) : super(key: key); @override _AMiniOneImagePickerState createState() => _AMiniOneImagePickerState(); @@ -26,6 +26,7 @@ class _AMiniOneImagePickerState extends State { super.initState(); _image = widget.image; } + @override Widget build(BuildContext context) { _subtitle = AppLocalization.of(context).subtitle; @@ -33,12 +34,14 @@ class _AMiniOneImagePickerState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Visibility( - visible: widget.label != null, + visible: widget.label != null, child: Column( children: [ - SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), Text( - widget.label?? '', + widget.label ?? '', style: Theme.of(context).textTheme.headline6, textScaleFactor: AppStyle.getScaleFactor(context), ), @@ -49,32 +52,29 @@ class _AMiniOneImagePickerState extends State { visible: _image == null && widget.error == true, child: Column( children: [ - SizedBox(height: 4,), + SizedBox( + height: 4, + ), Text( _subtitle.requiredImage, - style: Theme.of(context).textTheme.headline6.copyWith( - color: Colors.red - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: Colors.red), textScaleFactor: AppStyle.getScaleFactor(context), ), ], ), ), - SizedBox(height: 8,), + SizedBox( + height: 8, + ), Container( width: MediaQuery.of(context).size.width, child: ElevatedButton( style: ElevatedButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - AppStyle.borderRadius * AppStyle.getScaleFactor(context) - ) - ), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context))), //primary: Colors.grey[200], textStyle: Theme.of(context).textTheme.overline, padding: _image == null ? null : EdgeInsets.zero, ), - child: Padding( padding: const EdgeInsets.all(8.0), child: Text( @@ -86,40 +86,30 @@ class _AMiniOneImagePickerState extends State { ImageSource source = await showDialog( context: context, builder: (_) => CupertinoAlertDialog( - actions: [ - TextButton( - child: Text("pick from camera"), - onPressed: () { - Navigator.of(context).pop(ImageSource.camera); - }, - ), - TextButton( - child: Text("pick from gallery"), - onPressed: () { - Navigator.of(context).pop(ImageSource.gallery); - }, - ), - ], - ) - ); - if(source == null) - return; - - final pickedFile = await ImagePicker().pickImage( - source: source, - imageQuality: 70, - maxWidth: 1000, - maxHeight: 1000 - ); + actions: [ + TextButton( + child: Text("pick from camera"), + onPressed: () { + Navigator.of(context).pop(ImageSource.camera); + }, + ), + TextButton( + child: Text("pick from gallery"), + onPressed: () { + Navigator.of(context).pop(ImageSource.gallery); + }, + ), + ], + )); + if (source == null) return; + final pickedFile = await ImagePicker().pickImage(source: source, imageQuality: 70, maxWidth: 1000, maxHeight: 1000); setState(() { if (pickedFile != null) { _image = File(pickedFile.path); widget.onPick(_image); - } else { - - } + } else {} }); }, ), @@ -127,4 +117,4 @@ class _AMiniOneImagePickerState extends State { ], ); } -} \ No newline at end of file +} diff --git a/lib/views/widgets/images/multi_image_picker_item.dart b/lib/views/widgets/images/multi_image_picker_item.dart index be1d1b1..e540cc2 100644 --- a/lib/views/widgets/images/multi_image_picker_item.dart +++ b/lib/views/widgets/images/multi_image_picker_item.dart @@ -5,9 +5,7 @@ import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; - class MultiImagesPickerItem extends StatelessWidget { - final File image; final Function(File) onRemoveTap; @@ -18,58 +16,43 @@ class MultiImagesPickerItem extends StatelessWidget { return Container( width: 80 * AppStyle.getScaleFactor(context), height: 80 * AppStyle.getScaleFactor(context), - decoration: BoxDecoration( - boxShadow: [ - BoxShadow( - color: Colors.black38, - blurRadius: 2 - ) - ], - image: DecorationImage( - image:FileImage(image), - fit: BoxFit.cover - ), - borderRadius: BorderRadius.circular(8) - ), + decoration: + BoxDecoration(boxShadow: [BoxShadow(color: Colors.black38, blurRadius: 2)], image: DecorationImage(image: FileImage(image), fit: BoxFit.cover), borderRadius: BorderRadius.circular(8)), child: MaterialButton( padding: EdgeInsets.zero, - onPressed: (){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_)=> Scaffold( + onPressed: () { + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => Scaffold( body: SafeArea( child: Stack( children: [ Center( child: InteractiveViewer( - child: Image(image:FileImage(image),) - ), + child: Image( + image: FileImage(image), + )), ), ABackButton(), ], ), ), - ) - ) - ); + ))); }, child: Align( - alignment: Alignment.topRight, - child: IconButton( + alignment: Alignment.topRight, + child: IconButton( padding: const EdgeInsets.all(2.0), icon: Container( padding: EdgeInsets.all(1), - decoration: BoxDecoration( - color: Theme.of(context).scaffoldBackgroundColor.withOpacity(.3), - borderRadius: BorderRadius.circular(8) - ), - child: Icon(Icons.remove_circle,color: AColors.red,) - ), - onPressed: (){ + decoration: BoxDecoration(color: Theme.of(context).scaffoldBackgroundColor.withOpacity(.3), borderRadius: BorderRadius.circular(8)), + child: Icon( + Icons.remove_circle, + color: AColors.red, + )), + onPressed: () { onRemoveTap(image); }, - ) - ), + )), ), ); } diff --git a/lib/views/widgets/images/one_image_picker.dart b/lib/views/widgets/images/one_image_picker.dart index 3ff3ebb..08647cb 100644 --- a/lib/views/widgets/images/one_image_picker.dart +++ b/lib/views/widgets/images/one_image_picker.dart @@ -12,7 +12,7 @@ class AOneImagePicker extends StatefulWidget { final File image; final String label; final bool error; - const AOneImagePicker({Key key, this.label, this.error,this.image, this.onPick}) : super(key: key); + const AOneImagePicker({Key key, this.label, this.error, this.image, this.onPick}) : super(key: key); @override _AOneImagePickerState createState() => _AOneImagePickerState(); @@ -26,6 +26,7 @@ class _AOneImagePickerState extends State { super.initState(); _image = widget.image; } + @override Widget build(BuildContext context) { _subtitle = AppLocalization.of(context).subtitle; @@ -33,12 +34,14 @@ class _AOneImagePickerState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Visibility( - visible: widget.label != null, + visible: widget.label != null, child: Column( children: [ - SizedBox(height: 8 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), Text( - widget.label?? '', + widget.label ?? '', style: Theme.of(context).textTheme.headline6, textScaleFactor: AppStyle.getScaleFactor(context), ), @@ -49,79 +52,66 @@ class _AOneImagePickerState extends State { visible: _image == null && widget.error == true, child: Column( children: [ - SizedBox(height: 4,), + SizedBox( + height: 4, + ), Text( _subtitle.requiredImage, - style: Theme.of(context).textTheme.headline6.copyWith( - color: Colors.red - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: Colors.red), textScaleFactor: AppStyle.getScaleFactor(context), ), ], ), ), - SizedBox(height: 8,), + SizedBox( + height: 8, + ), Container( height: MediaQuery.of(context).size.height / 8, width: MediaQuery.of(context).size.width, child: ElevatedButton( style: ElevatedButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - AppStyle.borderRadius * AppStyle.getScaleFactor(context) - ) - ), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context))), primary: Colors.grey[200], padding: _image == null ? null : EdgeInsets.zero, ), - - child: _image == null ? - Text( - _subtitle.pickImage, - style: Theme.of(context).textTheme.headline6, - textScaleFactor: AppStyle.getScaleFactor(context), - ): - ClipRRect( - borderRadius: BorderRadius.circular( - AppStyle.borderRadius * AppStyle.getScaleFactor(context) - ), - child: Image( - height: MediaQuery.of(context).size.height / 6, - width: MediaQuery.of(context).size.width, - image: FileImage(_image), - fit: BoxFit.cover, - ), - ), + child: _image == null + ? Text( + _subtitle.pickImage, + style: Theme.of(context).textTheme.headline6, + textScaleFactor: AppStyle.getScaleFactor(context), + ) + : ClipRRect( + borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), + child: Image( + height: MediaQuery.of(context).size.height / 6, + width: MediaQuery.of(context).size.width, + image: FileImage(_image), + fit: BoxFit.cover, + ), + ), onPressed: () async { ImageSource source = await showDialog( context: context, builder: (_) => CupertinoAlertDialog( - actions: [ - TextButton( - child: Text("pick from camera"), - onPressed: () { - Navigator.of(context).pop(ImageSource.camera); - }, - ), - TextButton( - child: Text("pick from gallery"), - onPressed: () { - Navigator.of(context).pop(ImageSource.gallery); - }, - ), - ], - ) - ); - if(source == null) - return; - - final pickedFile = await ImagePicker().pickImage( - source: source, - imageQuality: 70, - maxWidth: 1000, - maxHeight: 1000 - ); + actions: [ + TextButton( + child: Text("pick from camera"), + onPressed: () { + Navigator.of(context).pop(ImageSource.camera); + }, + ), + TextButton( + child: Text("pick from gallery"), + onPressed: () { + Navigator.of(context).pop(ImageSource.gallery); + }, + ), + ], + )); + if (source == null) return; + final pickedFile = await ImagePicker().pickImage(source: source, imageQuality: 70, maxWidth: 1000, maxHeight: 1000); setState(() { if (pickedFile != null) { @@ -135,4 +125,4 @@ class _AOneImagePickerState extends State { ], ); } -} \ No newline at end of file +} diff --git a/lib/views/widgets/issues/report_issue_item.dart b/lib/views/widgets/issues/report_issue_item.dart index 8a952be..8aba4e9 100644 --- a/lib/views/widgets/issues/report_issue_item.dart +++ b/lib/views/widgets/issues/report_issue_item.dart @@ -1,25 +1,21 @@ import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class ReportIssueItem extends StatelessWidget { final bool isSelected; final String issueInfo; - final Function(String,bool) onChange; + final Function(String, bool) onChange; - const ReportIssueItem({ - Key key, - this.isSelected, - this.issueInfo, - this.onChange - }) : super(key: key); + const ReportIssueItem({Key key, this.isSelected, this.issueInfo, this.onChange}) : super(key: key); @override Widget build(BuildContext context) { return MaterialButton( splashColor: AColors.secondaryColor.withOpacity(.5), padding: EdgeInsets.symmetric(vertical: 4), - onPressed: (){ - onChange(issueInfo,!isSelected); + onPressed: () { + onChange(issueInfo, !isSelected); }, child: Column( children: [ @@ -36,14 +32,11 @@ class ReportIssueItem extends StatelessWidget { ), ), Padding( - padding: const EdgeInsets.symmetric( - horizontal: 16, - vertical: 8 - ), + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), child: Checkbox( value: isSelected, - onChanged: (value){ - onChange(issueInfo,value); + onChanged: (value) { + onChange(issueInfo, value); }, ), ), diff --git a/lib/views/widgets/loaders/app_lazy_loading.dart b/lib/views/widgets/loaders/app_lazy_loading.dart index e3378c9..a52417e 100644 --- a/lib/views/widgets/loaders/app_lazy_loading.dart +++ b/lib/views/widgets/loaders/app_lazy_loading.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'app_loading.dart'; + class ALazyLoading extends StatelessWidget { @override Widget build(BuildContext context) { @@ -10,13 +11,7 @@ class ALazyLoading extends StatelessWidget { height: 36 * AppStyle.getScaleFactor(context), width: 36 * AppStyle.getScaleFactor(context), padding: EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.white, - shape: BoxShape.circle, - boxShadow: [ - AppStyle.boxShadow - ] - ), + decoration: BoxDecoration(color: Colors.white, shape: BoxShape.circle, boxShadow: [AppStyle.boxShadow]), child: ALoading(), ), ); diff --git a/lib/views/widgets/loaders/app_loading.dart b/lib/views/widgets/loaders/app_loading.dart index 7162305..267313c 100644 --- a/lib/views/widgets/loaders/app_loading.dart +++ b/lib/views/widgets/loaders/app_loading.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; + class ALoading extends StatelessWidget { const ALoading({Key key}) : super(key: key); diff --git a/lib/views/widgets/loaders/failed_loading.dart b/lib/views/widgets/loaders/failed_loading.dart index 5039628..dc8f39b 100644 --- a/lib/views/widgets/loaders/failed_loading.dart +++ b/lib/views/widgets/loaders/failed_loading.dart @@ -1,15 +1,11 @@ - import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class FailedLoading extends StatelessWidget { final String message; final VoidCallback onReload; - const FailedLoading({ - Key key, - this.message, - this.onReload - }) : super(key: key); + const FailedLoading({Key key, this.message, this.onReload}) : super(key: key); @override Widget build(BuildContext context) { return Center( @@ -17,11 +13,13 @@ class FailedLoading extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ Text( - message?? "Error Request Failed", + message ?? "Error Request Failed", style: Theme.of(context).textTheme.subtitle1, textScaleFactor: AppStyle.getScaleFactor(context), ), - SizedBox(height: 16,), + SizedBox( + height: 16, + ), OutlinedButton( child: Text("try again"), onPressed: onReload, diff --git a/lib/views/widgets/loaders/image_loader.dart b/lib/views/widgets/loaders/image_loader.dart index 7550de1..7093d0a 100644 --- a/lib/views/widgets/loaders/image_loader.dart +++ b/lib/views/widgets/loaders/image_loader.dart @@ -1,17 +1,12 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; + class ImageLoader extends StatelessWidget { final String url; final BoxFit boxFit; final Color color; final Alignment alignment; - const ImageLoader({ - Key key, - @required this.url, - this.boxFit, - this.color, - this.alignment - }) : super(key: key); + const ImageLoader({Key key, @required this.url, this.boxFit, this.color, this.alignment}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/views/widgets/loaders/lazy_loading.dart b/lib/views/widgets/loaders/lazy_loading.dart index f59871e..04f430c 100644 --- a/lib/views/widgets/loaders/lazy_loading.dart +++ b/lib/views/widgets/loaders/lazy_loading.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'app_loading.dart'; + class LazyLoading extends StatefulWidget { final Widget child; final bool nextPage; @@ -21,7 +22,6 @@ class LazyLoading extends StatefulWidget { } class _LazyLoadingState extends State with TickerProviderStateMixin { - AnimationController _animationController; Animation _offsetAnimation; @@ -30,7 +30,7 @@ class _LazyLoadingState extends State with TickerProviderStateMixin //_animationController.forward(); await widget.onLazyLoad(); await Future.delayed(Duration(milliseconds: 600)); - // _animationController.reverse(); + // _animationController.reverse(); } } @@ -43,13 +43,12 @@ class _LazyLoadingState extends State with TickerProviderStateMixin ); _offsetAnimation = Tween( - begin: const Offset(0.0, .8), + begin: const Offset(0.0, .8), end: const Offset(0, .4), ).animate(CurvedAnimation( parent: _animationController, curve: Curves.easeInOutBack, )); - } @override @@ -64,13 +63,12 @@ class _LazyLoadingState extends State with TickerProviderStateMixin children: [ NotificationListener( onNotification: (notification) { - if(notification.metrics.pixels >= notification.metrics.maxScrollExtent){ + if (notification.metrics.pixels >= notification.metrics.maxScrollExtent) { _scrollListener(); } return false; }, - child: widget.child - ), + child: widget.child), SlideTransition( position: _offsetAnimation, child: Center( @@ -80,13 +78,7 @@ class _LazyLoadingState extends State with TickerProviderStateMixin height: 36 * AppStyle.getScaleFactor(context), width: 36 * AppStyle.getScaleFactor(context), padding: EdgeInsets.all(8), - decoration: BoxDecoration( - color: Colors.white, - shape: BoxShape.circle, - boxShadow: [ - AppStyle.boxShadow - ] - ), + decoration: BoxDecoration(color: Colors.white, shape: BoxShape.circle, boxShadow: [AppStyle.boxShadow]), child: ALoading(), ), ), diff --git a/lib/views/widgets/loaders/loading_manager.dart b/lib/views/widgets/loaders/loading_manager.dart index d2a5273..7ab67a6 100644 --- a/lib/views/widgets/loaders/loading_manager.dart +++ b/lib/views/widgets/loaders/loading_manager.dart @@ -5,6 +5,7 @@ import 'package:test_sa/models/subtitle.dart'; import 'app_loading.dart'; import 'failed_loading.dart'; + class LoadingManager extends StatefulWidget { final bool isLoading; final bool isFailedLoading; @@ -32,10 +33,9 @@ class LoadingManager extends StatefulWidget { } class _LoadingManagerState extends State { - @override void initState() { - if(widget.onRefresh != null && widget.stateCode == null){ + if (widget.onRefresh != null && widget.stateCode == null) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) { widget.onRefresh(); }); @@ -48,7 +48,7 @@ class _LoadingManagerState extends State { Subtitle subtitle = AppLocalization.of(context).subtitle; Widget placeHolder; // to load data if load not start - if(widget.isLoading != true && widget.stateCode == null){ + if (widget.isLoading != true && widget.stateCode == null) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) { widget.onRefresh(); }); @@ -56,20 +56,19 @@ class _LoadingManagerState extends State { // if loading of still not start in loading (true or null) // return loading widget - if(widget.isLoading != false || widget.stateCode == null){ + if (widget.isLoading != false || widget.stateCode == null) { placeHolder = ALoading(); - }else if(widget.isFailedLoading && !widget.isNotPage){ + } else if (widget.isFailedLoading && !widget.isNotPage) { // if failed return failed widget placeHolder = FailedLoading( - message: HttpStatusManger.getStatusMessage( - status: widget.stateCode, subtitle: subtitle), + message: HttpStatusManger.getStatusMessage(status: widget.stateCode, subtitle: subtitle), onReload: widget.onRefresh, ); } // if load end successfully return loaded widget return RefreshIndicator( - onRefresh: () async{ + onRefresh: () async { await widget.onRefresh(); }, child: AnimatedSwitcher( diff --git a/lib/views/widgets/loaders/no_item_found.dart b/lib/views/widgets/loaders/no_item_found.dart index 5ed637e..3466f7e 100644 --- a/lib/views/widgets/loaders/no_item_found.dart +++ b/lib/views/widgets/loaders/no_item_found.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class NoItemFound extends StatelessWidget { final String message; @@ -14,7 +15,7 @@ class NoItemFound extends StatelessWidget { children: [ Center( child: Text( - message ?? "no item found", + message ?? "no item found", style: Theme.of(context).textTheme.headline6, textScaleFactor: AppStyle.getScaleFactor(context), ), diff --git a/lib/views/widgets/notifications/notification_item.dart b/lib/views/widgets/notifications/notification_item.dart index f505b5d..c548f62 100644 --- a/lib/views/widgets/notifications/notification_item.dart +++ b/lib/views/widgets/notifications/notification_item.dart @@ -3,32 +3,28 @@ import 'package:flutter/material.dart'; import 'package:test_sa/models/app_notification.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class NotificationItem extends StatelessWidget { final AppNotification notification; final Function(AppNotification) onPressed; const NotificationItem({Key key, this.notification, this.onPressed}) : super(key: key); - @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.symmetric(vertical: 4), child: ElevatedButton( style: ElevatedButton.styleFrom( - padding: EdgeInsets.symmetric(vertical: 8,horizontal: 8), + padding: EdgeInsets.symmetric(vertical: 8, horizontal: 8), primary: AColors.primaryColor, shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - AppStyle.getBorderRadius(context) - ), + borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), ), ), - - onPressed: (){ + onPressed: () { onPressed(notification); }, - - child:Column( + child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( @@ -36,30 +32,24 @@ class NotificationItem extends StatelessWidget { Expanded( child: Text( notification.title ?? "No Hospital Found", - style: Theme.of(context).textTheme.headline6.copyWith( - color: AColors.white, - fontSize: 16, - fontWeight: FontWeight.bold - ), + style: Theme.of(context).textTheme.headline6.copyWith(color: AColors.white, fontSize: 16, fontWeight: FontWeight.bold), ), ), Text( notification.date ?? "complaint not available", - style: Theme.of(context).textTheme.subtitle1.copyWith( - color: AColors.white, - fontSize: 12, - fontWeight: FontWeight.bold - ), + style: Theme.of(context).textTheme.subtitle1.copyWith(color: AColors.white, fontSize: 12, fontWeight: FontWeight.bold), ), ], ), - Divider(color: AColors.white,), + Divider( + color: AColors.white, + ), Text( notification.description ?? "complaint not available", style: Theme.of(context).textTheme.subtitle1.copyWith( - color: AColors.white, - fontSize: 14, - ), + color: AColors.white, + fontSize: 14, + ), ), ], ), diff --git a/lib/views/widgets/parts/auto_complete_parts_field.dart b/lib/views/widgets/parts/auto_complete_parts_field.dart index 025b6e1..d499b81 100644 --- a/lib/views/widgets/parts/auto_complete_parts_field.dart +++ b/lib/views/widgets/parts/auto_complete_parts_field.dart @@ -8,6 +8,7 @@ import 'package:test_sa/models/part.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; + class AutoCompletePartsField extends StatefulWidget { final String initialValue; final bool clearAfterPick; @@ -20,7 +21,6 @@ class AutoCompletePartsField extends StatefulWidget { } class _AutoCompletePartsFieldState extends State { - SettingProvider _settingProvider; PartsProvider _partsProvider; UserProvider _userProvider; @@ -37,6 +37,7 @@ class _AutoCompletePartsFieldState extends State { _controller.dispose(); super.dispose(); } + @override Widget build(BuildContext context) { _settingProvider = Provider.of(context); @@ -44,22 +45,15 @@ class _AutoCompletePartsFieldState extends State { _partsProvider = Provider.of(context); //Subtitle _subtitle = AppLocalization.of(context).subtitle; return Container( - padding: const EdgeInsets.symmetric( - horizontal: 16 - ), + padding: const EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( color: Colors.white, - border: Border.all(color:AColors.black), - borderRadius: BorderRadius.circular( - AppStyle.borderRadius * AppStyle.getScaleFactor(context) - ), - boxShadow: const [ - AppStyle.boxShadow - ] - ), + border: Border.all(color: AColors.black), + borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), + boxShadow: const [AppStyle.boxShadow]), child: TypeAheadField( textFieldConfiguration: TextFieldConfiguration( - style: Theme.of(context).textTheme.subtitle1, + style: Theme.of(context).textTheme.subtitle1, controller: _controller, textAlign: TextAlign.center, decoration: const InputDecoration( @@ -71,21 +65,21 @@ class _AutoCompletePartsFieldState extends State { textInputAction: TextInputAction.search, ), suggestionsCallback: (vale) async { - return await _partsProvider.getPartsList( - host: _settingProvider.host, - title: vale - ); + return await _partsProvider.getPartsList(host: _settingProvider.host, title: vale); }, itemBuilder: (context, part) { return ListTile( title: Text(part.code), - subtitle: Text(part.name, style: Theme.of(context).textTheme.caption,), + subtitle: Text( + part.name, + style: Theme.of(context).textTheme.caption, + ), ); }, onSuggestionSelected: (part) { - if(widget.clearAfterPick){ + if (widget.clearAfterPick) { _controller.clear(); - } else{ + } else { _controller.text = part.code; } widget.onPick(part); diff --git a/lib/views/widgets/parts/part_item.dart b/lib/views/widgets/parts/part_item.dart index a82809b..63d411e 100644 --- a/lib/views/widgets/parts/part_item.dart +++ b/lib/views/widgets/parts/part_item.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:test_sa/models/part.dart'; import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button2.dart'; -class PartItem extends StatefulWidget { +class PartItem extends StatefulWidget { final Part part; final Function(Part) onDelete; @@ -24,22 +24,20 @@ class _PartItemState extends State { children: [ Expanded( child: Column( - crossAxisAlignment: CrossAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Expanded( - child: Text(widget.part.code, - style: Theme.of(context).textTheme.bodyText1.copyWith( - fontSize: 12, - fontWeight: FontWeight.bold - ), + child: Text( + widget.part.code, + style: Theme.of(context).textTheme.bodyText1.copyWith(fontSize: 12, fontWeight: FontWeight.bold), ), ), AIconButton2( iconData: Icons.add, color: Theme.of(context).primaryColor, - onPressed: (){ + onPressed: () { widget.part.quantity++; setState(() {}); }, @@ -47,41 +45,45 @@ class _PartItemState extends State { AIconButton2( iconData: Icons.remove, color: Theme.of(context).primaryColor, - onPressed: widget.part.quantity < 2 ? null : (){ - widget.part.quantity--; - setState(() {}); - }, + onPressed: widget.part.quantity < 2 + ? null + : () { + widget.part.quantity--; + setState(() {}); + }, + ), + SizedBox( + width: 8 * AppStyle.getScaleFactor(context), ), - SizedBox(width: 8*AppStyle.getScaleFactor(context),), - Text(widget.part.quantity.toString(), + Text( + widget.part.quantity.toString(), style: Theme.of(context).textTheme.headline6.copyWith( //fontSize: 12, //fontWeight: FontWeight.bold - ), + ), + ), + SizedBox( + width: 8 * AppStyle.getScaleFactor(context), ), - SizedBox(width: 8*AppStyle.getScaleFactor(context),), ], ), - widget.part.name == null ? SizedBox.shrink() : - Text(widget.part.name, - style: Theme.of(context).textTheme.caption.copyWith( - fontSize: 11, - fontWeight: FontWeight.bold - ), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), + widget.part.name == null + ? SizedBox.shrink() + : Text( + widget.part.name, + style: Theme.of(context).textTheme.caption.copyWith(fontSize: 11, fontWeight: FontWeight.bold), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), ], )), AIconButton2( iconData: Icons.close, color: Colors.red, - onPressed: (){ + onPressed: () { widget.onDelete(widget.part); }, ), - - ], ), ], diff --git a/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart b/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart index bf18fd6..0691e45 100644 --- a/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart +++ b/lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart @@ -8,6 +8,7 @@ import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class AutoCompleteDeviceNumberField extends StatefulWidget { final Lookup initialValue; final int hospitalId; @@ -20,7 +21,6 @@ class AutoCompleteDeviceNumberField extends StatefulWidget { } class _AutoCompleteDeviceNumberFieldState extends State { - SettingProvider _settingProvider; DevicesProvider _devicesProvider; UserProvider _userProvider; @@ -37,6 +37,7 @@ class _AutoCompleteDeviceNumberFieldState extends State(context); @@ -44,38 +45,31 @@ class _AutoCompleteDeviceNumberFieldState extends State(context); //Subtitle _subtitle = AppLocalization.of(context).subtitle; return Container( - padding: const EdgeInsets.symmetric( - horizontal: 16 - ), + padding: const EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( color: Colors.white, - border: Border.all(color:AColors.black), - borderRadius: BorderRadius.circular( - AppStyle.borderRadius * AppStyle.getScaleFactor(context) - ), - boxShadow: const [ - AppStyle.boxShadow - ] - ), + border: Border.all(color: AColors.black), + borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), + boxShadow: const [AppStyle.boxShadow]), child: TypeAheadField( textFieldConfiguration: TextFieldConfiguration( - style: Theme.of(context).textTheme.headline6, - controller: _controller, - textAlign: TextAlign.center, - decoration: const InputDecoration( - border: InputBorder.none, - disabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - enabledBorder: InputBorder.none, - ), - textInputAction: TextInputAction.search, + style: Theme.of(context).textTheme.headline6, + controller: _controller, + textAlign: TextAlign.center, + decoration: const InputDecoration( + border: InputBorder.none, + disabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + ), + textInputAction: TextInputAction.search, ), suggestionsCallback: (vale) async { return await _devicesProvider.getDevicesList( - host: _settingProvider.host, - user: _userProvider.user, - hospitalId: widget.hospitalId, - number: vale, + host: _settingProvider.host, + user: _userProvider.user, + hospitalId: widget.hospitalId, + number: vale, ); }, itemBuilder: (context, device) { @@ -86,7 +80,7 @@ class _AutoCompleteDeviceNumberFieldState extends State { final userProvider = Provider.of(context); return ListView( padding: EdgeInsets.only( - top: 12 * AppStyle.getScaleFactor(context), - left: 12 * AppStyle.getScaleFactor(context), - right: 12 * AppStyle.getScaleFactor(context), - bottom: 80 * AppStyle.getScaleFactor(context) - ), + top: 12 * AppStyle.getScaleFactor(context), left: 12 * AppStyle.getScaleFactor(context), right: 12 * AppStyle.getScaleFactor(context), bottom: 80 * AppStyle.getScaleFactor(context)), shrinkWrap: true, physics: const ClampingScrollPhysics(), children: [ - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("PPM Visit Status"), - if(widget.enableValidate && widget.model.ppmVisitStatus == null) - ASubTitle(subtitle.requiredWord,color: Colors.red,), - const SizedBox(height: 4,), + if (widget.enableValidate && widget.model.ppmVisitStatus == null) + ASubTitle( + subtitle.requiredWord, + color: Colors.red, + ), + const SizedBox( + height: 4, + ), PentryVisitsStatusMenu( initialValue: widget.model.ppmVisitStatus, - onSelect: (status){ + onSelect: (status) { widget.model.ppmVisitStatus = status; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Timer"), - if(widget.enableValidate && widget.model?.timer?.endAt == null) - ASubTitle(subtitle.requiredWord,color: Colors.red,), - const SizedBox(height: 4,), + if (widget.enableValidate && widget.model?.timer?.endAt == null) + ASubTitle( + subtitle.requiredWord, + color: Colors.red, + ), + const SizedBox( + height: 4, + ), AppTimer( timer: widget.model.timer, - onChange: (timer) async{ + onChange: (timer) async { widget.model.timer = timer; return true; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), // const ASubTitle("Status"), // // if(widget.enableValidate && widget.model.status == null) // // ASubTitle(subtitle.requiredWord,color: Colors.red,), @@ -74,78 +89,108 @@ class _PentryInfoFormState extends State { // widget.model.status = status; // }, // ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Actual Visit Date"), - if(widget.enableValidate && widget.model.actualVisitDate == null) - ASubTitle(subtitle.requiredWord,color: Colors.red,), - const SizedBox(height: 4,), + if (widget.enableValidate && widget.model.actualVisitDate == null) + ASubTitle( + subtitle.requiredWord, + color: Colors.red, + ), + const SizedBox( + height: 4, + ), ADatePicker( date: widget.model.actualVisitDate, from: DateTime.now().subtract(const Duration(days: 30)), - onDatePicker: (date){ - if(date == null) return; + onDatePicker: (date) { + if (date == null) return; widget.model.actualVisitDate = date; setState(() {}); }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Expected Visit Date"), - if(widget.enableValidate && widget.model.expectedVisitDate == null) - ASubTitle(subtitle.requiredWord,color: Colors.red,), - const SizedBox(height: 4,), + if (widget.enableValidate && widget.model.expectedVisitDate == null) + ASubTitle( + subtitle.requiredWord, + color: Colors.red, + ), + const SizedBox( + height: 4, + ), ADatePicker( date: widget.model.expectedVisitDate, from: DateTime.now().subtract(const Duration(days: 30)), - onDatePicker: (date){ - if(date == null) return; + onDatePicker: (date) { + if (date == null) return; widget.model.expectedVisitDate = date; setState(() {}); }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Traveling Hours"), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ATextFormField( initialValue: (widget.model.travelingHours ?? "").toString(), textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, textInputType: TextInputType.number, - onChange: (value){ + onChange: (value) { widget.model.travelingHours = value; }, ), - const SizedBox(height: 12,), + const SizedBox( + height: 12, + ), const ASubTitle("PPM Attachment"), AMiniOneImagePicker( //error: _validate && _serviceReport.image == null, image: widget.model.imageFile, - onPick: (image){ - widget.model.imageFile =image; + onPick: (image) { + widget.model.imageFile = image; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Nurse Signature"), ESignature( oldSignature: widget.model.signatureNurse, newSignature: widget.model.localNurseSignature, - onChange: (signature){ - if(signature == null || signature.isEmpty) {return;} + onChange: (signature) { + if (signature == null || signature.isEmpty) { + return; + } widget.model.localNurseSignature = signature; widget.model.signatureNurse = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Engineer Signature"), ESignature( oldSignature: widget.model.signatureEngineer, newSignature: widget.model.localNurseSignature, - onChange: (signature){ - if(signature == null || signature.isEmpty) {return;} + onChange: (signature) { + if (signature == null || signature.isEmpty) { + return; + } widget.model.localNurseSignature = signature; widget.model.signatureEngineer = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), ], ); } diff --git a/lib/views/widgets/pentry/pentry_pm_kit_form.dart b/lib/views/widgets/pentry/pentry_pm_kit_form.dart index c919446..f6ac9b1 100644 --- a/lib/views/widgets/pentry/pentry_pm_kit_form.dart +++ b/lib/views/widgets/pentry/pentry_pm_kit_form.dart @@ -7,11 +7,14 @@ import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/parts/auto_complete_parts_field.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; + class PentryPMKitForm extends StatefulWidget { final List models; final bool enableValidate; const PentryPMKitForm({ - Key key, this.models, this.enableValidate, + Key key, + this.models, + this.enableValidate, }) : super(key: key); @override @@ -19,135 +22,137 @@ class PentryPMKitForm extends StatefulWidget { } class _PentryPMKitFormState extends State { - @override Widget build(BuildContext context) { final subtitle = AppLocalization.of(context).subtitle; return ListView.builder( - padding: EdgeInsets.only( - top: 12 * AppStyle.getScaleFactor(context), - left: 12 * AppStyle.getScaleFactor(context), - right: 12 * AppStyle.getScaleFactor(context), - bottom: 80 * AppStyle.getScaleFactor(context) - ), - itemCount: widget.models.length + 1, - itemBuilder: (context,index){ - if(index == widget.models.length){ - return AButton( - text: subtitle.add, - onPressed: (){ - widget.models.add(PMKit()); - setState(() {}); - }, - ); - } - final model = widget.models[index]; - return ListView( - shrinkWrap: true, - physics: const ClampingScrollPhysics(), - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - ASubTitle("#${index+1}"), - if(index != 0) - ASmallButton( - color: Theme.of(context).colorScheme.error, - text: subtitle.delete, - onPressed: (){ - widget.models.remove(model); - setState(() {}); - }, - ), - ], - ), - const SizedBox(height: 8,), - const ASubTitle("Item Code"), - const SizedBox(height: 4,), - AutoCompletePartsField( - clearAfterPick: false, - initialValue: (model.itemCode?.name ?? "").toString(), - onPick: (part){ - model.itemCode = Lookup(id: part.id,name: part.code); + padding: EdgeInsets.only( + top: 12 * AppStyle.getScaleFactor(context), left: 12 * AppStyle.getScaleFactor(context), right: 12 * AppStyle.getScaleFactor(context), bottom: 80 * AppStyle.getScaleFactor(context)), + itemCount: widget.models.length + 1, + itemBuilder: (context, index) { + if (index == widget.models.length) { + return AButton( + text: subtitle.add, + onPressed: () { + widget.models.add(PMKit()); + setState(() {}); }, - ), - const SizedBox(height: 8,), - // const ASubTitle("Item Name"), - // const SizedBox(height: 4,), - // ATextFormField( - // initialValue: (model.itemName ?? "").toString(), - // textAlign: TextAlign.center, - // style: Theme.of(context).textTheme.subtitle1, - // textInputType: TextInputType.text, - // onChange: (value){ - // model.itemName = value; - // }, - // ), - // const SizedBox(height: 8,), - // const ASubTitle("Preparation Time Frame"), - // const SizedBox(height: 4,), - // ATextFormField( - // initialValue: (model.preparationTimeFrame ?? "").toString(), - // textAlign: TextAlign.center, - // style: Theme.of(context).textTheme.subtitle1, - // textInputType: TextInputType.text, - // onChange: (value){ - // model.preparationTimeFrame = value; - // }, - // ), - // const SizedBox(height: 8,), - // const ASubTitle("kit Frequency Demand"), - // const SizedBox(height: 4,), - // ATextFormField( - // initialValue: (model.kitFrequencyDemand ?? "").toString(), - // textAlign: TextAlign.center, - // style: Theme.of(context).textTheme.subtitle1, - // textInputType: TextInputType.text, - // onChange: (value){ - // model.kitFrequencyDemand = value; - // }, - // ), - // const SizedBox(height: 8,), - // const ASubTitle("Availability"), - // const SizedBox(height: 4,), - // ATextFormField( - // initialValue: (model.availability ?? "").toString(), - // textAlign: TextAlign.center, - // style: Theme.of(context).textTheme.subtitle1, - // textInputType: TextInputType.text, - // onChange: (value){ - // model.availability = value; - // }, - // ), - // const SizedBox(height: 8,), - // const ASubTitle("Quantity Needed"), - // const SizedBox(height: 4,), - // ATextFormField( - // initialValue: (model.quantityNeeded ?? "").toString(), - // textAlign: TextAlign.center, - // style: Theme.of(context).textTheme.subtitle1, - // textInputType: TextInputType.number, - // onChange: (value){ - // model.quantityNeeded = value; - // }, - // ), - // const SizedBox(height: 8,), - // const ASubTitle("Quantity Reserved"), - // const SizedBox(height: 4,), - // ATextFormField( - // initialValue: (model.quantityReserved ?? "").toString(), - // textAlign: TextAlign.center, - // style: Theme.of(context).textTheme.subtitle1, - // textInputType: TextInputType.number, - // onChange: (value){ - // model.quantityReserved = value; - // }, - // ), - // const SizedBox(height: 8,), - Divider(color: Theme.of(context).textTheme.titleMedium.color,), - ], - ); - } - ); + ); + } + final model = widget.models[index]; + return ListView( + shrinkWrap: true, + physics: const ClampingScrollPhysics(), + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + ASubTitle("#${index + 1}"), + if (index != 0) + ASmallButton( + color: Theme.of(context).colorScheme.error, + text: subtitle.delete, + onPressed: () { + widget.models.remove(model); + setState(() {}); + }, + ), + ], + ), + const SizedBox( + height: 8, + ), + const ASubTitle("Item Code"), + const SizedBox( + height: 4, + ), + AutoCompletePartsField( + clearAfterPick: false, + initialValue: (model.itemCode?.name ?? "").toString(), + onPick: (part) { + model.itemCode = Lookup(id: part.id, name: part.code); + }, + ), + const SizedBox( + height: 8, + ), + // const ASubTitle("Item Name"), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: (model.itemName ?? "").toString(), + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.text, + // onChange: (value){ + // model.itemName = value; + // }, + // ), + // const SizedBox(height: 8,), + // const ASubTitle("Preparation Time Frame"), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: (model.preparationTimeFrame ?? "").toString(), + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.text, + // onChange: (value){ + // model.preparationTimeFrame = value; + // }, + // ), + // const SizedBox(height: 8,), + // const ASubTitle("kit Frequency Demand"), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: (model.kitFrequencyDemand ?? "").toString(), + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.text, + // onChange: (value){ + // model.kitFrequencyDemand = value; + // }, + // ), + // const SizedBox(height: 8,), + // const ASubTitle("Availability"), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: (model.availability ?? "").toString(), + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.text, + // onChange: (value){ + // model.availability = value; + // }, + // ), + // const SizedBox(height: 8,), + // const ASubTitle("Quantity Needed"), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: (model.quantityNeeded ?? "").toString(), + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.number, + // onChange: (value){ + // model.quantityNeeded = value; + // }, + // ), + // const SizedBox(height: 8,), + // const ASubTitle("Quantity Reserved"), + // const SizedBox(height: 4,), + // ATextFormField( + // initialValue: (model.quantityReserved ?? "").toString(), + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.number, + // onChange: (value){ + // model.quantityReserved = value; + // }, + // ), + // const SizedBox(height: 8,), + Divider( + color: Theme.of(context).textTheme.titleMedium.color, + ), + ], + ); + }); } } diff --git a/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart b/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart index 201c749..3f7eecf 100644 --- a/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart +++ b/lib/views/widgets/pentry/pentry_ppm_check_list_form.dart @@ -7,11 +7,14 @@ import 'package:test_sa/views/widgets/buttons/app_button.dart'; import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/status/pentry/pentry_task_status_mune.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; + class PentryPPMCheckListForm extends StatefulWidget { final List models; final bool enableValidate; const PentryPPMCheckListForm({ - Key key, this.models, this.enableValidate, + Key key, + this.models, + this.enableValidate, }) : super(key: key); @override @@ -19,99 +22,112 @@ class PentryPPMCheckListForm extends StatefulWidget { } class _PentryPPMCheckListFormState extends State { - - @override Widget build(BuildContext context) { final subtitle = AppLocalization.of(context).subtitle; return ListView.builder( - padding: EdgeInsets.only( - top: 12 * AppStyle.getScaleFactor(context), - left: 12 * AppStyle.getScaleFactor(context), - right: 12 * AppStyle.getScaleFactor(context), - bottom: 80 * AppStyle.getScaleFactor(context) - ), - itemCount: widget.models.length + 1, - itemBuilder: (context,index){ - if(index == widget.models.length){ - return AButton( - text: subtitle.add, - onPressed: (){ - widget.models.add(PPMCheckList()); - setState(() {}); - }, - ); - } - final model = widget.models[index]; - return ListView( - shrinkWrap: true, - physics: const ClampingScrollPhysics(), - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - ASubTitle("#${index+1}"), - if(index != 0) - ASmallButton( - color: Theme.of(context).colorScheme.error, - text: subtitle.delete, - onPressed: (){ - widget.models.remove(model); - setState(() {}); - }, - ), - ], - ), - const SizedBox(height: 8,), - const ASubTitle("Task"), - const SizedBox(height: 4,), - ATextFormField( - initialValue: (model.title ?? "").toString(), - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - textInputType: TextInputType.text, - onChange: (value){ - model.title = value; + padding: EdgeInsets.only( + top: 12 * AppStyle.getScaleFactor(context), left: 12 * AppStyle.getScaleFactor(context), right: 12 * AppStyle.getScaleFactor(context), bottom: 80 * AppStyle.getScaleFactor(context)), + itemCount: widget.models.length + 1, + itemBuilder: (context, index) { + if (index == widget.models.length) { + return AButton( + text: subtitle.add, + onPressed: () { + widget.models.add(PPMCheckList()); + setState(() {}); }, - ), - const SizedBox(height: 8,), - ASubTitle(subtitle.status), - const SizedBox(height: 4,), - PentryTaskStatusMenu( - initialValue: model.status, - onSelect: (status){ - model.status = status; - }, - ), - const SizedBox(height: 8,), - const ASubTitle("Comment"), - const SizedBox(height: 4,), - ATextFormField( - initialValue: (model.comment ?? "").toString(), - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - textInputType: TextInputType.text, - onChange: (value){ - model.comment = value; - }, - ), - const SizedBox(height: 8,), - const ASubTitle("Measured Value"), - const SizedBox(height: 4,), - ATextFormField( - initialValue: (model.measuredValue ?? "").toString(), - textAlign: TextAlign.center, - style: Theme.of(context).textTheme.subtitle1, - textInputType: TextInputType.text, - onChange: (value){ - model.measuredValue = value; - }, - ), - const SizedBox(height: 8,), - Divider(color: Theme.of(context).textTheme.titleMedium.color,), - ], - ); - } - ); + ); + } + final model = widget.models[index]; + return ListView( + shrinkWrap: true, + physics: const ClampingScrollPhysics(), + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + ASubTitle("#${index + 1}"), + if (index != 0) + ASmallButton( + color: Theme.of(context).colorScheme.error, + text: subtitle.delete, + onPressed: () { + widget.models.remove(model); + setState(() {}); + }, + ), + ], + ), + const SizedBox( + height: 8, + ), + const ASubTitle("Task"), + const SizedBox( + height: 4, + ), + ATextFormField( + initialValue: (model.title ?? "").toString(), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + textInputType: TextInputType.text, + onChange: (value) { + model.title = value; + }, + ), + const SizedBox( + height: 8, + ), + ASubTitle(subtitle.status), + const SizedBox( + height: 4, + ), + PentryTaskStatusMenu( + initialValue: model.status, + onSelect: (status) { + model.status = status; + }, + ), + const SizedBox( + height: 8, + ), + const ASubTitle("Comment"), + const SizedBox( + height: 4, + ), + ATextFormField( + initialValue: (model.comment ?? "").toString(), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + textInputType: TextInputType.text, + onChange: (value) { + model.comment = value; + }, + ), + const SizedBox( + height: 8, + ), + const ASubTitle("Measured Value"), + const SizedBox( + height: 4, + ), + ATextFormField( + initialValue: (model.measuredValue ?? "").toString(), + textAlign: TextAlign.center, + style: Theme.of(context).textTheme.subtitle1, + textInputType: TextInputType.text, + onChange: (value) { + model.measuredValue = value; + }, + ), + const SizedBox( + height: 8, + ), + Divider( + color: Theme.of(context).textTheme.titleMedium.color, + ), + ], + ); + }); } } diff --git a/lib/views/widgets/qr/scan_qr.dart b/lib/views/widgets/qr/scan_qr.dart index 0c1cf10..63c188a 100644 --- a/lib/views/widgets/qr/scan_qr.dart +++ b/lib/views/widgets/qr/scan_qr.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:qr_code_scanner/qr_code_scanner.dart'; import '../buttons/app_icon_button.dart'; + class ScanQr extends StatefulWidget { const ScanQr({Key key}) : super(key: key); @@ -12,7 +13,6 @@ class ScanQr extends StatefulWidget { } class _ScanQrState extends State { - Barcode result; QRViewController _controller; bool _scanDone = false; @@ -43,31 +43,25 @@ class _ScanQrState extends State { children: [ QRView( key: qrKey, - onQRViewCreated:(QRViewController controller) { + onQRViewCreated: (QRViewController controller) { setState(() { _controller = controller; }); controller.scannedDataStream.listen((scanData) { - if(!_scanDone){ + if (!_scanDone) { _scanDone = true; Navigator.of(context).pop(scanData.code); } - }); }, - overlay: QrScannerOverlayShape( - borderColor: Colors.red, - borderRadius: 10, - borderLength: 30, - borderWidth: 10, - cutOutSize: 280), + overlay: QrScannerOverlayShape(borderColor: Colors.red, borderRadius: 10, borderLength: 30, borderWidth: 10, cutOutSize: 280), ), SafeArea( child: Padding( padding: EdgeInsets.all(12.0), child: AIconButton( - iconData:Icons.arrow_back, - onPressed: (){ + iconData: Icons.arrow_back, + onPressed: () { Navigator.of(context).pop(); }, ), diff --git a/lib/views/widgets/requests/info_row.dart b/lib/views/widgets/requests/info_row.dart index d8fe0bc..e92195e 100644 --- a/lib/views/widgets/requests/info_row.dart +++ b/lib/views/widgets/requests/info_row.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class RequestInfoRow extends StatelessWidget { final String title; final String info; @@ -7,13 +8,13 @@ class RequestInfoRow extends StatelessWidget { final Widget contentWidget; final Widget infoWidget; - const RequestInfoRow({Key key, this.title, this.info,this.content, this.contentWidget, this.infoWidget}) : super(key: key); + const RequestInfoRow({Key key, this.title, this.info, this.content, this.contentWidget, this.infoWidget}) : super(key: key); @override Widget build(BuildContext context) { - if(info != null && info.isEmpty){ + if (info != null && info.isEmpty) { return SizedBox.shrink(); } - if(content != null && content.isEmpty){ + if (content != null && content.isEmpty) { return SizedBox.shrink(); } return Column( @@ -23,21 +24,20 @@ class RequestInfoRow extends StatelessWidget { Text( title + " : ", style: Theme.of(context).textTheme.subtitle2.copyWith( - //fontSize: 12 - ), + //fontSize: 12 + ), textScaleFactor: AppStyle.getScaleFactor(context), ), - - if(info != null) - Expanded( - child: Text( - info, - style: Theme.of(context).textTheme.bodyText2, - textAlign: TextAlign.right, - textScaleFactor: AppStyle.getScaleFactor(context), + if (info != null) + Expanded( + child: Text( + info, + style: Theme.of(context).textTheme.bodyText2, + textAlign: TextAlign.right, + textScaleFactor: AppStyle.getScaleFactor(context), + ), ), - ), - if(infoWidget != null) + if (infoWidget != null) Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.end, @@ -48,27 +48,27 @@ class RequestInfoRow extends StatelessWidget { ), ], ), - - if(content != null) - Padding( - padding: const EdgeInsets.symmetric(horizontal: 8), - child: Row( - children: [ - Expanded( - child: Text( - content ?? 'No data found', - style: Theme.of(context).textTheme.bodyText2, - textAlign: TextAlign.center, - textScaleFactor: AppStyle.getScaleFactor(context), + if (content != null) + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: Row( + children: [ + Expanded( + child: Text( + content ?? 'No data found', + style: Theme.of(context).textTheme.bodyText2, + textAlign: TextAlign.center, + textScaleFactor: AppStyle.getScaleFactor(context), + ), ), - ), - ], + ], + ), ), + if (contentWidget != null) contentWidget, + Divider( + color: Theme.of(context).primaryColor, ), - if(contentWidget != null) - contentWidget, - Divider(color: Theme.of(context).primaryColor,), ], ); } -} \ No newline at end of file +} diff --git a/lib/views/widgets/requests/request_status.dart b/lib/views/widgets/requests/request_status.dart index c953efc..7f606a4 100644 --- a/lib/views/widgets/requests/request_status.dart +++ b/lib/views/widgets/requests/request_status.dart @@ -1,35 +1,24 @@ import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class StatusLabel extends StatelessWidget { final String label; final Color color; const StatusLabel({Key key, this.label, this.color}) : super(key: key); - - @override Widget build(BuildContext context) { - return Container( - padding: EdgeInsets.symmetric(vertical: 2,horizontal: 8), + return Container( + padding: EdgeInsets.symmetric(vertical: 2, horizontal: 8), alignment: Alignment.center, - decoration: BoxDecoration( - color: color ?? Colors.green, - borderRadius: BorderRadius.circular( - AppStyle.getBorderRadius(context) - ), - boxShadow: [ - AppStyle.boxShadow - ] - ), + decoration: BoxDecoration(color: color ?? Colors.green, borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), boxShadow: [AppStyle.boxShadow]), child: Text( label ?? "no status", style: Theme.of(context).textTheme.subtitle2.copyWith( - color: color.computeLuminance() > 0.5 - ? AColors.black : Colors.white, - ), - ) - ); + color: color.computeLuminance() > 0.5 ? AColors.black : Colors.white, + ), + )); } } diff --git a/lib/views/widgets/requests/service_request_item.dart b/lib/views/widgets/requests/service_request_item.dart index e46eed9..7977048 100644 --- a/lib/views/widgets/requests/service_request_item.dart +++ b/lib/views/widgets/requests/service_request_item.dart @@ -15,6 +15,7 @@ import 'package:test_sa/views/app_style/sizing.dart'; import 'package:test_sa/views/pages/user/requests/report/create_service_report.dart'; import 'package:test_sa/views/widgets/loaders/image_loader.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; + class ServiceRequestItem extends StatelessWidget { final int index; final ServiceRequest request; @@ -24,84 +25,83 @@ class ServiceRequestItem extends StatelessWidget { @override Widget build(BuildContext context) { Subtitle _subtitle = AppLocalization.of(context).subtitle; - User _user = Provider.of(context,listen: false).user; - final servicesProvider = Provider.of(context,listen: false); - final settingProvider = Provider.of(context,listen: false); - Color itemColor = index % 2 == 0 - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.onPrimary; - Color onItemColor = index % 2 != 0 - ? Theme.of(context).colorScheme.primary - : Theme.of(context).colorScheme.onPrimary; + User _user = Provider.of(context, listen: false).user; + final servicesProvider = Provider.of(context, listen: false); + final settingProvider = Provider.of(context, listen: false); + Color itemColor = index % 2 == 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; + Color onItemColor = index % 2 != 0 ? Theme.of(context).colorScheme.primary : Theme.of(context).colorScheme.onPrimary; return Padding( padding: const EdgeInsets.symmetric(vertical: 4), child: ElevatedButton( - style: ElevatedButton.styleFrom( - padding: EdgeInsets.symmetric(vertical: 8,horizontal: 8), - primary: itemColor, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - AppStyle.getBorderRadius(context) - ), - ), - ), + style: ElevatedButton.styleFrom( + padding: EdgeInsets.symmetric(vertical: 8, horizontal: 8), + primary: itemColor, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), + ), + ), //padding: EdgeInsets.symmetric(vertical: 8,horizontal: 8), - onPressed: (){ + onPressed: () { onPressed(request); }, child: Row( children: [ //Placeholder(color: onItemColor,fallbackWidth: 80,fallbackHeight: 80,), - _user.type == UsersTypes.normal_user && request.devicePhotos.isEmpty ? SizedBox.shrink(): - SizedBox( - width: 80, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - request.devicePhotos?.isEmpty != false ? SizedBox.shrink(): - Column( - children: [ - SizedBox( - height: 80, - width: 80, - child: ImageLoader( - url: request.devicePhotos.first, - boxFit: BoxFit.cover, - ), - ), - SizedBox(height: 24,), - ], - ), + _user.type == UsersTypes.normal_user && request.devicePhotos.isEmpty + ? SizedBox.shrink() + : SizedBox( + width: 80, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + request.devicePhotos?.isEmpty != false + ? SizedBox.shrink() + : Column( + children: [ + SizedBox( + height: 80, + width: 80, + child: ImageLoader( + url: request.devicePhotos.first, + boxFit: BoxFit.cover, + ), + ), + SizedBox( + height: 24, + ), + ], + ), - _user.type == UsersTypes.engineer ? - Material( - color: onItemColor, - elevation: 6, - shape: CircleBorder(), - child: IconButton( - icon: Icon( - Icons.description, - color: itemColor, - size: 32, - ), - onPressed: (){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_) => CreateServiceReport( - request: request, + _user.type == UsersTypes.engineer + ? Material( + color: onItemColor, + elevation: 6, + shape: CircleBorder(), + child: IconButton( + icon: Icon( + Icons.description, + color: itemColor, + size: 32, + ), + onPressed: () { + Navigator.of(context).push( + MaterialPageRoute( + builder: (_) => CreateServiceReport( + request: request, + )), + ); + }, + ), ) - ), - ); - }, + : SizedBox.shrink(), + //SizedBox(height: 8,), + ], ), - ) :SizedBox.shrink(), - //SizedBox(height: 8,), - - ], - ), + ), + SizedBox( + width: 8, ), - SizedBox(width: 8,), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -115,141 +115,122 @@ class ServiceRequestItem extends StatelessWidget { Row( children: [ Expanded( - child: request.requestCode == null ? SizedBox.shrink(): - Text( - request.requestCode ?? "-----", - style: Theme.of(context).textTheme.headline6.copyWith( - color: onItemColor, - fontSize: 16, - fontWeight: FontWeight.bold - ), - ), - ), - request.engineerName == null ? SizedBox.shrink(): - Text( - request.engineerName ?? "", - style: Theme.of(context).textTheme.subtitle2.copyWith( - color: onItemColor, - fontSize: 12, - fontWeight: FontWeight.normal - ), + child: request.requestCode == null + ? SizedBox.shrink() + : Text( + request.requestCode ?? "-----", + style: Theme.of(context).textTheme.headline6.copyWith(color: onItemColor, fontSize: 16, fontWeight: FontWeight.bold), + ), ), - + request.engineerName == null + ? SizedBox.shrink() + : Text( + request.engineerName ?? "", + style: Theme.of(context).textTheme.subtitle2.copyWith(color: onItemColor, fontSize: 12, fontWeight: FontWeight.normal), + ), ], ), - Divider(color: onItemColor,), - Row( - children: [ - Expanded( - child: request.deviceModel == null ? SizedBox.shrink(): - Text( - request.deviceModel ?? "Model not available", - style: Theme.of(context).textTheme.subtitle2.copyWith( - color: onItemColor, - fontSize: 12, - fontWeight: FontWeight.normal - ), - ), - ), - request.engineerMobile == null ? SizedBox.shrink(): - Text( - request.engineerMobile, - style: Theme.of(context).textTheme.subtitle1.copyWith( - color: onItemColor, - fontSize: 12, - fontWeight: FontWeight.normal - ), - ), - ], + Divider( + color: onItemColor, ), - Divider(color: onItemColor,), Row( children: [ Expanded( - child: request.deviceSerialNumber == null ? SizedBox.shrink(): - Text( - request.deviceSerialNumber, - style: Theme.of(context).textTheme.subtitle2.copyWith( - color: onItemColor, - fontSize: 12, - fontWeight: FontWeight.normal - ), - ), + child: request.deviceModel == null + ? SizedBox.shrink() + : Text( + request.deviceModel ?? "Model not available", + style: Theme.of(context).textTheme.subtitle2.copyWith(color: onItemColor, fontSize: 12, fontWeight: FontWeight.normal), + ), ), + request.engineerMobile == null + ? SizedBox.shrink() + : Text( + request.engineerMobile, + style: Theme.of(context).textTheme.subtitle1.copyWith(color: onItemColor, fontSize: 12, fontWeight: FontWeight.normal), + ), ], ), - request.deviceEnName == null ? SizedBox.shrink(): + Divider( + color: onItemColor, + ), Row( children: [ Expanded( - child: Text( - request.deviceEnName, - style: Theme.of(context).textTheme.subtitle1.copyWith( - color: onItemColor, - fontSize: 12, - fontWeight: FontWeight.normal - ), - ), + child: request.deviceSerialNumber == null + ? SizedBox.shrink() + : Text( + request.deviceSerialNumber, + style: Theme.of(context).textTheme.subtitle2.copyWith(color: onItemColor, fontSize: 12, fontWeight: FontWeight.normal), + ), ), ], ), + request.deviceEnName == null + ? SizedBox.shrink() + : Row( + children: [ + Expanded( + child: Text( + request.deviceEnName, + style: Theme.of(context).textTheme.subtitle1.copyWith(color: onItemColor, fontSize: 12, fontWeight: FontWeight.normal), + ), + ), + ], + ), ], ), ), - ], ), - - Divider(color: onItemColor,), + Divider( + color: onItemColor, + ), Center( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 8), child: Text( request.maintenanceIssue ?? "No maintenance issue found", - style: Theme.of(context).textTheme.subtitle1.copyWith( - color: onItemColor - ), + style: Theme.of(context).textTheme.subtitle1.copyWith(color: onItemColor), textAlign: TextAlign.center, ), ), ), - Divider(color: onItemColor,), + Divider( + color: onItemColor, + ), Row( children: [ Text( request.date ?? "Date not available", - style: Theme.of(context).textTheme.subtitle2.copyWith( - color: onItemColor - ), + style: Theme.of(context).textTheme.subtitle2.copyWith(color: onItemColor), ), Spacer(), - StatusLabel(label: request.statusLabel, - color: AColors.getRequestStatusColor(request.statusValue)), + StatusLabel(label: request.statusLabel, color: AColors.getRequestStatusColor(request.statusValue)), ], ), - request.nextVisitDate == null ? SizedBox.shrink() : - Column( - children: [ - Divider(color: onItemColor,), - Row( - children: [ - Text( - _subtitle.nextVisitDate, - style: Theme.of(context).textTheme.subtitle2.copyWith( - color: onItemColor + request.nextVisitDate == null + ? SizedBox.shrink() + : Column( + children: [ + Divider( + color: onItemColor, ), - ), - Spacer(), - Text( - DateFormat('EE dd/MM/yyyy').format(request.nextVisitDate), - style: Theme.of(context).textTheme.subtitle2.copyWith( - color: onItemColor + Row( + children: [ + Text( + _subtitle.nextVisitDate, + style: Theme.of(context).textTheme.subtitle2.copyWith(color: onItemColor), + ), + Spacer(), + Text( + DateFormat('EE dd/MM/yyyy').format(request.nextVisitDate), + style: Theme.of(context).textTheme.subtitle2.copyWith(color: onItemColor), + ), + ], ), - ), - ], - ), - ], - ), + ], + ), ], ), ), diff --git a/lib/views/widgets/requests/service_request_list.dart b/lib/views/widgets/requests/service_request_list.dart index 7cd7107..29fa65e 100644 --- a/lib/views/widgets/requests/service_request_list.dart +++ b/lib/views/widgets/requests/service_request_list.dart @@ -6,6 +6,7 @@ import 'package:test_sa/views/pages/user/requests/request_details.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/requests/service_request_item.dart'; + class ServiceRequestsList extends StatelessWidget { final List requests; final bool nextPage; @@ -15,32 +16,31 @@ class ServiceRequestsList extends StatelessWidget { @override Widget build(BuildContext context) { - Subtitle _subtitle = AppLocalization.of(context).subtitle; - if(requests.length == 0){ - return NoItemFound(message: _subtitle.noServiceRequestFound,); + if (requests.length == 0) { + return NoItemFound( + message: _subtitle.noServiceRequestFound, + ); } return LazyLoading( nextPage: nextPage, onLazyLoad: onLazyLoad, child: ListView.builder( - //physics: BouncingScrollPhysics(), - itemCount: requests.length, - padding: EdgeInsets.symmetric(horizontal: 16,vertical: 8), - itemBuilder: (context,itemIndex){ + //physics: BouncingScrollPhysics(), + itemCount: requests.length, + padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8), + itemBuilder: (context, itemIndex) { return ServiceRequestItem( index: itemIndex, request: requests[itemIndex], - onPressed: (request){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_)=> RequestDetailsPage(serviceRequest: request,) - ) - ); + onPressed: (request) { + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => RequestDetailsPage( + serviceRequest: request, + ))); }, ); - } - ), + }), ); } } diff --git a/lib/views/widgets/search/filter_item.dart b/lib/views/widgets/search/filter_item.dart index e4e88ef..7129405 100644 --- a/lib/views/widgets/search/filter_item.dart +++ b/lib/views/widgets/search/filter_item.dart @@ -8,22 +8,24 @@ class FilterItem extends StatelessWidget { final Lookup status; final VoidCallback onSelected; - const FilterItem({ - Key key, - this.status, - this.isSelected, - this.onSelected - }) : super(key: key); + const FilterItem({Key key, this.status, this.isSelected, this.onSelected}) : super(key: key); - Color getStatusColor(){ - switch(status.id){ - case 0: return AColors.green; - case 4: return AColors.deepRed; - case 6: return AColors.green; - case 5: return AColors.orange; - case 8: return AColors.green; - case 9: return AColors.orange; - default : return AColors.grey; + Color getStatusColor() { + switch (status.id) { + case 0: + return AColors.green; + case 4: + return AColors.deepRed; + case 6: + return AColors.green; + case 5: + return AColors.orange; + case 8: + return AColors.green; + case 9: + return AColors.orange; + default: + return AColors.grey; } } @@ -36,22 +38,17 @@ class FilterItem extends StatelessWidget { child: ElevatedButton( style: ElevatedButton.styleFrom( padding: EdgeInsets.symmetric(horizontal: 8), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular( - AppStyle.getBorderRadius(context) - ) - ), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context))), primary: getStatusColor(), ), child: Text( - status.name??"", + status.name ?? "", style: Theme.of(context).textTheme.bodyText1.copyWith( - color:getStatusColor().computeLuminance() > 0.5 - ? AColors.black : Colors.white, - ), + color: getStatusColor().computeLuminance() > 0.5 ? AColors.black : Colors.white, + ), textScaleFactor: AppStyle.getScaleFactor(context), ), - onPressed:onSelected, + onPressed: onSelected, ), ), ); diff --git a/lib/views/widgets/search/service_request_search_bar.dart b/lib/views/widgets/search/service_request_search_bar.dart index a3f8b96..c5b31e2 100644 --- a/lib/views/widgets/search/service_request_search_bar.dart +++ b/lib/views/widgets/search/service_request_search_bar.dart @@ -12,31 +12,37 @@ import 'package:test_sa/views/widgets/status/service_request/service_request_sta import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import '../app_text_form_field.dart'; + class ServiceRequestsSearchDialog extends StatefulWidget { final ServiceRequestSearch initialSearchValue; final bool expandedSearch; final Function(ServiceRequestSearch) onSearch; - const ServiceRequestsSearchDialog({ - Key key, - this.initialSearchValue, - this.expandedSearch, - this.onSearch - }) : super(key: key); + const ServiceRequestsSearchDialog({Key key, this.initialSearchValue, this.expandedSearch, this.onSearch}) : super(key: key); @override _ServiceRequestsSearchDialogState createState() => _ServiceRequestsSearchDialogState(); } -class _ServiceRequestsSearchDialogState extends State - with TickerProviderStateMixin{ +class _ServiceRequestsSearchDialogState extends State with TickerProviderStateMixin { ServiceRequestSearch _search; List status = [ - Lookup(name: "New", id: 4,), - - Lookup(name: "Repaired", id: 6,), + Lookup( + name: "New", + id: 4, + ), + Lookup( + name: "Repaired", + id: 6, + ), Lookup(name: "Repeated", id: 8), - Lookup(name: "Closed", id: 9,), - Lookup(name: "Under Repair", id: 5,), + Lookup( + name: "Closed", + id: 9, + ), + Lookup( + name: "Under Repair", + id: 5, + ), ]; final GlobalKey _formKey = GlobalKey(); @@ -47,10 +53,11 @@ class _ServiceRequestsSearchDialogState extends State _VisitsSearchDialogState(); } -class _VisitsSearchDialogState extends State - with TickerProviderStateMixin{ +class _VisitsSearchDialogState extends State with TickerProviderStateMixin { VisitsSearch _search; List status = [ - Lookup(name: "Done", id: 0,), + Lookup( + name: "Done", + id: 0, + ), Lookup(name: "Not Yet", id: 1), - Lookup(name: "On Hold", id: 2,), + Lookup( + name: "On Hold", + id: 2, + ), ]; List contactStatus = [ @@ -46,7 +47,6 @@ class _VisitsSearchDialogState extends State // Lookup(name: "Under Maintenance Contract", value: "CC",), ]; - final GlobalKey _formKey = GlobalKey(); @override @@ -55,33 +55,33 @@ class _VisitsSearchDialogState extends State _search = VisitsSearch(); _search.fromSearch(widget.initialSearchValue); } + @override Widget build(BuildContext context) { Subtitle _subtitle = AppLocalization.of(context).subtitle; DateTime today = DateTime.now(); - return SizedBox( + return SizedBox( height: MediaQuery.of(context).size.height / 1.3, child: Form( key: _formKey, child: ListView( // shrinkWrap: true, // physics: const ClampingScrollPhysics(), - padding: const EdgeInsets.symmetric(vertical: 8,horizontal: 16), + padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ ASmallButton( text: _subtitle.cancel, - onPressed: (){ + onPressed: () { Navigator.of(context).pop(); }, ), - ASmallButton( text: _subtitle.search, - onPressed: (){ - if(!_formKey.currentState.validate()) { + onPressed: () { + if (!_formKey.currentState.validate()) { return; } _formKey.currentState.save(); @@ -93,26 +93,28 @@ class _VisitsSearchDialogState extends State ATextFormField( initialValue: _search.deviceSerialNumber, hintText: _subtitle.serialNumber, - style: Theme.of(context).textTheme.headline6, + style: Theme.of(context).textTheme.headline6, textInputAction: TextInputAction.search, - onAction: (){ - if(!_formKey.currentState.validate()) { + onAction: () { + if (!_formKey.currentState.validate()) { return; } _formKey.currentState.save(); Navigator.of(context).pop(_search); }, - onSaved: (value){ + onSaved: (value) { _search.deviceSerialNumber = value; }, ), - SizedBox(height: 8.0 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 8.0 * AppStyle.getScaleFactor(context), + ), HospitalAutoCompleteField( initialValue: _search.hospital?.name, // onSave: (value){ // _search.hospital = value; // }, - onSearch: (value){ + onSearch: (value) { _search.hospital = value; Navigator.of(context).pop(_search); }, @@ -134,10 +136,12 @@ class _VisitsSearchDialogState extends State // _search.brand = value; // }, // ), - SizedBox(height: 8.0 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 8.0 * AppStyle.getScaleFactor(context), + ), AutoCompleteModelField( initialValue: _search.model, - onPick: (lookup){ + onPick: (lookup) { _search.model = lookup; Navigator.of(context).pop(_search); }, @@ -158,12 +162,16 @@ class _VisitsSearchDialogState extends State // _search.model = value; // }, // ), - SizedBox(height: 8.0 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 8.0 * AppStyle.getScaleFactor(context), + ), ASubTitle(_subtitle.status), - SizedBox(height: 4.0 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 4.0 * AppStyle.getScaleFactor(context), + ), PentryVisitsStatusMenu( initialValue: _search.statusValue, - onSelect: (status){ + onSelect: (status) { _search.statusValue = status; }, ), @@ -191,12 +199,16 @@ class _VisitsSearchDialogState extends State // // ), // ), - SizedBox(height: 8.0 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 8.0 * AppStyle.getScaleFactor(context), + ), ASubTitle(_subtitle.contactStatus), - SizedBox(height: 4.0 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 4.0 * AppStyle.getScaleFactor(context), + ), AssignedToMenu( initialValue: _search.contactStatus, - onSelect: (status){ + onSelect: (status) { _search.contactStatus = status; }, ), @@ -224,40 +236,48 @@ class _VisitsSearchDialogState extends State // // ), // ), - SizedBox(height: 8.0 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 8.0 * AppStyle.getScaleFactor(context), + ), ASubTitle(_subtitle.actualDate), - SizedBox(height: 4.0 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 4.0 * AppStyle.getScaleFactor(context), + ), FromToDateBar( - from: _search.actualDateFrom , + from: _search.actualDateFrom, to: _search.actualDateTo, - onPickFrom: (date){ + onPickFrom: (date) { _search.actualDateFrom = date; }, - onPickTo: (date){ + onPickTo: (date) { _search.actualDateTo = date; }, ), - SizedBox(height: 8.0 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 8.0 * AppStyle.getScaleFactor(context), + ), ASubTitle(_subtitle.expectDate), - SizedBox(height: 4.0 * AppStyle.getScaleFactor(context),), + SizedBox( + height: 4.0 * AppStyle.getScaleFactor(context), + ), FromToDateBar( from: _search.expectedDateFrom ?? DateTime(today.year, today.month, 1), - to: _search.expectedDateTo ?? DateTime(today.year, (today.month +1).clamp(1, 12) , today.month == 12 ? 31 : 0), - onPickFrom: (date){ + to: _search.expectedDateTo ?? DateTime(today.year, (today.month + 1).clamp(1, 12), today.month == 12 ? 31 : 0), + onPickFrom: (date) { _search.expectedDateFrom = date; }, - onPickTo: (date){ + onPickTo: (date) { _search.expectedDateTo = date; }, ), Visibility( visible: _search.toMap().isNotEmpty, child: Padding( - padding: const EdgeInsets.symmetric(vertical: 8,horizontal: 16), + padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16), child: AButton( padding: EdgeInsets.zero, text: _subtitle.clearSearch, - onPressed: (){ + onPressed: () { _search = VisitsSearch(); Navigator.of(context).pop(_search); }, diff --git a/lib/views/widgets/sound/record_sound.dart b/lib/views/widgets/sound/record_sound.dart index 3170fe9..5ca797e 100644 --- a/lib/views/widgets/sound/record_sound.dart +++ b/lib/views/widgets/sound/record_sound.dart @@ -95,7 +95,7 @@ class _RecordSoundState extends State { _record = path; widget.onRecord(path); _recording = false; - setState(() { }); + setState(() {}); } _cancelRecording() async { @@ -107,7 +107,7 @@ class _RecordSoundState extends State { // rebuild(); _recording = false; await Future.delayed(const Duration(seconds: 1)); - if(!_recording) setState(() { }); + if (!_recording) setState(() {}); // _message.memoryAudio.; } diff --git a/lib/views/widgets/sound/sound_player.dart b/lib/views/widgets/sound/sound_player.dart index 7793f54..74cf257 100644 --- a/lib/views/widgets/sound/sound_player.dart +++ b/lib/views/widgets/sound/sound_player.dart @@ -5,7 +5,6 @@ import 'package:test_sa/views/app_style/sizing.dart'; import '../../app_style/colors.dart'; class ASoundPlayer extends StatefulWidget { - final String audio; const ASoundPlayer({Key key, this.audio}) : super(key: key); @@ -15,7 +14,6 @@ class ASoundPlayer extends StatefulWidget { } class _ASoundPlayerState extends State { - //FlutterSoundPlayer _myPlayer = FlutterSoundPlayer(); bool _sliderMoving = false; Duration _audioTime; @@ -25,8 +23,8 @@ class _ASoundPlayerState extends State { bool _failedToLoad = false; AudioPlayer _audioPlayer; - Widget _getAudioButton(){ - switch(_audioPlayer.state){ + Widget _getAudioButton() { + switch (_audioPlayer.state) { case PlayerState.playing: return IconButton( icon: const Icon(Icons.pause_rounded), @@ -34,84 +32,71 @@ class _ASoundPlayerState extends State { _failedToLoad = false; await _audioPlayer.pause(); rebuild(); - } - ); + }); case PlayerState.paused: - return IconButton( + return IconButton( icon: const Icon(Icons.play_arrow_rounded), onPressed: () async { _failedToLoad = false; await _audioPlayer.resume(); rebuild(); - } - ); + }); case PlayerState.completed: - return IconButton( + return IconButton( icon: const Icon(Icons.replay_rounded), onPressed: () async { _failedToLoad = false; await _audioPlayer.stop(); await _audioPlayer.resume(); rebuild(); - } - ); + }); case PlayerState.stopped: return IconButton( - icon: Icon( _isLocalFile - ? Icons.play_circle_fill_outlined - : Icons.download_rounded - - ), + icon: Icon(_isLocalFile ? Icons.play_circle_fill_outlined : Icons.download_rounded), onPressed: () async { _failedToLoad = false; try { await _audioPlayer.play( - _isLocalFile? - DeviceFileSource(_audio):UrlSource(_audio), + _isLocalFile ? DeviceFileSource(_audio) : UrlSource(_audio), ); rebuild(); } on Exception catch (e) { _failedToLoad = true; } - } - ); - default: return IconButton( - icon: const Icon( Icons.replay_rounded), - onPressed: () async { - _failedToLoad = false; + }); + default: + return IconButton( + icon: const Icon(Icons.replay_rounded), + onPressed: () async { + _failedToLoad = false; - try { - _audioPlayer.seek(const Duration(milliseconds: 0)); - _audioPlayer.stop(); - await _audioPlayer.play( - _isLocalFile? - DeviceFileSource(_audio):UrlSource(_audio), - ); - rebuild(); - } on Exception catch (e) { - _failedToLoad = true; - } - } - ); + try { + _audioPlayer.seek(const Duration(milliseconds: 0)); + _audioPlayer.stop(); + await _audioPlayer.play( + _isLocalFile ? DeviceFileSource(_audio) : UrlSource(_audio), + ); + rebuild(); + } on Exception catch (e) { + _failedToLoad = true; + } + }); } } String format(Duration d) { - if(d == null) - return "00:00"; + if (d == null) return "00:00"; return d.toString().substring(2, 7); } - rebuild(){ + rebuild() { if (!mounted) return; setState(() {}); } bool _isLocalUrl(String url) { - if(url?.isEmpty != false) return false; - return url.startsWith("/") || - url.startsWith("file://") || - url.substring(1).startsWith(':\\'); + if (url?.isEmpty != false) return false; + return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\'); } @override @@ -122,14 +107,16 @@ class _ASoundPlayerState extends State { _audio = widget.audio; _isLocalFile = _isLocalUrl(_audio); _audioPlayer.setReleaseMode(ReleaseMode.stop); - if(_isLocalFile){ - _audioPlayer.setSourceDeviceFile(_audio).then((value) {rebuild();}); - } else{ + if (_isLocalFile) { + _audioPlayer.setSourceDeviceFile(_audio).then((value) { + rebuild(); + }); + } else { _audioPlayer.setReleaseMode(ReleaseMode.stop); } // set up listeners - _audioPlayer.onPositionChanged.listen((Duration duration) { - if(!_sliderMoving){ + _audioPlayer.onPositionChanged.listen((Duration duration) { + if (!_sliderMoving) { _audioPosition = duration; rebuild(); } @@ -139,7 +126,7 @@ class _ASoundPlayerState extends State { //_audioPosition = _audioTime; rebuild(); }); - _audioPlayer.onDurationChanged.listen((Duration duration) { + _audioPlayer.onDurationChanged.listen((Duration duration) { _audioTime = duration; rebuild(); }); @@ -151,20 +138,19 @@ class _ASoundPlayerState extends State { @override void dispose() { super.dispose(); - // _myPlayer.closeAudioSession(); + // _myPlayer.closeAudioSession(); _audioPlayer.release(); _audioPlayer.dispose(); - } @override Widget build(BuildContext context) { - if(_audio != widget.audio){ + if (_audio != widget.audio) { WidgetsBinding.instance.addPostFrameCallback((timeStamp) async { _audio = widget.audio; - if(_isLocalFile){ + if (_isLocalFile) { await _audioPlayer.setSourceDeviceFile(_audio); - }else{ + } else { await _audioPlayer.setSourceUrl(_audio); } _audioPlayer.seek(const Duration(milliseconds: 0)); @@ -172,34 +158,29 @@ class _ASoundPlayerState extends State { rebuild(); }); } - return Column( + return Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ Row( children: [ - Material( - color: Colors.transparent, - child: _getAudioButton() - ), + Material(color: Colors.transparent, child: _getAudioButton()), Expanded( child: Slider( - value: _audioPosition?.inMilliseconds?.toDouble() ?? 0.0, - min: 0, - max: _audioTime?.inMilliseconds?.toDouble() ?? 60.0, - onChangeStart: (value){ - _sliderMoving = true; - }, - onChanged: (value){ - _audioPosition = Duration(milliseconds: value.round()); - rebuild(); - }, - onChangeEnd: (value){ - _sliderMoving = false; - _audioPlayer.seek(Duration(milliseconds: value.round())); - rebuild(); - } - - ), + value: _audioPosition?.inMilliseconds?.toDouble() ?? 0.0, + min: 0, + max: _audioTime?.inMilliseconds?.toDouble() ?? 60.0, + onChangeStart: (value) { + _sliderMoving = true; + }, + onChanged: (value) { + _audioPosition = Duration(milliseconds: value.round()); + rebuild(); + }, + onChangeEnd: (value) { + _sliderMoving = false; + _audioPlayer.seek(Duration(milliseconds: value.round())); + rebuild(); + }), ), ], ), @@ -212,12 +193,9 @@ class _ASoundPlayerState extends State { children: [ Text( "Failed to load", - style: Theme.of(context).textTheme.overline.copyWith( - color: AColors.red - ), + style: Theme.of(context).textTheme.overline.copyWith(color: AColors.red), textScaleFactor: AppStyle.getScaleFactor(context), ), - ], ), ), diff --git a/lib/views/widgets/speech_to_text/speech_to_text.dart b/lib/views/widgets/speech_to_text/speech_to_text.dart index 4d813d1..59b3d92 100644 --- a/lib/views/widgets/speech_to_text/speech_to_text.dart +++ b/lib/views/widgets/speech_to_text/speech_to_text.dart @@ -8,6 +8,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/views/widgets/buttons/app_icon_button2.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class SpeechToTextButton extends StatefulWidget { final TextEditingController controller; final bool mini; diff --git a/lib/views/widgets/status/employee/assigned_to_mune.dart b/lib/views/widgets/status/employee/assigned_to_mune.dart index 8e4addf..e07a945 100644 --- a/lib/views/widgets/status/employee/assigned_to_mune.dart +++ b/lib/views/widgets/status/employee/assigned_to_mune.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class AssignedToMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -22,16 +23,12 @@ class AssignedToMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getData( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getData(user: userProvider.user, host: settingProvider.host); }, child: SingleStatusMenu( initialStatus: initialValue, statuses: menuProvider.items, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/employee/engineers_mune.dart b/lib/views/widgets/status/employee/engineers_mune.dart index 93b1597..cfd6b46 100644 --- a/lib/views/widgets/status/employee/engineers_mune.dart +++ b/lib/views/widgets/status/employee/engineers_mune.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/employee/single_type_menu.dart'; + class EngineersMenu extends StatelessWidget { final Function(Engineer) onSelect; final Engineer initialValue; @@ -22,16 +23,12 @@ class EngineersMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getData( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getData(user: userProvider.user, host: settingProvider.host); }, child: SingleEngineerMenu( initialStatus: initialValue, engineers: menuProvider.items, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/employee/single_type_menu.dart b/lib/views/widgets/status/employee/single_type_menu.dart index ccb46c0..8c480a9 100644 --- a/lib/views/widgets/status/employee/single_type_menu.dart +++ b/lib/views/widgets/status/employee/single_type_menu.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class SingleEngineerMenu extends StatefulWidget { final List engineers; final Engineer initialStatus; @@ -13,16 +14,14 @@ class SingleEngineerMenu extends StatefulWidget { } class _SingleEngineerMenuState extends State { - Engineer _selectedStatus; @override void didUpdateWidget(covariant SingleEngineerMenu oldWidget) { - if(widget.initialStatus != null && widget.initialStatus.id != null){ - _selectedStatus = widget.engineers?.firstWhere( - (element) { - return element == widget.initialStatus; - }); + if (widget.initialStatus != null && widget.initialStatus.id != null) { + _selectedStatus = widget.engineers?.firstWhere((element) { + return element == widget.initialStatus; + }); widget.onSelect(_selectedStatus); } else { _selectedStatus = null; @@ -32,32 +31,25 @@ class _SingleEngineerMenuState extends State { @override void initState() { - if(widget.initialStatus != null && widget.initialStatus.id != null){ - _selectedStatus = widget.engineers?.firstWhere( - (element) { - return element == widget.initialStatus; - }); + if (widget.initialStatus != null && widget.initialStatus.id != null) { + _selectedStatus = widget.engineers?.firstWhere((element) { + return element == widget.initialStatus; + }); widget.onSelect(_selectedStatus); } super.initState(); } + @override Widget build(BuildContext context) { return Container( - padding: const EdgeInsets.symmetric( - horizontal: 16 - ), + padding: const EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( color: Colors.white, - border: Border.all(color:AColors.black), - borderRadius: BorderRadius.circular( - AppStyle.borderRadius * AppStyle.getScaleFactor(context) - ), - boxShadow: const [ - AppStyle.boxShadow - ] - ), + border: Border.all(color: AColors.black), + borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), + boxShadow: const [AppStyle.boxShadow]), child: DropdownButton( value: _selectedStatus, iconSize: 24, @@ -67,9 +59,7 @@ class _SingleEngineerMenuState extends State { "Select", style: Theme.of(context).textTheme.subtitle1, ), - style: TextStyle( - color: Theme.of(context).primaryColor - ), + style: TextStyle(color: Theme.of(context).primaryColor), underline: SizedBox.shrink(), onChanged: (Engineer newValue) { setState(() { @@ -77,21 +67,19 @@ class _SingleEngineerMenuState extends State { }); widget.onSelect(newValue); }, - items: widget.engineers - .map>((Engineer value) { + items: widget.engineers.map>((Engineer value) { return DropdownMenuItem( value: value, child: Text( - value.name, + value.name, style: Theme.of(context).textTheme.subtitle1.copyWith( - color: Theme.of(context).primaryColor, - fontSize: 11, - //fontWeight: FontWeight.bold - ), + color: Theme.of(context).primaryColor, + fontSize: 11, + //fontWeight: FontWeight.bold + ), ), ); - }) - .toList(), + }).toList(), ), ); } diff --git a/lib/views/widgets/status/gas_refill/gas_cylinder_size.dart b/lib/views/widgets/status/gas_refill/gas_cylinder_size.dart index 358226b..acaec9a 100644 --- a/lib/views/widgets/status/gas_refill/gas_cylinder_size.dart +++ b/lib/views/widgets/status/gas_refill/gas_cylinder_size.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class GasCylinderSizeMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -22,16 +23,12 @@ class GasCylinderSizeMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getData( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getData(user: userProvider.user, host: settingProvider.host); }, child: SingleStatusMenu( initialStatus: initialValue, statuses: menuProvider.items, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/gas_refill/gas_cylinder_type.dart b/lib/views/widgets/status/gas_refill/gas_cylinder_type.dart index 9b2c264..0b58d73 100644 --- a/lib/views/widgets/status/gas_refill/gas_cylinder_type.dart +++ b/lib/views/widgets/status/gas_refill/gas_cylinder_type.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class GasCylinderTypesMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -22,16 +23,12 @@ class GasCylinderTypesMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getData( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getData(user: userProvider.user, host: settingProvider.host); }, child: SingleStatusMenu( initialStatus: initialValue, statuses: menuProvider.items, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/gas_refill/gas_status.dart b/lib/views/widgets/status/gas_refill/gas_status.dart index 1dce0c7..c46e650 100644 --- a/lib/views/widgets/status/gas_refill/gas_status.dart +++ b/lib/views/widgets/status/gas_refill/gas_status.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class GasStatusMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -22,16 +23,12 @@ class GasStatusMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getData( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getData(user: userProvider.user, host: settingProvider.host); }, child: SingleStatusMenu( initialStatus: initialValue, statuses: menuProvider.items, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/gas_refill/gas_type.dart b/lib/views/widgets/status/gas_refill/gas_type.dart index 8d3b9e6..5f4c536 100644 --- a/lib/views/widgets/status/gas_refill/gas_type.dart +++ b/lib/views/widgets/status/gas_refill/gas_type.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class GasTypeMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -22,16 +23,12 @@ class GasTypeMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getData( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getData(user: userProvider.user, host: settingProvider.host); }, child: SingleStatusMenu( initialStatus: initialValue, statuses: menuProvider.items, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/multi_status_menu.dart b/lib/views/widgets/status/multi_status_menu.dart index 9d925df..52330a6 100644 --- a/lib/views/widgets/status/multi_status_menu.dart +++ b/lib/views/widgets/status/multi_status_menu.dart @@ -4,6 +4,7 @@ import 'package:flutter_typeahead/flutter_typeahead.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class MultiStatusMenu extends StatefulWidget { final List statuses; final List initialSelectedStatus; @@ -15,7 +16,6 @@ class MultiStatusMenu extends StatefulWidget { } class _MultiStatusMenuState extends State { - List _selectedStatus = []; TextEditingController _controller; @@ -31,101 +31,88 @@ class _MultiStatusMenuState extends State { _controller.clear(); super.dispose(); } + @override Widget build(BuildContext context) { - return - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Wrap( - crossAxisAlignment: WrapCrossAlignment.start, - alignment: WrapAlignment.start, - runAlignment: WrapAlignment.start, - children: List.generate( - _selectedStatus.length, - (index) { - final status = _selectedStatus[index]; - return Container( - height: 36 * AppStyle.getScaleFactor(context), - margin: EdgeInsets.all(4 * AppStyle.getScaleFactor(context)), - //padding: EdgeInsets.all(4 * AppStyle.getScaleFactor(context)), - decoration: BoxDecoration( - color: Theme.of(context).colorScheme.primary, - borderRadius: BorderRadius.circular(8) - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - const SizedBox(width: 12,), - Text( - status.name, - style: Theme.of(context).textTheme.bodyText1.copyWith( - color:Theme.of(context).colorScheme.onPrimary, + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Wrap( + crossAxisAlignment: WrapCrossAlignment.start, + alignment: WrapAlignment.start, + runAlignment: WrapAlignment.start, + children: List.generate(_selectedStatus.length, (index) { + final status = _selectedStatus[index]; + return Container( + height: 36 * AppStyle.getScaleFactor(context), + margin: EdgeInsets.all(4 * AppStyle.getScaleFactor(context)), + //padding: EdgeInsets.all(4 * AppStyle.getScaleFactor(context)), + decoration: BoxDecoration(color: Theme.of(context).colorScheme.primary, borderRadius: BorderRadius.circular(8)), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const SizedBox( + width: 12, + ), + Text( + status.name, + style: Theme.of(context).textTheme.bodyText1.copyWith( + color: Theme.of(context).colorScheme.onPrimary, ), - ), - IconButton( - color:Theme.of(context).colorScheme.onPrimary, - onPressed: (){ - _selectedStatus.remove(status); - widget.onSelect(_selectedStatus); - setState(() {}); - }, - icon: const Icon(Icons.delete) - ) - ], - ) - ); - } - ), - ), - Container( - padding: const EdgeInsets.symmetric( - horizontal: 16 - ), - decoration: BoxDecoration( - color: Colors.white, - border: Border.all(color:AColors.black), - borderRadius: BorderRadius.circular( - AppStyle.borderRadius * AppStyle.getScaleFactor(context) - ), - boxShadow: const [ - AppStyle.boxShadow - ] - ), - child: TypeAheadField( - textFieldConfiguration: TextFieldConfiguration( - style: Theme.of(context).textTheme.subtitle1, - controller: _controller, - textAlign: TextAlign.center, - decoration: const InputDecoration( - border: InputBorder.none, - disabledBorder: InputBorder.none, - focusedBorder: InputBorder.none, - enabledBorder: InputBorder.none, - ), - textInputAction: TextInputAction.search, + ), + IconButton( + color: Theme.of(context).colorScheme.onPrimary, + onPressed: () { + _selectedStatus.remove(status); + widget.onSelect(_selectedStatus); + setState(() {}); + }, + icon: const Icon(Icons.delete)) + ], + )); + }), + ), + Container( + padding: const EdgeInsets.symmetric(horizontal: 16), + decoration: BoxDecoration( + color: Colors.white, + border: Border.all(color: AColors.black), + borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)), + boxShadow: const [AppStyle.boxShadow]), + child: TypeAheadField( + textFieldConfiguration: TextFieldConfiguration( + style: Theme.of(context).textTheme.subtitle1, + controller: _controller, + textAlign: TextAlign.center, + decoration: const InputDecoration( + border: InputBorder.none, + disabledBorder: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, ), - suggestionsCallback: (vale) { - return widget.statuses.where((Lookup option) { - return option.name.toLowerCase().contains(_controller.text); - }); - }, - itemBuilder: (context, part) { - return ListTile( - title: Text(part.name), - ); - }, - onSuggestionSelected: (status) { - _controller.clear(); - if(!_selectedStatus.contains(status)){ - _selectedStatus.add(status); - widget.onSelect(_selectedStatus); - setState(() {}); - } - }, + textInputAction: TextInputAction.search, ), + suggestionsCallback: (vale) { + return widget.statuses.where((Lookup option) { + return option.name.toLowerCase().contains(_controller.text); + }); + }, + itemBuilder: (context, part) { + return ListTile( + title: Text(part.name), + ); + }, + onSuggestionSelected: (status) { + _controller.clear(); + if (!_selectedStatus.contains(status)) { + _selectedStatus.add(status); + widget.onSelect(_selectedStatus); + setState(() {}); + } + }, ), - ], - ); + ), + ], + ); } } diff --git a/lib/views/widgets/status/pentry/pentry_status_mune.dart b/lib/views/widgets/status/pentry/pentry_status_mune.dart index b0813f2..9f10c77 100644 --- a/lib/views/widgets/status/pentry/pentry_status_mune.dart +++ b/lib/views/widgets/status/pentry/pentry_status_mune.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class PentryStatusMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -22,16 +23,12 @@ class PentryStatusMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getData( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getData(user: userProvider.user, host: settingProvider.host); }, child: SingleStatusMenu( initialStatus: initialValue, statuses: menuProvider.items, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/pentry/pentry_task_status_mune.dart b/lib/views/widgets/status/pentry/pentry_task_status_mune.dart index 8564410..6b438dc 100644 --- a/lib/views/widgets/status/pentry/pentry_task_status_mune.dart +++ b/lib/views/widgets/status/pentry/pentry_task_status_mune.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class PentryTaskStatusMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -22,16 +23,12 @@ class PentryTaskStatusMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getData( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getData(user: userProvider.user, host: settingProvider.host); }, child: SingleStatusMenu( initialStatus: initialValue, statuses: menuProvider.items, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/pentry/pentry_visit_status_mune.dart b/lib/views/widgets/status/pentry/pentry_visit_status_mune.dart index 4df17a4..d494172 100644 --- a/lib/views/widgets/status/pentry/pentry_visit_status_mune.dart +++ b/lib/views/widgets/status/pentry/pentry_visit_status_mune.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class PentryVisitsStatusMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -22,16 +23,12 @@ class PentryVisitsStatusMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getData( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getData(user: userProvider.user, host: settingProvider.host); }, child: SingleStatusMenu( initialStatus: initialValue, statuses: menuProvider.items, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/report/service_report_last_call.dart b/lib/views/widgets/status/report/service_report_last_call.dart index a3f5921..b6f29fb 100644 --- a/lib/views/widgets/status/report/service_report_last_call.dart +++ b/lib/views/widgets/status/report/service_report_last_call.dart @@ -5,12 +5,12 @@ import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class ServiceReportLastCallsMenu extends StatelessWidget { final Function(Lookup) onSelect; final ServiceReport report; - const ServiceReportLastCallsMenu({ - Key key,@required this.onSelect,@required this.report}) : super(key: key); + const ServiceReportLastCallsMenu({Key key, @required this.onSelect, @required this.report}) : super(key: key); @override Widget build(BuildContext context) { ServiceReportLastCallsProvider _menuProvider = Provider.of(context); @@ -23,7 +23,6 @@ class ServiceReportLastCallsMenu extends StatelessWidget { initialStatus: report?.callLastSituation, statuses: _menuProvider.calls, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/report/service_report_reasons.dart b/lib/views/widgets/status/report/service_report_reasons.dart index dbdd48e..1811572 100644 --- a/lib/views/widgets/status/report/service_report_reasons.dart +++ b/lib/views/widgets/status/report/service_report_reasons.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class ServiceReportReasonsMenu extends StatelessWidget { final Lookup initialValue; final Function(Lookup) onSelect; @@ -25,14 +26,12 @@ class ServiceReportReasonsMenu extends StatelessWidget { await _menuProvider.getTypes( user: _userProvider.user, host: _settingProvider.host, - ); }, child: SingleStatusMenu( initialStatus: initialValue, statuses: _menuProvider.reasons, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/report/service_report_status.dart b/lib/views/widgets/status/report/service_report_status.dart index 12adf5d..2effae6 100644 --- a/lib/views/widgets/status/report/service_report_status.dart +++ b/lib/views/widgets/status/report/service_report_status.dart @@ -10,6 +10,7 @@ import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class ServiceReportStatusMenu extends StatefulWidget { final Function(Lookup) onSelect; final ServiceReport report; @@ -28,7 +29,7 @@ class _ServiceReportStatusMenuState extends State { UserProvider userProvider = Provider.of(context); ServiceReportStatusProvider menuProvider = Provider.of(context); ServiceReportLastCallsProvider callsLastSituationsProvider = Provider.of(context); - if(firstTime){ + if (firstTime) { callsLastSituationsProvider.reset(); firstTime = false; @@ -36,37 +37,24 @@ class _ServiceReportStatusMenuState extends State { return LoadingManager( isLoading: menuProvider.isLoading == true || callsLastSituationsProvider.isLoading == true, isFailedLoading: menuProvider.statuses == null || callsLastSituationsProvider.calls == null, - stateCode: menuProvider.stateCode == null || callsLastSituationsProvider.stateCode == null ? null: - max(menuProvider.stateCode ?? 0,callsLastSituationsProvider.stateCode ?? 0), + stateCode: menuProvider.stateCode == null || callsLastSituationsProvider.stateCode == null ? null : max(menuProvider.stateCode ?? 0, callsLastSituationsProvider.stateCode ?? 0), onRefresh: () async { - await callsLastSituationsProvider.getCalls( - user: userProvider.user, - host: settingProvider.host, - serviceStatus: widget.report.status?.id - ); - if(menuProvider.stateCode == null){ + await callsLastSituationsProvider.getCalls(user: userProvider.user, host: settingProvider.host, serviceStatus: widget.report.status?.id); + if (menuProvider.stateCode == null) { menuProvider.reset(); - await menuProvider.getTypes( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getTypes(user: userProvider.user, host: settingProvider.host); setState(() {}); } }, child: SingleStatusMenu( statuses: menuProvider.statuses, initialStatus: widget.report.status, - onSelect: (status){ + onSelect: (status) { widget.report.callLastSituation = null; - callsLastSituationsProvider.getCalls( - user: userProvider.user, - host: settingProvider.host, - serviceStatus: status.id - ); + callsLastSituationsProvider.getCalls(user: userProvider.user, host: settingProvider.host, serviceStatus: status.id); widget.onSelect(status); }, - ) - ); + )); } } diff --git a/lib/views/widgets/status/report/service_report_type.dart b/lib/views/widgets/status/report/service_report_type.dart index fb31574..99f6639 100644 --- a/lib/views/widgets/status/report/service_report_type.dart +++ b/lib/views/widgets/status/report/service_report_type.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class ServiceReportTypeMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -22,17 +23,13 @@ class ServiceReportTypeMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getTypes( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getTypes(user: userProvider.user, host: settingProvider.host); onSelect(initialValue ?? menuProvider.types?.last); }, child: SingleStatusMenu( initialStatus: initialValue ?? menuProvider.types?.last, statuses: menuProvider.types, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/report/service_status.dart b/lib/views/widgets/status/report/service_status.dart index 3c4eb79..245e099 100644 --- a/lib/views/widgets/status/report/service_status.dart +++ b/lib/views/widgets/status/report/service_status.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class ServiceAssetTypeMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -22,16 +23,12 @@ class ServiceAssetTypeMenu extends StatelessWidget { stateCode: _menuProvider.stateCode, onRefresh: () async { _menuProvider.reset(); - await _menuProvider.getTypes( - user: _userProvider.user, - host: _settingProvider.host - ); + await _menuProvider.getTypes(user: _userProvider.user, host: _settingProvider.host); }, child: SingleStatusMenu( initialStatus: initialValue, statuses: _menuProvider.statuses, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/service_request/service_request_defect_types_mune.dart b/lib/views/widgets/status/service_request/service_request_defect_types_mune.dart index be02c54..8607cff 100644 --- a/lib/views/widgets/status/service_request/service_request_defect_types_mune.dart +++ b/lib/views/widgets/status/service_request/service_request_defect_types_mune.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class ServiceRequestDefectTypesMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -22,16 +23,12 @@ class ServiceRequestDefectTypesMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getData( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getData(user: userProvider.user, host: settingProvider.host); }, child: SingleStatusMenu( initialStatus: initialValue, statuses: menuProvider.items, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/service_request/service_request_status_mune.dart b/lib/views/widgets/status/service_request/service_request_status_mune.dart index 8ac8d1c..4cb7f73 100644 --- a/lib/views/widgets/status/service_request/service_request_status_mune.dart +++ b/lib/views/widgets/status/service_request/service_request_status_mune.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class ServiceRequestStatusMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -22,16 +23,12 @@ class ServiceRequestStatusMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getData( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getData(user: userProvider.user, host: settingProvider.host); }, child: SingleStatusMenu( initialStatus: initialValue, statuses: menuProvider.items, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/service_request/service_request_through_mune.dart b/lib/views/widgets/status/service_request/service_request_through_mune.dart index 81a1c5b..986a595 100644 --- a/lib/views/widgets/status/service_request/service_request_through_mune.dart +++ b/lib/views/widgets/status/service_request/service_request_through_mune.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class ServiceRequestedThroughMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -22,16 +23,12 @@ class ServiceRequestedThroughMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getData( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getData(user: userProvider.user, host: settingProvider.host); }, child: SingleStatusMenu( initialStatus: initialValue, statuses: menuProvider.items, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/service_request/service_request_types_mune.dart b/lib/views/widgets/status/service_request/service_request_types_mune.dart index 1cba8f6..a588cb8 100644 --- a/lib/views/widgets/status/service_request/service_request_types_mune.dart +++ b/lib/views/widgets/status/service_request/service_request_types_mune.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/status/single_status_menu.dart'; + class ServiceRequestTypesMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -22,16 +23,12 @@ class ServiceRequestTypesMenu extends StatelessWidget { stateCode: menuProvider.stateCode, onRefresh: () async { menuProvider.reset(); - await menuProvider.getData( - user: userProvider.user, - host: settingProvider.host - ); + await menuProvider.getData(user: userProvider.user, host: settingProvider.host); }, child: SingleStatusMenu( initialStatus: initialValue, statuses: menuProvider.items, onSelect: onSelect, - ) - ); + )); } } diff --git a/lib/views/widgets/status/single_status_menu.dart b/lib/views/widgets/status/single_status_menu.dart index ee179dc..dbd2eb7 100644 --- a/lib/views/widgets/status/single_status_menu.dart +++ b/lib/views/widgets/status/single_status_menu.dart @@ -33,7 +33,7 @@ class _SingleStatusMenuState extends State { } else { _selectedStatus = null; } - if((widget.initialStatus?.id??"") != (_selectedStatus?.id??"")) { + if ((widget.initialStatus?.id ?? "") != (_selectedStatus?.id ?? "")) { widget.onSelect(_selectedStatus); } } else { diff --git a/lib/views/widgets/timer/app_timer.dart b/lib/views/widgets/timer/app_timer.dart index cbc75bc..84c5e4e 100644 --- a/lib/views/widgets/timer/app_timer.dart +++ b/lib/views/widgets/timer/app_timer.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:test_sa/models/timer_model.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class AppTimer extends StatefulWidget { final TimerModel timer; final Future Function(TimerModel) onChange; @@ -26,17 +27,16 @@ class _AppTimerState extends State { int _delay = 0; bool _running = false; bool _loading = false; - final ValueNotifier _period = ValueNotifier("0:00:00"); + final ValueNotifier _period = ValueNotifier("0:00:00"); _startTimer() async { if (!_running) { final time = DateTime.now(); - bool result = await widget.onChange( - TimerModel(startAt: time,endAt: null,durationInSecond: _delay)); - if(!result) return; + bool result = await widget.onChange(TimerModel(startAt: time, endAt: null, durationInSecond: _delay)); + if (!result) return; _running = true; - if(_endAt != null){ + if (_endAt != null) { _delay += _endAt.difference(_startAt).inSeconds; } _startAt = time.subtract(Duration(seconds: _delay)); @@ -44,19 +44,16 @@ class _AppTimerState extends State { } _timer = Timer.periodic(const Duration(seconds: 1), (timer) { - if(_loading == true) return; - _period.value = (_endAt ?? DateTime.now()).difference( - _startAt - ).toString().split(".").first; + if (_loading == true) return; + _period.value = (_endAt ?? DateTime.now()).difference(_startAt).toString().split(".").first; }); } _stopTimer() async { final time = DateTime.now(); final tempStartAt = _startAt.add(Duration(seconds: _delay)); - bool result = await widget.onChange( - TimerModel(startAt: tempStartAt,endAt: time,durationInSecond: _delay)); - if(!result) return; + bool result = await widget.onChange(TimerModel(startAt: tempStartAt, endAt: time, durationInSecond: _delay)); + if (!result) return; _running = false; _endAt = time; _startAt = tempStartAt; @@ -66,9 +63,9 @@ class _AppTimerState extends State { _onPressed() async { _loading = true; setState(() {}); - if(!_running){ + if (!_running) { await _startTimer(); - }else{ + } else { await _stopTimer(); } _loading = false; @@ -81,17 +78,19 @@ class _AppTimerState extends State { _endAt = widget.timer?.endAt; _running = _startAt != null && _endAt == null; _delay = (widget.timer?.durationInSecond ?? 0); - final difference = _startAt == null ? 0: - (_endAt ?? DateTime.now())?.difference(_startAt)?.inSeconds ?? 0; + final difference = _startAt == null ? 0 : (_endAt ?? DateTime.now())?.difference(_startAt)?.inSeconds ?? 0; _period.value = Duration(seconds: _running ? difference : _delay + difference).toString().split(".").first; super.initState(); - if(_running){_startTimer();} + if (_running) { + _startTimer(); + } } @override void dispose() { super.dispose(); } + @override Widget build(BuildContext context) { return SizedBox( @@ -99,31 +98,31 @@ class _AppTimerState extends State { height: 28 * AppStyle.getScaleFactor(context), child: ElevatedButton( style: ElevatedButton.styleFrom( - minimumSize: const Size(1, 1), - padding: EdgeInsets.all(4 * AppStyle.getScaleFactor(context)), - backgroundColor: _running ? AColors.green[300] : AColors.grey, - foregroundColor: Colors.black - ), + minimumSize: const Size(1, 1), padding: EdgeInsets.all(4 * AppStyle.getScaleFactor(context)), backgroundColor: _running ? AColors.green[300] : AColors.grey, foregroundColor: Colors.black), onPressed: _loading ? null : _onPressed, - child: _loading ? const SizedBox.square( - dimension: 18,child: CircularProgressIndicator(color: Colors.white,)): - Row( - children: [ - Icon(_running ? Icons.pause : Icons.play_arrow), - Expanded( - child: Center( - child: ValueListenableBuilder( - valueListenable: _period, - builder: (context,value,_){ - return Text(value, - style: widget.style, - ); - } - ), + child: _loading + ? const SizedBox.square( + dimension: 18, + child: CircularProgressIndicator( + color: Colors.white, + )) + : Row( + children: [ + Icon(_running ? Icons.pause : Icons.play_arrow), + Expanded( + child: Center( + child: ValueListenableBuilder( + valueListenable: _period, + builder: (context, value, _) { + return Text( + value, + style: widget.style, + ); + }), + ), + ), + ], ), - ), - ], - ), ), ); } diff --git a/lib/views/widgets/timer/timer_manager.dart b/lib/views/widgets/timer/timer_manager.dart index e69de29..8b13789 100644 --- a/lib/views/widgets/timer/timer_manager.dart +++ b/lib/views/widgets/timer/timer_manager.dart @@ -0,0 +1 @@ + diff --git a/lib/views/widgets/titles/app_sub_title.dart b/lib/views/widgets/titles/app_sub_title.dart index f5651c6..d1fc378 100644 --- a/lib/views/widgets/titles/app_sub_title.dart +++ b/lib/views/widgets/titles/app_sub_title.dart @@ -1,11 +1,12 @@ import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class ASubTitle extends StatelessWidget { final String text; final EdgeInsets padding; final Color color; final double font; - const ASubTitle(this.text, {Key key,this.padding, this.color, this.font}) : super(key: key); + const ASubTitle(this.text, {Key key, this.padding, this.color, this.font}) : super(key: key); @override Widget build(BuildContext context) { return Padding( @@ -13,10 +14,9 @@ class ASubTitle extends StatelessWidget { child: Text( text, style: Theme.of(context).textTheme.bodyText1.copyWith( - // fontWeight: FontWeight.bold, - fontSize: font, - color: color - ), + // fontWeight: FontWeight.bold, + fontSize: font, + color: color), textScaleFactor: AppStyle.getScaleFactor(context), ), ); diff --git a/lib/views/widgets/titles/app_title.dart b/lib/views/widgets/titles/app_title.dart index e5dfbc9..15e0c58 100644 --- a/lib/views/widgets/titles/app_title.dart +++ b/lib/views/widgets/titles/app_title.dart @@ -1,18 +1,17 @@ import 'package:flutter/material.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class ATitle extends StatelessWidget { final String text; final EdgeInsets padding; final bool center; - const ATitle(this.text, {Key key,this.padding,this.center= false}) : super(key: key); + const ATitle(this.text, {Key key, this.padding, this.center = false}) : super(key: key); @override Widget build(BuildContext context) { return Padding( - padding: padding ?? EdgeInsets.symmetric(horizontal: 16,vertical: 8), + padding: padding ?? EdgeInsets.symmetric(horizontal: 16, vertical: 8), child: Row( - mainAxisAlignment: center - ? MainAxisAlignment.center - : MainAxisAlignment.start, + mainAxisAlignment: center ? MainAxisAlignment.center : MainAxisAlignment.start, children: [ Text( text, diff --git a/lib/views/widgets/titles/expandable_info_row.dart b/lib/views/widgets/titles/expandable_info_row.dart index b5d24e6..318ca32 100644 --- a/lib/views/widgets/titles/expandable_info_row.dart +++ b/lib/views/widgets/titles/expandable_info_row.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class ExpandableInfoRow extends StatefulWidget { final IconData iconData; final String title; @@ -12,13 +13,12 @@ class ExpandableInfoRow extends StatefulWidget { _ExpandableInfoRowState createState() => _ExpandableInfoRowState(); } -class _ExpandableInfoRowState extends State - with TickerProviderStateMixin{ +class _ExpandableInfoRowState extends State with TickerProviderStateMixin { bool _isExpanded = false; @override Widget build(BuildContext context) { return InkWell( - onTap: (){ + onTap: () { _isExpanded = !_isExpanded; setState(() {}); }, @@ -26,18 +26,19 @@ class _ExpandableInfoRowState extends State children: [ Row( children: [ - widget.iconData != null ? - Padding( - padding: EdgeInsets.symmetric( - horizontal: 8 * AppStyle.getScaleFactor(context), - vertical: 2 * AppStyle.getScaleFactor(context), - ), - child: FaIcon( - widget.iconData, - color: Theme.of(context).primaryColor, - size: 20 * AppStyle.getScaleFactor(context), - ), - ):SizedBox.shrink(), + widget.iconData != null + ? Padding( + padding: EdgeInsets.symmetric( + horizontal: 8 * AppStyle.getScaleFactor(context), + vertical: 2 * AppStyle.getScaleFactor(context), + ), + child: FaIcon( + widget.iconData, + color: Theme.of(context).primaryColor, + size: 20 * AppStyle.getScaleFactor(context), + ), + ) + : SizedBox.shrink(), Expanded( flex: 2, child: Text( @@ -47,27 +48,20 @@ class _ExpandableInfoRowState extends State fontSize: 14, fontWeight: FontWeight.bold, ), - textScaleFactor: AppStyle.getScaleFactor(context), + textScaleFactor: AppStyle.getScaleFactor(context), ), ), AnimatedSwitcher( duration: Duration(milliseconds: 400), transitionBuilder: (Widget child, Animation animation) { return FadeTransition( - child: ScaleTransition( - child: child, - scale: animation - ), + child: ScaleTransition(child: child, scale: animation), opacity: animation, ); }, child: Icon( - _isExpanded - ? Icons.keyboard_arrow_up - : Icons.keyboard_arrow_down, - key: ValueKey(_isExpanded - ? "Icons.keyboard_arrow_up" - : "Icons.keyboard_arrow_down"), + _isExpanded ? Icons.keyboard_arrow_up : Icons.keyboard_arrow_down, + key: ValueKey(_isExpanded ? "Icons.keyboard_arrow_up" : "Icons.keyboard_arrow_down"), color: Theme.of(context).primaryColor, size: 24 * AppStyle.getScaleFactor(context), ), @@ -77,15 +71,18 @@ class _ExpandableInfoRowState extends State AnimatedSize( duration: Duration(milliseconds: 300), child: Visibility( - visible: _isExpanded, - child: Padding( - padding: EdgeInsets.symmetric(vertical: 8 * AppStyle.getScaleFactor(context)), - child: widget.child, - ) - ), + visible: _isExpanded, + child: Padding( + padding: EdgeInsets.symmetric(vertical: 8 * AppStyle.getScaleFactor(context)), + child: widget.child, + )), + ), + Divider( + height: 2 * AppStyle.getScaleFactor(context), + ), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), ), - Divider(height: 2 * AppStyle.getScaleFactor(context),), - SizedBox(height: 8 * AppStyle.getScaleFactor(context),), ], ), ); diff --git a/lib/views/widgets/visits/visit_status.dart b/lib/views/widgets/visits/visit_status.dart index 5fb3191..f582fe9 100644 --- a/lib/views/widgets/visits/visit_status.dart +++ b/lib/views/widgets/visits/visit_status.dart @@ -2,43 +2,36 @@ import 'package:flutter/material.dart'; import 'package:test_sa/models/visits/visit.dart'; import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/app_style/sizing.dart'; + class VisitStatusLabel extends StatelessWidget { final Visit visit; const VisitStatusLabel({Key key, this.visit}) : super(key: key); - Color getStatusColor(){ - switch(visit.status.id){ - case 0: return AColors.green; - case 1: return AColors.grey; - case 2: return AColors.grey; - default : return AColors.grey; + Color getStatusColor() { + switch (visit.status.id) { + case 0: + return AColors.green; + case 1: + return AColors.grey; + case 2: + return AColors.grey; + default: + return AColors.grey; } } @override Widget build(BuildContext context) { - return Container( - padding: EdgeInsets.symmetric(vertical: 2,horizontal: 8), + return Container( + padding: EdgeInsets.symmetric(vertical: 2, horizontal: 8), alignment: Alignment.center, - decoration: BoxDecoration( - color: getStatusColor(), - borderRadius: BorderRadius.circular( - AppStyle.getBorderRadius(context) - ), - boxShadow: [ - AppStyle.boxShadow - ] - ), + decoration: BoxDecoration(color: getStatusColor(), borderRadius: BorderRadius.circular(AppStyle.getBorderRadius(context)), boxShadow: [AppStyle.boxShadow]), child: Text( - visit.status.name == null - || visit.status.name.isEmpty - ? "no status" :visit.status.name, + visit.status.name == null || visit.status.name.isEmpty ? "no status" : visit.status.name, style: Theme.of(context).textTheme.subtitle2.copyWith( - color: getStatusColor().computeLuminance() > 0.5 - ? AColors.black : Colors.white, - ), - ) - ); + color: getStatusColor().computeLuminance() > 0.5 ? AColors.black : Colors.white, + ), + )); } } diff --git a/lib/views/widgets/visits/visits_list.dart b/lib/views/widgets/visits/visits_list.dart index ba68851..c848892 100644 --- a/lib/views/widgets/visits/visits_list.dart +++ b/lib/views/widgets/visits/visits_list.dart @@ -7,19 +7,14 @@ import 'package:test_sa/views/pages/user/visits/visit_details.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/no_item_found.dart'; import 'package:test_sa/views/widgets/visits/visit_item.dart'; + class VisitsList extends StatefulWidget { final List visits; final bool nextPage; final Future Function() onLazyLoad; final Function(List) onEditGroup; - const VisitsList({ - Key key, - this.visits, - this.nextPage, - this.onLazyLoad, - this.onEditGroup - }) : super(key: key); + const VisitsList({Key key, this.visits, this.nextPage, this.onLazyLoad, this.onEditGroup}) : super(key: key); @override _VisitsListState createState() => _VisitsListState(); @@ -32,11 +27,14 @@ class _VisitsListState extends State { _selectedVisits.clear(); super.initState(); } + @override Widget build(BuildContext context) { Subtitle _subtitle = AppLocalization.of(context).subtitle; - if(widget.visits.length == 0){ - return NoItemFound(message: _subtitle.noVisitsFound,); + if (widget.visits.length == 0) { + return NoItemFound( + message: _subtitle.noVisitsFound, + ); } return Stack( children: [ @@ -44,34 +42,33 @@ class _VisitsListState extends State { nextPage: widget.nextPage, onLazyLoad: widget.onLazyLoad, child: ListView.builder( - //physics: BouncingScrollPhysics(), - itemCount: widget.visits.length, - padding: EdgeInsets.symmetric(horizontal: 16,vertical: 8), - itemBuilder: (context,itemIndex){ - Visit _visit = widget.visits[itemIndex]; - bool _isSelected = _selectedVisits.contains(_visit); + //physics: BouncingScrollPhysics(), + itemCount: widget.visits.length, + padding: EdgeInsets.symmetric(horizontal: 16, vertical: 8), + itemBuilder: (context, itemIndex) { + Visit _visit = widget.visits[itemIndex]; + bool _isSelected = _selectedVisits.contains(_visit); return VisitItem( visit: _visit, isSelected: _isSelected, index: itemIndex, activeSelectMod: _selectedVisits.isNotEmpty, - onPressed: (visit){ - Navigator.of(context).push( - MaterialPageRoute( - builder: (_)=> VisitDetailsPage(visit: visit,) - ) - ); + onPressed: (visit) { + Navigator.of(context).push(MaterialPageRoute( + builder: (_) => VisitDetailsPage( + visit: visit, + ))); }, - onSelect: (visit){ - if(_isSelected){ + onSelect: (visit) { + if (_isSelected) { _selectedVisits.remove(visit); } else { _selectedVisits.add(visit); } setState(() {}); }, - onLongPress: (visit){ - if(_isSelected){ + onLongPress: (visit) { + if (_isSelected) { _selectedVisits.remove(visit); } else { _selectedVisits.add(visit); @@ -79,8 +76,7 @@ class _VisitsListState extends State { setState(() {}); }, ); - } - ), + }), ), Align( alignment: Alignment.bottomLeft, @@ -97,7 +93,7 @@ class _VisitsListState extends State { FloatingActionButton( heroTag: "cancel", child: Icon(Icons.cancel), - onPressed: (){ + onPressed: () { _selectedVisits.clear(); setState(() {}); }, @@ -105,8 +101,8 @@ class _VisitsListState extends State { FloatingActionButton( heroTag: "edit", child: Icon(Icons.edit), - onPressed: (){ - if(!widget.visits.contains(_selectedVisits.first)){ + onPressed: () { + if (!widget.visits.contains(_selectedVisits.first)) { _selectedVisits.clear(); setState(() {}); return; From 2a5a8f411f9eadb34d6ccb5662a5c5d211838f64 Mon Sep 17 00:00:00 2001 From: nextwo <1234> Date: Wed, 31 May 2023 11:20:12 +0300 Subject: [PATCH 4/7] implement searchWorkOrders api and edit on ui --- lib/views/pages/user/requests/request_details.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/views/pages/user/requests/request_details.dart b/lib/views/pages/user/requests/request_details.dart index 1deaaca..c79931e 100644 --- a/lib/views/pages/user/requests/request_details.dart +++ b/lib/views/pages/user/requests/request_details.dart @@ -327,7 +327,7 @@ class RequestDetailsPage extends StatelessWidget { children: [ RequestInfoRow( title: _subtitle.callId, - content: workOrders[index].id.toString(), + content: serviceRequest.requestCode, ), RequestInfoRow( title: _subtitle.orderWorkNumber, From 4e89566d1fe12b0ffe40795f3f85d91a32019126 Mon Sep 17 00:00:00 2001 From: nextwo <1234> Date: Wed, 31 May 2023 12:05:09 +0300 Subject: [PATCH 5/7] implement searchWorkOrders api and edit on ui --- assets/subtitles/ar_subtitle.json | 4 +--- assets/subtitles/en_subtitle.json | 2 -- lib/models/user.dart | 9 +++----- .../report/future_service_report.dart | 21 ++++++++----------- 4 files changed, 13 insertions(+), 23 deletions(-) diff --git a/assets/subtitles/ar_subtitle.json b/assets/subtitles/ar_subtitle.json index cf09ef8..885647d 100644 --- a/assets/subtitles/ar_subtitle.json +++ b/assets/subtitles/ar_subtitle.json @@ -137,7 +137,6 @@ "workPerformed": "العمل انجز", "actualDate": "تاريخ الفعلي", - "done": "تم الانتهاء", "expectDate": "التاريخ المتوقع", "images": "الصور", "imagesRequired": "الصور مطلوبة", @@ -195,8 +194,7 @@ "assetName": "اسم الاصل", "site": "الموقع", "maintenanceSituation": "موقع الصيانه", - "currentSituation": "الموقع الحالي" - "duplicateRequest": "تكرار الطلب", + "currentSituation": "الموقع الحالي", "comment" : "تعليق", "updateServiceRequest" : "تعديل طلب الخدمة" } \ No newline at end of file diff --git a/assets/subtitles/en_subtitle.json b/assets/subtitles/en_subtitle.json index 068fa16..36162c4 100644 --- a/assets/subtitles/en_subtitle.json +++ b/assets/subtitles/en_subtitle.json @@ -136,7 +136,6 @@ "workPerformed": "Work Performed", "actualDate": "Actual Date", - "done": "Done", "expectDate": "Expect Date", "images": "Images", "imagesRequired": "Images Required", @@ -198,6 +197,5 @@ "duplicateRequest": "Duplicate Request", "comment" : "Comment", "updateServiceRequest" : "Update Service Request" - "duplicateRequest": "Duplicate Request" } \ No newline at end of file diff --git a/lib/models/user.dart b/lib/models/user.dart index 7cfcb71..880e4fc 100644 --- a/lib/models/user.dart +++ b/lib/models/user.dart @@ -76,7 +76,7 @@ class User { } UsersTypes get type { - switch (userRoles.first.name) { + switch (userRoles?.first?.name) { case "Engineer": return UsersTypes.engineer; case "Hospital": @@ -157,11 +157,8 @@ class User { password = json['password']; token = json['token']; roles = json['roles']; - if (json['userRoles'] != null) { - userRoles = []; - json['userRoles'].forEach((v) { - userRoles.add(UserRoles.fromJson(v)); - }); + if (userRoles != null) { + json['userRoles'] = userRoles.map((v) => v.toJson()).toList(); } tokenlife = json['tokenlife']; isAuthenticated = json['isAuthenticated']; diff --git a/lib/views/pages/user/requests/report/future_service_report.dart b/lib/views/pages/user/requests/report/future_service_report.dart index 15c792e..1a987b0 100644 --- a/lib/views/pages/user/requests/report/future_service_report.dart +++ b/lib/views/pages/user/requests/report/future_service_report.dart @@ -12,18 +12,18 @@ import 'package:test_sa/views/widgets/loaders/app_loading.dart'; import 'package:test_sa/views/widgets/loaders/failed_loading.dart'; import 'edit_service_report.dart'; + class FutureServiceReport extends StatefulWidget { final ServiceRequest request; final SearchWorkOrders workOrder; - const FutureServiceReport({Key key, this.request,this.workOrder}) : super(key: key); + const FutureServiceReport({Key key, this.request, this.workOrder}) : super(key: key); @override _FutureServiceReportState createState() => _FutureServiceReportState(); } class _FutureServiceReportState extends State { - UserProvider _userProvider; SettingProvider _settingProvider; @override @@ -33,19 +33,16 @@ class _FutureServiceReportState extends State { Subtitle _subtitle = AppLocalization.of(context).subtitle; return Scaffold( body: FutureBuilder( - future: ServiceRequestsProvider().getSingleServiceReport( - reportId: widget.workOrder.id, - user: _userProvider.user, - host: _settingProvider.host, - subtitle: _subtitle - ), - builder: (BuildContext context, AsyncSnapshot snapshot){ - if(snapshot.hasError) + future: ServiceRequestsProvider().getSingleServiceReport(reportId: widget.workOrder.id, user: _userProvider.user, host: _settingProvider.host, subtitle: _subtitle), + builder: (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.hasError) return FailedLoading( message: snapshot.error.toString(), - onReload: (){setState(() {});}, + onReload: () { + setState(() {}); + }, ); - if(snapshot.hasData){ + if (snapshot.hasData) { return EditServiceReport( report: snapshot.data, request: widget.request, From 37df63c86698d8ad3bb8248ed910225586bf55fd Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 31 May 2023 15:25:59 +0300 Subject: [PATCH 6/7] user role parsing fix. --- lib/models/user.dart | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/models/user.dart b/lib/models/user.dart index 880e4fc..c64c471 100644 --- a/lib/models/user.dart +++ b/lib/models/user.dart @@ -157,8 +157,11 @@ class User { password = json['password']; token = json['token']; roles = json['roles']; - if (userRoles != null) { - json['userRoles'] = userRoles.map((v) => v.toJson()).toList(); + if (json['userRoles'] != null) { + userRoles = []; + json['userRoles'].forEach((v) { + userRoles.add(UserRoles.fromJson(v)); + }); } tokenlife = json['tokenlife']; isAuthenticated = json['isAuthenticated']; From 49147eab3df538a6222d15642643dd1ef5f82b35 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 31 May 2023 16:17:49 +0300 Subject: [PATCH 7/7] improvement. --- lib/views/pages/user/requests/request_details.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/views/pages/user/requests/request_details.dart b/lib/views/pages/user/requests/request_details.dart index c79931e..8f77c34 100644 --- a/lib/views/pages/user/requests/request_details.dart +++ b/lib/views/pages/user/requests/request_details.dart @@ -302,7 +302,7 @@ class RequestDetailsPage extends StatelessWidget { future: _serviceRequestsProvider.searchWorkOrders(callId: serviceRequest.requestCode), builder: (context, snap) { workOrders = snap.data as List; - if (snap.connectionState == ConnectionState.done && (snap.data?.length ?? 0) != 0) + if (snap.connectionState == ConnectionState.done && (snap.data?.length ?? 0) != 0) { return ListView.separated( padding: EdgeInsets.all(21), itemCount: workOrders.length, @@ -384,7 +384,7 @@ class RequestDetailsPage extends StatelessWidget { ); }, ); - else + } else { return _userProvider.user.type == UsersTypes.engineer ? Center( child: Padding( @@ -405,6 +405,7 @@ class RequestDetailsPage extends StatelessWidget { : Center( child: ASubTitle(_subtitle.noDateFound), ); + } }, ) ],