diff --git a/lib/controllers/providers/api/device_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart index faebf33..8db040a 100644 --- a/lib/controllers/providers/api/device_transfer_provider.dart +++ b/lib/controllers/providers/api/device_transfer_provider.dart @@ -8,13 +8,12 @@ import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/models/user.dart'; -class DeviceTransferProvider extends ChangeNotifier{ - +class DeviceTransferProvider 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; @@ -41,12 +40,11 @@ class DeviceTransferProvider 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; // isLoading = false; @@ -64,9 +62,9 @@ class DeviceTransferProvider extends ChangeNotifier{ // notifyListeners(); // return 200; Response response; - try{ - Map body = {}; - body["pageNumber"] = (items?.length ?? 0) ~/pageItemNumber + 1; + try { + Map body = {}; + body["pageNumber"] = (items?.length ?? 0) ~/ pageItemNumber + 1; body["pageSize"] = pageItemNumber; response = await ApiManager.instance.post( @@ -75,38 +73,35 @@ class DeviceTransferProvider extends ChangeNotifier{ ); stateCode = response.statusCode; - if(stateCode >= 200 && stateCode < 300) { + if (stateCode >= 200 && stateCode < 300) { // client's request was successfully received List listJson = json.decode(response.body)["data"]; - List itemsPage = listJson.map( - (request) => DeviceTransfer.fromJson(request)).toList(); + List itemsPage = listJson.map((request) => DeviceTransfer.fromJson(request)).toList(); items ??= []; items.addAll(itemsPage); - if(itemsPage.length == pageItemNumber){ + if (itemsPage.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; } - } - Future createRequest ({ + Future createRequest({ @required String host, @required User user, @required DeviceTransfer model, }) async { - Map body = { + Map body = { // "uid": user.id.toString(), // "token": user.token ?? "", "assetId": model.device.id ?? "", @@ -115,34 +110,23 @@ class DeviceTransferProvider extends ChangeNotifier{ "senderSiteId": model.receiver.client.id ?? "", }; - Response response; - try{ - response = await ApiManager.instance.post( - URLs.requestDeviceTransfer, - body: body - ); + try { + response = await ApiManager.instance.post(URLs.requestDeviceTransfer, body: body); stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { - if(items != null) { - items.insert( - 0, - DeviceTransfer.fromJson( - json.decode(utf8.decode(response.bodyBytes))[0] - ) - ); + if (response.statusCode >= 200 && response.statusCode < 300) { + if (items != null) { + items.insert(0, DeviceTransfer.fromJson(json.decode(utf8.decode(response.bodyBytes))[0])); notifyListeners(); } } return response.statusCode; - - } catch(error) { + } catch (error) { return -1; } - } - Future updateRequest ({ + Future updateRequest({ @required String host, @required User user, @required bool isSender, @@ -150,57 +134,49 @@ class DeviceTransferProvider extends ChangeNotifier{ @required DeviceTransfer oldModel, @required DeviceTransferInfo newModel, }) async { - - Map body = { + Map body = { "id": oldModel.id, "assetId": oldModel.device.id ?? "", "senderSiteId": oldModel.sender.client.id, "destSiteId": oldModel.receiver.client.id, - "destDepartmentId": oldModel.receiver.department.id, + "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": "${DateTime.now().toIso8601String()}.png|${newModel.signature}", - } - ); - }else{ - body.addAll( - { - //"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": "${DateTime.now().toIso8601String()}.png|${newModel.signature}", - } - ); + 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": "${DateTime.now().toIso8601String()}.png|${newModel.signature}", + }); + } else { + body.addAll({ + //"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": "${DateTime.now().toIso8601String()}.png|${newModel.signature}", + }); } body.addAll(newModel.toJson(isSender)); Response response; - try{ - response = await ApiManager.instance.put( - URLs.updateDeviceTransfer, - body: body - ); + try { + response = await ApiManager.instance.put(URLs.updateDeviceTransfer, body: body); // response = await post( // Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"), // body: body, // ); stateCode = response.statusCode; - if(response.statusCode >= 200 && response.statusCode < 300) { + if (response.statusCode >= 200 && response.statusCode < 300) { reset(); // oldModel.fromDeviceTransfer( // DeviceTransfer.fromJson( @@ -210,10 +186,8 @@ class DeviceTransferProvider extends ChangeNotifier{ notifyListeners(); } return response.statusCode; - - } catch(error) { + } catch (error) { 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 458ed9d..f7eaa38 100644 --- a/lib/controllers/providers/api/devices_provider.dart +++ b/lib/controllers/providers/api/devices_provider.dart @@ -8,10 +8,9 @@ import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/user.dart'; -class DevicesProvider extends ChangeNotifier{ - +class DevicesProvider extends ChangeNotifier { //reset provider data - void reset(){ + void reset() { _devices = null; _stateCode = null; } @@ -30,7 +29,7 @@ class DevicesProvider extends ChangeNotifier{ // failed _loading = false bool _loading; bool get isLoading => _loading; - set isLoading(bool isLoading){ + set isLoading(bool isLoading) { _loading = isLoading; notifyListeners(); } @@ -40,36 +39,32 @@ class DevicesProvider 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 getEquipment ({ + Future getEquipment({ @required String host, @required User user, @required int hospitalId, String serialNumber, String number, }) async { - if(_loading == true) - return -2; + if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; - try{ - response = await ApiManager.instance.post( - URLs.getEquipment, - body: { - "pageSize":50, - "siteId":hospitalId, - if(serialNumber?.isEmpty == false) "assetSerialNumber":serialNumber, - if(number?.isEmpty == false) "assetNo":number, - } - ); - } catch(error) { + try { + response = await ApiManager.instance.post(URLs.getEquipment, body: { + "pageSize": 50, + "siteId": hospitalId, + if (serialNumber?.isEmpty == false) "assetSerialNumber": serialNumber, + if (number?.isEmpty == false) "assetNo": number, + }); + } catch (error) { _loading = 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 equipmentListJson = json.decode(response.body)["data"]; _devices = equipmentListJson.map((device) => Device.fromJson(device)).toList(); @@ -84,7 +79,7 @@ class DevicesProvider 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> getDevicesList ({ + Future> getDevicesList({ @required String host, @required User user, @required int hospitalId, @@ -92,95 +87,82 @@ class DevicesProvider extends ChangeNotifier{ String number, }) async { Response response; - try{ - response = await ApiManager.instance.post( - URLs.getEquipment, - body: { - "pageSize":50, - "siteId":hospitalId, - if(serialNumber?.isEmpty == false) "assetSerialNumber":serialNumber, - if(number?.isEmpty == false) "assetNo":number, - } - ); + try { + response = await ApiManager.instance.post(URLs.getEquipment, body: { + "pageSize": 50, + "siteId": hospitalId, + if (serialNumber?.isEmpty == false) "assetSerialNumber": serialNumber, + if (number?.isEmpty == false) "assetNo": number, + }); // response = await get( // Uri.parse("$host${URLs.getEquipment}?siteId=$hospitalId" // "${serialNumber?.isEmpty == false ? "&assetSerialNumber=$serialNumber" :""}" // "${number?.isEmpty == false ? "&assetNo=$number" : ""}" // ), // ); - 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 equipmentListJson = json.decode(response.body)["data"]; page = equipmentListJson.map((device) => Device.fromJson(device)).toList(); } return page; - } catch(error) { + } catch (error) { return []; } - } Future> getModels({ String code, }) async { Response response; - try{ + try { response = await ApiManager.instance.get( - URLs.getModels+"?code=$code", + URLs.getModels + "?code=$code", ); - 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((json) => - Lookup( - name: json["modelDefCode"], - id: json["id"], - value: json["id"], - ) - ).toList(); + page = categoriesListJson + .map((json) => Lookup( + name: json["modelDefCode"], + id: json["id"], + value: json["id"], + )) + .toList(); } return page; - } catch(error) { + } catch (error) { return []; } - } - /// 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> getDevicesListBySN ({ - @required String host, - @required User user, - @required int hospitalId, - @required String sn - }) async { + Future> getDevicesListBySN({@required String host, @required User user, @required int hospitalId, @required String sn}) async { Response response; - try{ + try { response = await get( - Uri.parse(host + URLs.getEquipment+"?client=$hospitalId" - + ( sn == null || sn.isEmpty ? "" : "&serial_qr=$sn" )), + Uri.parse(URLs.getEquipment + "?client=$hospitalId" + (sn == null || sn.isEmpty ? "" : "&serial_qr=$sn")), ); _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(utf8.decode(response.bodyBytes)); _page = categoriesListJson.map((device) => Device.fromJson(device)).toList(); } return _page; - } catch(error) { + } catch (error) { _loading = false; _stateCode = -1; notifyListeners(); return []; } - } -} \ No newline at end of file +} diff --git a/lib/models/user.dart b/lib/models/user.dart index aea639a..05a1f3c 100644 --- a/lib/models/user.dart +++ b/lib/models/user.dart @@ -3,7 +3,7 @@ import 'package:test_sa/models/department.dart'; import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/hospital.dart'; -class User{ +class User { String id; String userName; String password; @@ -17,106 +17,92 @@ class User{ bool isActive; DateTime tokenLife; - - User({ - this.id, - this.userName = "", - this.email = "", - this.password = "", - this.phoneNumber = "", - this.hospital, - this.department, - this.type, - this.whatsApp, - this.token, - this.tokenLife, - this.isActive = false - }); + User( + {this.id, + this.userName = "", + this.email = "", + this.password = "", + this.phoneNumber = "", + this.hospital, + this.department, + this.type, + this.whatsApp, + this.token, + this.tokenLife, + this.isActive = false}); Future> toLoginJson() async { - if(FirebaseNotificationManger.token == null) - await FirebaseNotificationManger.getToken(); + if (FirebaseNotificationManger.token == null) await FirebaseNotificationManger.getToken(); return { - "username":userName, - "password":password, + "username": userName, + "password": password, "firebase_token": FirebaseNotificationManger?.token ?? "", }; } - Map toUpdateProfileJson(){ - Map jsonObject ={}; - if(department?.id != null) - jsonObject["department"] = department.id; - if(whatsApp != null && whatsApp.isNotEmpty) - jsonObject["whatsapp"] = whatsApp; - if(phoneNumber != null && phoneNumber.isNotEmpty) - jsonObject["phone"] = phoneNumber; + Map toUpdateProfileJson() { + Map jsonObject = {}; + if (department?.id != null) jsonObject["department"] = department.id; + if (whatsApp != null && whatsApp.isNotEmpty) jsonObject["whatsapp"] = whatsApp; + if (phoneNumber != null && phoneNumber.isNotEmpty) jsonObject["phone"] = phoneNumber; return jsonObject; } Future> toRegisterJson() async { - if(FirebaseNotificationManger.token == null) - await FirebaseNotificationManger.getToken(); + if (FirebaseNotificationManger.token == null) await FirebaseNotificationManger.getToken(); return { "username": userName, - "email":email, - "whatsapp":whatsApp, - "client":hospital.id, - "department":department?.id, - "phone":phoneNumber, - "pass":password, + "email": email, + "whatsapp": whatsApp, + "client": hospital.id, + "department": department?.id, + "phone": phoneNumber, + "pass": password, "firebase_token": FirebaseNotificationManger?.token ?? "", }; } - Map toJson(){ + Map toJson() { return { - "userID":id, + "userID": id, "username": userName, - "email":email, - "token":token, - "phoneNumber":phoneNumber, - "whatsapp":whatsApp, - "client_id":hospital?.id, - "client_name":hospital?.name, - "department_id":department?.id, - "department_name":department?.name, + "email": email, + "token": token, + "phoneNumber": phoneNumber, + "whatsapp": whatsApp, + "client_id": hospital?.id, + "client_name": hospital?.name, + "department_id": department?.id, + "department_name": department?.name, //"password":password, - "tokenlife":tokenLife.toIso8601String(), - "active":isActive, - "userRoles": type == UsersTypes.engineer - ? "value: R-6" : "value: R-5" , - // "token":token, pass is token + "tokenlife": tokenLife.toIso8601String(), + "active": isActive, + "userRoles": type == UsersTypes.engineer ? "value: R-6" : "value: R-5", + // "token":token, pass is token }; } - factory User.fromJson(Map parsedJson){ + factory User.fromJson(Map parsedJson) { UsersTypes type; - if(parsedJson["userRoles"].toString().contains("value: R-4") - || parsedJson["userRoles"].toString().contains("value: R-5") - || parsedJson["userRoles"].toString().contains("value: R-7")){ + if (parsedJson["userRoles"].toString().contains("value: R-4") || parsedJson["userRoles"].toString().contains("value: R-5") || parsedJson["userRoles"].toString().contains("value: R-7")) { type = UsersTypes.normal_user; } else { type = UsersTypes.engineer; } return User( - id: parsedJson["userID"], - userName: parsedJson["username"], - email: parsedJson["email"], - hospital: Hospital( - id: parsedJson["client_id"], - name: parsedJson["client_name"] - ), - department: Department( - id: parsedJson["department_id"], - name: parsedJson["department_name"], - ), - phoneNumber: parsedJson["phoneNumber"], - whatsApp: parsedJson["phoneNumber"], - token: parsedJson["token"], - isActive: parsedJson["isAuthenticated"], - tokenLife: DateTime.tryParse(parsedJson["tokenlife"]??""), - type:type - ); + id: parsedJson["userID"], + userName: parsedJson["username"], + email: parsedJson["email"], + hospital: Hospital(id: parsedJson["client_id"], name: parsedJson["client_name"]), + department: Department( + id: parsedJson["department_id"], + name: parsedJson["department_name"], + ), + phoneNumber: parsedJson["phoneNumber"], + whatsApp: parsedJson["phoneNumber"], + token: parsedJson["token"], + isActive: parsedJson["isAuthenticated"], + tokenLife: DateTime.tryParse(parsedJson["tokenlife"] ?? ""), + type: type); } -} \ No newline at end of file +} diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index d3e3e47..ce0f827 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -19,6 +19,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 '../../../../controllers/localization/localization.dart'; + class UpdateDeviceTransfer extends StatefulWidget { final DeviceTransfer model; final bool isSender; @@ -43,25 +44,19 @@ class _UpdateDeviceTransferState extends State { _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 _deviceTransferProvider.updateRequest( - user: _userProvider.user, - host: _settingProvider.host, - requestId: widget.model.id, - isSender: widget.isSender, - newModel: _formModel, - oldModel: widget.model - ); - _isLoading =false; + user: _userProvider.user, host: _settingProvider.host, requestId: widget.model.id, isSender: widget.isSender, newModel: _formModel, oldModel: widget.model); + _isLoading = false; setState(() {}); - if(status >= 200 && status < 300){ + if (status >= 200 && status < 300) { Fluttertoast.showToast( msg: _subtitle.requestCompleteSuccessfully, ); @@ -72,16 +67,13 @@ class _UpdateDeviceTransferState extends State { } @override - void setState(VoidCallback fn){ - if(!mounted) super.setState(() {}); + void setState(VoidCallback fn) { + if (!mounted) super.setState(() {}); } @override void initState() { - _formModel.fromDetails(widget.isSender - ? widget.model.sender : widget.model.receiver, - withSignature: false - ); + _formModel.fromDetails(widget.isSender ? widget.model.sender : widget.model.receiver, withSignature: false); super.initState(); } @@ -96,7 +88,7 @@ class _UpdateDeviceTransferState extends State { _subtitle = AppLocalization.of(context).subtitle; _userProvider = Provider.of(context); _settingProvider = Provider.of(context); - _deviceTransferProvider = Provider.of(context,listen: false); + _deviceTransferProvider = Provider.of(context, listen: false); return Scaffold( key: _scaffoldKey, body: Form( @@ -117,48 +109,56 @@ class _UpdateDeviceTransferState extends State { padding: const EdgeInsets.all(8.0), child: Text( "Edit Transfer Device", - 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), ), ), ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), ASubTitle("Comment"), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ATextFormField( initialValue: _formModel?.comment, textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, textInputType: TextInputType.text, - onSaved: (value){ + onSaved: (value) { _formModel.comment = value; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), ASubTitle(_subtitle.travelingHours), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ATextFormField( initialValue: _formModel?.travelingHours, textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, textInputType: TextInputType.number, - onSaved: (value){ + onSaved: (value) { _formModel.travelingHours = value; }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), ASubTitle(_subtitle.workingHours), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ATextFormField( initialValue: _formModel?.workingHours, textAlign: TextAlign.center, style: Theme.of(context).textTheme.subtitle1, textInputType: TextInputType.number, - onSaved: (value){ + onSaved: (value) { _formModel.workingHours = value; }, ), @@ -174,32 +174,37 @@ class _UpdateDeviceTransferState extends State { // setState(() {}); // }, // ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), ASubTitle(_subtitle.status), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), GasStatusMenu( initialValue: _formModel.status, - onSelect: (status){ + onSelect: (status) { _formModel.status = status; setState(() {}); }, ), - const SizedBox(height: 8,), + const SizedBox( + height: 8, + ), const ASubTitle("Signature"), // if(_validate && _formModel.signature == null) // ASubTitle(_subtitle.requiredWord,color: Colors.red,), - const SizedBox(height: 4,), + const SizedBox( + height: 4, + ), ESignature( - oldSignature: widget.isSender - ? widget.model.sender.signature - : widget.model.receiver.signature, - newSignature: _signature, - onSaved: (signature){ - _signature = signature; - if(signature == null || signature.isEmpty) return; - _formModel.signature = base64Encode(signature); - - }, + oldSignature: widget.isSender ? widget.model.sender.signature : widget.model.receiver.signature, + newSignature: _signature, + onSaved: (signature) { + _signature = signature; + if (signature == null || signature.isEmpty) return; + _formModel.signature = base64Encode(signature); + }, ), Padding( padding: const EdgeInsets.all(16.0), @@ -208,7 +213,9 @@ class _UpdateDeviceTransferState extends State { onPressed: _update, ), ), - const SizedBox(height: 100,) + const SizedBox( + height: 100, + ) ], ), ), @@ -218,4 +225,3 @@ class _UpdateDeviceTransferState extends State { ); } } - diff --git a/lib/views/pages/user/land_page.dart b/lib/views/pages/user/land_page.dart index 41c4826..096e300 100644 --- a/lib/views/pages/user/land_page.dart +++ b/lib/views/pages/user/land_page.dart @@ -1,6 +1,5 @@ import 'dart:io'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; @@ -26,7 +25,6 @@ import 'package:test_sa/views/pages/device_transfer/request_device_transfer.dart import 'package:test_sa/views/pages/device_transfer/track_device_transfer.dart'; import 'package:test_sa/views/pages/user/gas_refill/request_gas_refill.dart'; import 'package:test_sa/views/pages/user/gas_refill/track_gas_refill.dart'; -import 'package:test_sa/views/pages/user/notifications/notifications_page.dart'; import 'package:test_sa/views/pages/user/requests/create_request.dart'; import 'package:test_sa/views/pages/user/visits/regular_visits_page.dart'; import 'package:test_sa/views/widgets/buttons/app_back_button.dart'; @@ -153,7 +151,7 @@ class _LandPageState extends State { mainAxisSpacing: 12, childAspectRatio: 1, children: [ - if (_userProvider.user.type == UsersTypes.normal_user) + if (_userProvider.user != null && _userProvider.user.type == UsersTypes.normal_user) LandPageItem( text: _subtitle.newServiceRequest, icon: FontAwesomeIcons.tools, @@ -279,7 +277,11 @@ class _LandPageState extends State { decoration: BoxDecoration(border: Border.all(color: Theme.of(context).primaryColor, width: 2), shape: BoxShape.circle), child: ClipOval( child: ClipOval( - child: Icon(Icons.person,size: 36,color: Theme.of(context).colorScheme.primary,), + child: Icon( + Icons.person, + size: 36, + color: Theme.of(context).colorScheme.primary, + ), ), ), ), diff --git a/lib/views/widgets/e_signature/e_signature.dart b/lib/views/widgets/e_signature/e_signature.dart index 1136a0a..2c5dcc4 100644 --- a/lib/views/widgets/e_signature/e_signature.dart +++ b/lib/views/widgets/e_signature/e_signature.dart @@ -10,7 +10,7 @@ class ESignature extends StatefulWidget { final Uint8List newSignature; final Function(Uint8List) onSaved; final Function(Uint8List) onChange; - const ESignature({Key key, this.oldSignature, this.onSaved,this.onChange, this.newSignature}) : super(key: key); + const ESignature({Key key, this.oldSignature, this.onSaved, this.onChange, this.newSignature}) : super(key: key); @override State createState() => _ESignatureState(); @@ -29,7 +29,7 @@ class _ESignatureState extends State { bool _unpaint = false; @override void initState() { - if(widget.newSignature != null) { + if (widget.newSignature != null) { signature = widget.newSignature; } // TODO: implement initState @@ -46,72 +46,75 @@ class _ESignatureState extends State { Widget build(BuildContext context) { return Column( children: [ - if(widget.oldSignature != null || signature != null) - Container( - width: MediaQuery.of(context).size.width, - padding: const EdgeInsets.only(bottom: 8), - height: 90 * AppStyle.getScaleFactor(context), - child: signature != null ? - Image.memory(signature): - ImageLoader( - boxFit: BoxFit.contain, - url: widget.oldSignature) - ), - FormField( - onSaved: (_) async { - widget.onSaved(signature); - }, - builder: (FormFieldState state) { - return Column( - children: [ - Container( - width: MediaQuery.of(context).size.width, - 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: AbsorbPointer( - absorbing: _unpaint, - child: Signature( - controller: _controller, - height: 160 * AppStyle.getScaleFactor(context), - backgroundColor: Colors.transparent, - ), - ), + if (widget.oldSignature != null || signature != null) + Container( + width: MediaQuery.of(context).size.width, + padding: const EdgeInsets.only(bottom: 8), + height: 90 * AppStyle.getScaleFactor(context), + child: signature != null ? Image.memory(signature) : ImageLoader(boxFit: BoxFit.contain, url: widget.oldSignature)), + FormField(onSaved: (_) async { + widget.onSaved(signature); + }, builder: (FormFieldState state) { + return Column( + children: [ + Container( + width: MediaQuery.of(context).size.width, + 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: AbsorbPointer( + absorbing: _unpaint, + child: Signature( + controller: _controller, + height: 160 * AppStyle.getScaleFactor(context), + backgroundColor: Colors.transparent, ), - Row( - children: [ - IconButton(onPressed: (){_controller.clear();}, icon: const Icon(Icons.clear)), - IconButton(onPressed: (){_controller.undo();}, icon: const Icon(Icons.undo)), - IconButton(onPressed: (){_controller.redo();}, icon: const Icon(Icons.redo)), - - IconButton(onPressed: (){ + ), + ), + Row( + children: [ + IconButton( + onPressed: () { + _controller.clear(); + }, + icon: const Icon(Icons.clear)), + IconButton( + onPressed: () { + _controller.undo(); + }, + icon: const Icon(Icons.undo)), + IconButton( + onPressed: () { + _controller.redo(); + }, + icon: const Icon(Icons.redo)), + IconButton( + onPressed: () { _unpaint = !_unpaint; setState(() {}); - }, icon: Icon( + }, + icon: Icon( _unpaint ? Icons.draw : Icons.ac_unit, - color: _unpaint ? AColors.orange : null,)), - const Spacer(), - IconButton(onPressed: () async { + color: _unpaint ? AColors.orange : null, + )), + const Spacer(), + IconButton( + onPressed: () async { signature = await _controller.toPngBytes(); - widget.onChange(signature); + if (widget.onChange != null) { + widget.onChange(signature); + } setState(() {}); - }, icon: const Icon(Icons.check)), - ], - ) + }, + icon: const Icon(Icons.check)), ], - ); - } - ), + ) + ], + ); + }), ], ); } diff --git a/lib/views/widgets/pentry/pentry_calibration_tool_form.dart b/lib/views/widgets/pentry/pentry_calibration_tool_form.dart index 84ba349..7ecdaed 100644 --- a/lib/views/widgets/pentry/pentry_calibration_tool_form.dart +++ b/lib/views/widgets/pentry/pentry_calibration_tool_form.dart @@ -9,11 +9,14 @@ import 'package:test_sa/views/widgets/buttons/app_small_button.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; + class PentryCalibrationToolForm extends StatefulWidget { final List models; final bool enableValidate; const PentryCalibrationToolForm({ - Key key, this.models, this.enableValidate, + Key key, + this.models, + this.enableValidate, }) : super(key: key); @override @@ -21,75 +24,80 @@ class PentryCalibrationToolForm extends StatefulWidget { } class _PentryCalibrationToolFormState extends State { - - @override Widget build(BuildContext context) { final subtitle = AppLocalization.of(context).subtitle; final userProvider = Provider.of(context); return ListView.builder( - padding: EdgeInsets.only( - 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(CalibrationTool()); - 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("Asset Number"), - const SizedBox(height: 4,), - AutoCompleteDeviceNumberField( - initialValue: model.assetsNumber, - hospitalId: userProvider.user.hospital?.id, - onPick: (number){ - model.assetsNumber = number; - }, - ), - const SizedBox(height: 8,), - const ASubTitle("Date of Testing"), - const SizedBox(height: 4,), - ADatePicker( - date: model.dataOfTesting, - onDatePicker: (date){ - model.dataOfTesting =date; + 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(CalibrationTool()); setState(() {}); }, - ), - 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("Asset Number"), + const SizedBox( + height: 4, + ), + AutoCompleteDeviceNumberField( + initialValue: model.assetsNumber, + hospitalId: userProvider.user.hospital?.id, + onPick: (number) { + model.assetsNumber = number; + }, + ), + const SizedBox( + height: 8, + ), + const ASubTitle("Date of Testing"), + const SizedBox( + height: 4, + ), + ADatePicker( + date: model.dataOfTesting, + onDatePicker: (date) { + model.dataOfTesting = date; + setState(() {}); + }, + ), + const SizedBox( + height: 8, + ), + Divider( + color: Theme.of(context).textTheme.titleMedium.color, + ), + ], + ); + }); } } diff --git a/lib/views/widgets/status/service_request/service_request_priority_mune.dart b/lib/views/widgets/status/service_request/service_request_priority_mune.dart index fe3bd6d..4896fdc 100644 --- a/lib/views/widgets/status/service_request/service_request_priority_mune.dart +++ b/lib/views/widgets/status/service_request/service_request_priority_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 ServiceRequestPriorityMenu extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; @@ -16,22 +17,19 @@ class ServiceRequestPriorityMenu extends StatelessWidget { final settingProvider = Provider.of(context); final userProvider = Provider.of(context); final menuProvider = Provider.of(context); + return LoadingManager( isLoading: menuProvider.isLoading, isFailedLoading: menuProvider.items == null, 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 1bb1f84..48aa402 100644 --- a/lib/views/widgets/status/single_status_menu.dart +++ b/lib/views/widgets/status/single_status_menu.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.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 SingleStatusMenu extends StatefulWidget { final List statuses; final Lookup initialStatus; @@ -14,27 +15,25 @@ class SingleStatusMenu extends StatefulWidget { } class _SingleStatusMenuState extends State { - Lookup _selectedStatus; @override void setState(VoidCallback fn) { - if(mounted) super.setState(fn); + if (mounted) super.setState(fn); } @override void didUpdateWidget(covariant SingleStatusMenu oldWidget) { - if(widget.initialStatus != null ){ - final result = widget.statuses?.where( - (element) { - return element == widget.initialStatus; - }); - if(result.isNotEmpty) { - _selectedStatus =result.first; - }else{ - _selectedStatus =null; + if (widget.initialStatus != null) { + final result = widget.statuses?.where((element) { + return element == widget.initialStatus; + }); + if (result.isNotEmpty) { + _selectedStatus = result.first; + } else { + _selectedStatus = null; } - if(widget.initialStatus.id != _selectedStatus.id) { + if (widget.initialStatus?.id != _selectedStatus?.id) { widget.onSelect(_selectedStatus); } } else { @@ -45,13 +44,12 @@ class _SingleStatusMenuState extends State { @override void initState() { - if(widget.initialStatus != null){ - final result = widget.statuses?.where( - (element) { - return element == widget.initialStatus; - }); - if(result.isNotEmpty) _selectedStatus = result.first; - if(widget.initialStatus.id != _selectedStatus?.id) { + if (widget.initialStatus != null) { + final result = widget.statuses?.where((element) { + return element == widget.initialStatus; + }); + if (result.isNotEmpty) _selectedStatus = result.first; + if (widget.initialStatus.id != _selectedStatus?.id) { widget.onSelect(_selectedStatus); } } @@ -76,7 +74,7 @@ class _SingleStatusMenuState extends State { child: DropdownButton( value: _selectedStatus, iconSize: 24, - icon: Icon(Icons.keyboard_arrow_down_rounded), + icon: const Icon(Icons.keyboard_arrow_down_rounded), elevation: 0, isExpanded: true, hint: Text( @@ -91,17 +89,16 @@ class _SingleStatusMenuState extends State { }); widget.onSelect(newValue); }, - items: widget.statuses - .map>((Lookup value) { + items: widget.statuses.map>((Lookup 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(),