Fixing bugs

merge-requests/22/head
zaid_daoud 1 year ago
parent e4c37ec052
commit 1bf9d612ad

@ -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<int> getRequests ({
Future<int> 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<String,dynamic> body = {};
body["pageNumber"] = (items?.length ?? 0) ~/pageItemNumber + 1;
try {
Map<String, dynamic> 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<DeviceTransfer> itemsPage = listJson.map(
(request) => DeviceTransfer.fromJson(request)).toList();
List<DeviceTransfer> 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<int> createRequest ({
Future<int> createRequest({
@required String host,
@required User user,
@required DeviceTransfer model,
}) async {
Map<String,dynamic> body = {
Map<String, dynamic> 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<int> updateRequest ({
Future<int> 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<String,dynamic> body = {
Map<String, dynamic> 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;
}
}
}
}

@ -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<int> getEquipment ({
Future<int> 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<List<Device>> getDevicesList ({
Future<List<Device>> 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<Device> page = [];
if(response.statusCode >= 200 && response.statusCode < 300) {
List<Device> 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<List<Lookup>> getModels({
String code,
}) async {
Response response;
try{
try {
response = await ApiManager.instance.get(
URLs.getModels+"?code=$code",
URLs.getModels + "?code=$code",
);
List<Lookup> page = [];
if(response.statusCode >= 200 && response.statusCode < 300) {
List<Lookup> 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<List<Device>> getDevicesListBySN ({
@required String host,
@required User user,
@required int hospitalId,
@required String sn
}) async {
Future<List<Device>> 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<Device> _page = [];
if(response.statusCode >= 200 && response.statusCode < 300) {
List<Device> _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 [];
}
}
}
}

@ -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<Map<String, dynamic>> 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<String,dynamic> toUpdateProfileJson(){
Map<String,dynamic> 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<String, dynamic> toUpdateProfileJson() {
Map<String, dynamic> 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<Map<String, dynamic>> 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<String,dynamic> toJson(){
Map<String, dynamic> 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<String,dynamic> parsedJson){
factory User.fromJson(Map<String, dynamic> 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);
}
}
}

@ -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<UpdateDeviceTransfer> {
_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<UpdateDeviceTransfer> {
}
@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<UpdateDeviceTransfer> {
_subtitle = AppLocalization.of(context).subtitle;
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
_deviceTransferProvider = Provider.of<DeviceTransferProvider>(context,listen: false);
_deviceTransferProvider = Provider.of<DeviceTransferProvider>(context, listen: false);
return Scaffold(
key: _scaffoldKey,
body: Form(
@ -117,48 +109,56 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
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<UpdateDeviceTransfer> {
// 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<UpdateDeviceTransfer> {
onPressed: _update,
),
),
const SizedBox(height: 100,)
const SizedBox(
height: 100,
)
],
),
),
@ -218,4 +225,3 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
);
}
}

@ -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<LandPage> {
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<LandPage> {
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,
),
),
),
),

@ -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<ESignature> createState() => _ESignatureState();
@ -29,7 +29,7 @@ class _ESignatureState extends State<ESignature> {
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<ESignature> {
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<String>(
onSaved: (_) async {
widget.onSaved(signature);
},
builder: (FormFieldState<String> 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<String>(onSaved: (_) async {
widget.onSaved(signature);
}, builder: (FormFieldState<String> 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)),
],
);
}
),
)
],
);
}),
],
);
}

@ -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<CalibrationTool> 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<PentryCalibrationToolForm> {
@override
Widget build(BuildContext context) {
final subtitle = AppLocalization.of(context).subtitle;
final userProvider = Provider.of<UserProvider>(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,
),
],
);
});
}
}

@ -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<SettingProvider>(context);
final userProvider = Provider.of<UserProvider>(context);
final menuProvider = Provider.of<ServiceRequestPriorityProvider>(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,
)
);
));
}
}

@ -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<Lookup> statuses;
final Lookup initialStatus;
@ -14,27 +15,25 @@ class SingleStatusMenu extends StatefulWidget {
}
class _SingleStatusMenuState extends State<SingleStatusMenu> {
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<SingleStatusMenu> {
@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<SingleStatusMenu> {
child: DropdownButton<Lookup>(
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<SingleStatusMenu> {
});
widget.onSelect(newValue);
},
items: widget.statuses
.map<DropdownMenuItem<Lookup>>((Lookup value) {
items: widget.statuses.map<DropdownMenuItem<Lookup>>((Lookup value) {
return DropdownMenuItem<Lookup>(
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(),

Loading…
Cancel
Save