diff --git a/assets/images/remove.svg b/assets/images/remove.svg
new file mode 100644
index 00000000..98b3d434
--- /dev/null
+++ b/assets/images/remove.svg
@@ -0,0 +1,3 @@
+
diff --git a/lib/controllers/providers/api/asset_transfer_provider.dart b/lib/controllers/providers/api/asset_transfer_provider.dart
index 7ae55334..ac894452 100644
--- a/lib/controllers/providers/api/asset_transfer_provider.dart
+++ b/lib/controllers/providers/api/asset_transfer_provider.dart
@@ -1,14 +1,18 @@
import 'dart:convert';
import 'dart:developer';
-import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:fluttertoast/fluttertoast.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
+import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
+import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/user.dart';
import '../../../models/hospital.dart';
+import '../../../new_views/common_widgets/app_lazy_loading.dart';
class AssetTransferProvider extends ChangeNotifier {
// number of items call in each request
@@ -117,51 +121,15 @@ class AssetTransferProvider extends ChangeNotifier {
}
}
- Future createRequest({
- @required String host,
- @required User user,
- @required AssetTransfer model,
+ Future createRequest({
+ @required BuildContext context,
+ @required AssetTransfer assetDestination,
+ @required Device asset,
}) async {
- Map body = {
- "id": 0,
- // "assetId": model.device.id ?? "",
- "destSiteId": hospital.id ?? "",
- "destDepartmentId": department.id ?? "",
- // "senderSiteId": model.sender.client.id ?? "",
- // "transferNo": 0,
- // "transferCode": "string",
- "destBuildingId": building?.id,
- "destFloorId": floor.id,
- "destRoom": room,
- /////
- // "senderBuildingId": model.device.destBuildingId,
- // "senderFloorId": model.device.destFloorId,
- // "senderDepartmentId": model.device.destDepartmentId,
- // "senderRoom": model.device.destRoom,
- // if (model?.sender?.attachments?.isNotEmpty ?? false)
- // "senderAttachments":
- // model?.sender?.attachments?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})?.toList(),
- // "senderAssignedEmployeeId": "string",
- // "senderMachineStatusId": 0,
- // "senderComment": "string",
- // "senderStartDate": "2023-06-11T09:21:56.453Z",
- // "senderEndDate": "2023-06-11T09:21:56.453Z",
- // "senderWorkingHours": "string",
- // "senderTravelingHours": "string",
- // "senderAttachmentName": "string",
- // "receiverAssignedEmployeeId": "string",
- // "receiverMachineStatusId": 0,
- // "receiverComment": "string",
- // "receiverStartDate": "2023-06-11T09:21:56.453Z",
- // "receiverEndDate": "2023-06-11T09:21:56.453Z",
- // "receiverWorkingHours": "string",
- // "receiverTravelingHours": "string",
- // "receiverAttachmentName": "string"
- };
-
Response response;
try {
- response = await ApiManager.instance.post(URLs.requestDeviceTransfer, body: body);
+ showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
+ response = await ApiManager.instance.post(URLs.requestDeviceTransfer, body: assetDestination.transferBody(asset: asset));
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
if (items != null) {
@@ -169,10 +137,14 @@ class AssetTransferProvider extends ChangeNotifier {
reset();
notifyListeners();
}
+ Fluttertoast.showToast(msg: context.translation.createdSuccessfully);
+ } else {
+ Fluttertoast.showToast(msg: "${context.translation.failedToCompleteRequest} :${json.decode(response.body)['message']}");
}
- return response.statusCode;
+ Navigator.pop(context);
} catch (error) {
- return -1;
+ Navigator.pop(context);
+ print(error);
}
}
diff --git a/lib/controllers/providers/api/gas_refill_provider.dart b/lib/controllers/providers/api/gas_refill_provider.dart
index c3cb8a23..42d1d7b1 100644
--- a/lib/controllers/providers/api/gas_refill_provider.dart
+++ b/lib/controllers/providers/api/gas_refill_provider.dart
@@ -1,16 +1,20 @@
import 'dart:convert';
import 'dart:developer';
-import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:fluttertoast/fluttertoast.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
+import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/gas_refill/gas_refill_model.dart';
import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/new_models/gas_refill_model.dart' as gasModel;
import 'package:test_sa/models/timer_model.dart';
import 'package:test_sa/models/user.dart';
+import '../../../new_views/common_widgets/app_lazy_loading.dart';
+
class GasRefillProvider extends ChangeNotifier {
// number of items call in each request
final pageItemNumber = 12;
@@ -89,37 +93,19 @@ class GasRefillProvider extends ChangeNotifier {
}
}
- Future createModel({
+ Future createModel({
+ @required BuildContext context,
@required User user,
@required gasModel.GasRefillModel model,
}) async {
- Map body = {
- "uid": user.id.toString(),
- "token": user.token ?? "",
- "site": model.site?.toJson(),
- "building": model.building != null ? {"id": model.building?.id, "name": model.building?.name, "value": model.building?.value} : null,
- "floor": model.floor != null ? {"id": model.floor?.id, "name": model.floor?.name, "value": model.floor?.value} : null,
- //if (expectedDateTime != null) "expectedDate": expectedDateTime?.toIso8601String(),
- if (expectedDateTime != null) "expectedTime": expectedDateTime?.toIso8601String(),
- if (timer?.startAt != null) "startDate": timer.startAt.toIso8601String(),
- if (timer?.startAt != null) "startTime": timer.startAt.toIso8601String(),
- if (timer?.endAt != null) "endDate": timer.endAt.toIso8601String(),
- if (timer?.endAt != null) "endTime": timer.endAt.toIso8601String(),
- "department": model.department?.toJson(),
- "GazRefillNo": "GR-${DateTime.now().toString().split(" ").first}",
- "status": model.status?.toJson(),
- };
- body["gazRefillDetails"] = model.gazRefillDetails
- .map((model) => {
- "gasType": model.gasType.toJson(),
- "cylinderSize": model.cylinderSize.toJson(),
- "cylinderType": model.cylinderType.toJson(),
- "requestedQty": model.requestedQty,
- })
- .toList();
-
Response response;
try {
+ showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
+ final body = model.toJson()
+ ..addAll({
+ "uid": user.id.toString(),
+ "token": user.token ?? "",
+ });
response = await ApiManager.instance.post(URLs.requestGasRefill, body: body);
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
@@ -127,11 +113,15 @@ class GasRefillProvider extends ChangeNotifier {
reset();
notifyListeners();
}
+ Fluttertoast.showToast(msg: context.translation.createdSuccessfully);
+ Navigator.pop(context);
+ } else {
+ Fluttertoast.showToast(msg: "${context.translation.failedToCompleteRequest} :${json.decode(response.body)['message']}");
}
- return response.statusCode;
+ Navigator.pop(context);
} catch (error) {
+ Navigator.pop(context);
print(error);
- return -1;
}
}
diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart
index 54e26ffa..847337ae 100644
--- a/lib/controllers/providers/api/service_requests_provider.dart
+++ b/lib/controllers/providers/api/service_requests_provider.dart
@@ -1,23 +1,26 @@
import 'dart:convert';
import 'dart:developer';
-import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:fluttertoast/fluttertoast.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
+import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/call_request_for_work_order_model.dart';
import 'package:test_sa/models/issue.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/service_report.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/service_request/service_request_search.dart';
-import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:test_sa/models/timer_model.dart';
import '../../../models/service_request/search_work_order.dart';
import '../../../models/service_request/sub_work_order_details.dart';
import '../../../models/user.dart';
+import '../../../new_views/common_widgets/app_lazy_loading.dart';
class ServiceRequestsProvider extends ChangeNotifier {
// number of items call in each request
@@ -131,7 +134,8 @@ class ServiceRequestsProvider extends ChangeNotifier {
}
}
- Future createRequest({
+ Future createRequest({
+ @required BuildContext context,
@required String host,
@required User user,
@required ServiceRequest serviceRequest,
@@ -140,7 +144,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
"id": 0,
"calNo": "",
"callCreatedBy": {"id": user.userID, "name": user.userName ?? ""},
- "assets": serviceRequest.deviceId == null ? [] : [serviceRequest.deviceId],
+ "assets": serviceRequest.device?.id == null ? [] : [serviceRequest.device?.id],
"requestedDate": DateTime.now().toIso8601String(),
"requestedTime": DateTime.now().toIso8601String(),
"client": user.clientId,
@@ -177,27 +181,33 @@ class ServiceRequestsProvider extends ChangeNotifier {
if (serviceRequest.audio != null) {
body["voiceNote"] = serviceRequest.audio;
}
+ showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
Response response;
- //try {
- response = await ApiManager.instance.post(URLs.createRequest, body: body);
- stateCode = response.statusCode;
- if (response.statusCode >= 200 && response.statusCode < 300) {
- if (serviceRequests != null) {
- var data = json.decode(utf8.decode(response.bodyBytes));
- if (data is List) {
- serviceRequests.insert(0, ServiceRequest.fromJson(data[0]));
- } else {
- if (data["data"] != null && data["data"] == true) {
- // serviceRequests.insert(0, ServiceRequest.fromJson(data[0]));
+ try {
+ response = await ApiManager.instance.post(URLs.createRequest, body: body);
+ stateCode = response.statusCode;
+ if (response.statusCode >= 200 && response.statusCode < 300) {
+ if (serviceRequests != null) {
+ var data = json.decode(utf8.decode(response.bodyBytes));
+ if (data is List) {
+ serviceRequests.insert(0, ServiceRequest.fromJson(data[0]));
+ } else {
+ if (data["data"] != null && data["data"] == true) {
+ // serviceRequests.insert(0, ServiceRequest.fromJson(data[0]));
+ }
}
}
+ notifyListeners();
+ Fluttertoast.showToast(msg: context.translation.successfulRequestMessage);
+ Navigator.pop(context);
+ } else {
+ Fluttertoast.showToast(msg: "${context.translation.failedRequestMessage} :${json.decode(response.body)['message']}");
}
- notifyListeners();
+ Navigator.pop(context);
+ } catch (error) {
+ print(error);
+ Navigator.pop(context);
}
- return response.statusCode;
- // } catch (error) {
- // return -1;
- // }
}
Future createIssueReport({
diff --git a/lib/controllers/providers/api/user_provider.dart b/lib/controllers/providers/api/user_provider.dart
index 2a3701ca..5f439623 100644
--- a/lib/controllers/providers/api/user_provider.dart
+++ b/lib/controllers/providers/api/user_provider.dart
@@ -6,6 +6,8 @@ import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/user.dart';
+import '../../../new_views/common_widgets/app_lazy_loading.dart';
+
class UserProvider extends ChangeNotifier {
//reset provider data
void reset() {
@@ -39,12 +41,13 @@ class UserProvider 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 login({@required User user}) async {
+ Future login({@required BuildContext context, @required User user}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
Response response;
try {
+ showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
response = await ApiManager.instance.post(URLs.login, body: await user.toLoginJson());
_loading = false;
if (response.statusCode >= 200 && response.statusCode < 300) {
@@ -55,8 +58,10 @@ class UserProvider extends ChangeNotifier {
return response.statusCode;
}
notifyListeners();
+ Navigator.pop(context);
return response.statusCode;
} catch (error) {
+ Navigator.pop(context);
debugPrint(error);
_loading = false;
notifyListeners();
diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb
index e76db864..61a05a5a 100644
--- a/lib/l10n/app_ar.arb
+++ b/lib/l10n/app_ar.arb
@@ -250,7 +250,7 @@
"assetNo" : "رقم الجهاز",
"manufacture" : "صناعة",
"model" : "الطراز",
- "serialNumber" : "الرقم التسلسلي",
+ "Serial No" : "الرقم التسلسلي",
"device" : "الجهاز",
"pickAsset" : "إختر جهاز",
"filter" : "تصنيف",
@@ -264,5 +264,11 @@
"recordVoice" : "تسجيل صوت",
"gasRefillDetails" : "تفاصيل اعادة تعبئة غاز",
"updateRequest" : "تعديل الطلب",
- "gasRefill" : "اعادة تعبئة غاز"
+ "gasRefill" : "اعادة تعبئة غاز",
+ "recordVoice" : "تسجيل صوت",
+ "receiverName" : "اسم المستلم",
+ "receiverDetails" : "تفاصيل المستلم",
+ "requestedThrough" : "الطلب عبر",
+ "typeOfRequest" : "نوع الطلب",
+ "assetDetails" : "تفاصيل الجهاز"
}
\ No newline at end of file
diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb
index 428f2b47..ee422e95 100644
--- a/lib/l10n/app_en.arb
+++ b/lib/l10n/app_en.arb
@@ -250,7 +250,6 @@
"assetNo" : "Asset No.",
"manufacture" : "Manufacture",
"model" : "Model",
- "serialNumber" : "Serial Number",
"serialNo" : "Serial No",
"device" : "Device",
"pickAsset" : "Pick Asset",
@@ -272,5 +271,9 @@
"updateRequest" : "Update Request",
"gasRefill" : "Gas Refill",
"recordVoice" : "Record Voice",
- "assetDetails" : "Asset Details"
+ "assetDetails" : "Asset Details",
+ "receiverName" : "Receiver Name",
+ "receiverDetails" : "Receiver Details",
+ "requestedThrough" : "Requested Through",
+ "typeOfRequest" : "Type of Request"
}
\ No newline at end of file
diff --git a/lib/main.dart b/lib/main.dart
index d7c81df7..1fa779f8 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -45,7 +45,6 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqes
import 'package:test_sa/new_views/app_style/app_themes.dart';
import 'package:test_sa/new_views/pages/land_page/land_page.dart';
import 'package:test_sa/new_views/pages/login_page.dart';
-import 'package:test_sa/new_views/pages/new_transfer_request_page.dart';
import 'package:test_sa/new_views/pages/splash_page.dart';
import 'package:test_sa/providers/department_provider.dart';
import 'package:test_sa/providers/gas_request_providers/cylinder_size_provider.dart';
@@ -56,6 +55,8 @@ import 'package:test_sa/providers/gas_request_providers/site_provider.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart';
import 'package:test_sa/providers/service_request_providers/priority_provider.dart';
+import 'package:test_sa/providers/service_request_providers/requested_through_provider.dart';
+import 'package:test_sa/providers/service_request_providers/type_of_request_provider.dart';
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/sub_workorder/create_sub_workorder_page.dart';
@@ -161,6 +162,8 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => ServiceReportAssistantsEmployeeProvider()),
ChangeNotifierProvider(create: (_) => PriorityProvider()),
ChangeNotifierProvider(create: (_) => EquipmentStatusProvider()),
+ ChangeNotifierProvider(create: (_) => RequestedThroughProvider()),
+ ChangeNotifierProvider(create: (_) => TypeOfRequestProvider()),
],
child: GestureDetector(
onTap: () {
@@ -183,7 +186,6 @@ class MyApp extends StatelessWidget {
old.LandPage.id: (_) => const old.LandPage(),
LandPage.routeName: (_) => const LandPage(),
NewGasRefillRequestPage.routeName: (_) => const NewGasRefillRequestPage(),
- NewTransferRequestPage.routeName: (_) => const NewTransferRequestPage(),
ServiceRequestsPage.id: (_) => ServiceRequestsPage(),
ReportIssuesPage.id: (_) => const ReportIssuesPage(),
RequestGasRefill.id: (_) => const RequestGasRefill(),
diff --git a/lib/models/device/asset_transfer.dart b/lib/models/device/asset_transfer.dart
index d44ab4fa..f60ce1ff 100644
--- a/lib/models/device/asset_transfer.dart
+++ b/lib/models/device/asset_transfer.dart
@@ -1,3 +1,8 @@
+import 'package:flutter/src/widgets/framework.dart';
+import 'package:fluttertoast/fluttertoast.dart';
+import 'package:test_sa/extensions/context_extension.dart';
+import 'package:test_sa/models/device/device.dart';
+
import 'asset_transfer_attachment.dart';
class AssetTransfer {
@@ -220,4 +225,65 @@ class AssetTransfer {
}
return map;
}
+
+ Map transferBody({Device asset}) {
+ final map = {};
+ map['id'] = 0;
+ map['transferNo'] = transferNo;
+ map['transferCode'] = transferCode;
+ map['assetId'] = asset?.id;
+ map['destSiteId'] = destSiteId;
+ map['destBuildingId'] = destBuildingId;
+ map['destFloorId'] = destFloorId;
+ map['destDepartmentId'] = destDepartmentId;
+ map['destRoom'] = destRoom;
+ map['senderSiteId'] = asset?.site?.id;
+ map['senderBuildingId'] = asset?.building?.id;
+ map['senderFloorId'] = asset?.floor?.id;
+ map['senderDepartmentId'] = asset?.department?.id;
+ map['senderRoom'] = asset?.room;
+ map['senderAssignedEmployeeId'] = senderAssignedEmployeeId;
+ map['senderMachineStatusId'] = senderMachineStatusId;
+ map['senderComment'] = senderComment;
+ map['senderStartDate'] = senderStartDate;
+ map['senderEndDate'] = senderEndDate;
+ map['senderWorkingHours'] = senderWorkingHours;
+ map['senderTravelingHours'] = senderTravelingHours;
+ map['senderEngSignature'] = senderEngSignature;
+ if (senderAttachments != null) {
+ map['senderAttachments'] = senderAttachments.map((v) => v.toJson()).toList();
+ }
+ map['receiverAssignedEmployeeId'] = receiverAssignedEmployeeId;
+ map['receiverMachineStatusId'] = receiverMachineStatusId;
+ map['receiverComment'] = receiverComment;
+ map['receiverStartDate'] = receiverStartDate;
+ map['receiverEndDate'] = receiverEndDate;
+ map['receiverWorkingHours'] = receiverWorkingHours;
+ map['receiverTravelingHours'] = receiverTravelingHours;
+ map['receiverEngSignature'] = receiverEngSignature;
+ if (receiverAttachments != null) {
+ map['receiverAttachments'] = receiverAttachments.map((v) => v.toJson()).toList();
+ }
+ return map;
+ }
+
+ Future validate(BuildContext context) async {
+ if (assetId == null) {
+ await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.device}");
+ return false;
+ } else if (destSiteId == null) {
+ await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.destinationSite}");
+ return false;
+ } else if (destBuildingId == null) {
+ await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.building}");
+ return false;
+ } else if (destFloorId == null) {
+ await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.floor}");
+ return false;
+ } else if (destDepartmentId == null) {
+ await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.department}");
+ return false;
+ }
+ return true;
+ }
}
diff --git a/lib/models/new_models/gas_refill_model.dart b/lib/models/new_models/gas_refill_model.dart
index 7a3e3696..55c96014 100644
--- a/lib/models/new_models/gas_refill_model.dart
+++ b/lib/models/new_models/gas_refill_model.dart
@@ -4,7 +4,6 @@ import 'dart:typed_data';
import 'package:flutter/cupertino.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:test_sa/extensions/context_extension.dart';
-import 'package:test_sa/models/enums/translation_keys.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/assigned_employee.dart';
import 'package:test_sa/models/new_models/building.dart';
@@ -126,8 +125,8 @@ class GasRefillModel {
Map toJson() {
final map = {};
- map['id'] = id;
- map['gazRefillNo'] = gazRefillNo;
+ map['id'] = id ?? 0;
+ map['gazRefillNo'] = "GR-${DateTime.now().toString().split(" ").first}";
map['expectedDate'] = expectedDate;
map['expectedTime'] = expectedTime;
map['startDate'] = startDate;
@@ -247,7 +246,7 @@ class GasRefillDetails {
Map toJson() {
final map = {};
- map['id'] = id;
+ map['id'] = id ?? 0;
if (gasType != null) {
map['gasType'] = gasType.toJson();
}
diff --git a/lib/models/service_request/service_request.dart b/lib/models/service_request/service_request.dart
index 350185fb..38a76e82 100644
--- a/lib/models/service_request/service_request.dart
+++ b/lib/models/service_request/service_request.dart
@@ -152,6 +152,12 @@ class ServiceRequest {
} else if (defectType == null) {
await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.equipmentStatus}");
return false;
+ } else if (requestedThrough == null) {
+ await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.requestedThrough}");
+ return false;
+ } else if (type == null) {
+ await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.typeOfRequest}");
+ return false;
}
return true;
}
diff --git a/lib/new_views/common_widgets/default_app_bar.dart b/lib/new_views/common_widgets/default_app_bar.dart
index e1e5765d..2f524003 100644
--- a/lib/new_views/common_widgets/default_app_bar.dart
+++ b/lib/new_views/common_widgets/default_app_bar.dart
@@ -4,13 +4,12 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
-import '../../models/enums/translation_keys.dart';
import '../app_style/app_color.dart';
class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget {
final String title;
- const DefaultAppBar({@required this.title, Key key}) : super(key: key);
+ const DefaultAppBar({this.title, Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
@@ -23,7 +22,7 @@ class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget {
Navigator.of(context).pop();
}),
Text(
- title,
+ title ?? "",
style: AppTextStyles.heading3?.copyWith(fontWeight: FontWeight.w600, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
).expanded,
],
diff --git a/lib/new_views/common_widgets/single_item_drop_down_menu.dart b/lib/new_views/common_widgets/single_item_drop_down_menu.dart
index 0d8e266b..b126ec7f 100644
--- a/lib/new_views/common_widgets/single_item_drop_down_menu.dart
+++ b/lib/new_views/common_widgets/single_item_drop_down_menu.dart
@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
-import 'package:test_sa/models/enums/translation_keys.dart';
import 'package:test_sa/new_views/common_widgets/app_loading_manager.dart';
import 'package:test_sa/providers/loading_list_notifier.dart';
@@ -47,7 +46,7 @@ class _SingleItemDropDownMenuState {
Future _login() async {
if (!_formKey.currentState.validate()) return;
_formKey.currentState.save();
- showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
- int status = await _userProvider.login(user: _user);
- Navigator.pop(context);
+ int status = await _userProvider.login(context: context, user: _user);
if (status >= 200 && status < 300 && _userProvider.user.isAuthenticated ?? false) {
_settingProvider.setUser(_userProvider.user);
diff --git a/lib/new_views/pages/new_gas_refill_request_page.dart b/lib/new_views/pages/new_gas_refill_request_page.dart
index 3120da99..83f67b4a 100644
--- a/lib/new_views/pages/new_gas_refill_request_page.dart
+++ b/lib/new_views/pages/new_gas_refill_request_page.dart
@@ -6,7 +6,6 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
-import 'package:test_sa/models/enums/translation_keys.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/building.dart';
import 'package:test_sa/models/new_models/department.dart';
@@ -25,7 +24,6 @@ import 'package:test_sa/providers/loading_list_notifier.dart';
import '../../controllers/providers/api/gas_refill_provider.dart';
import '../../controllers/validator/validator.dart';
-import '../common_widgets/app_lazy_loading.dart';
import '../common_widgets/default_app_bar.dart';
class NewGasRefillRequestPage extends StatefulWidget {
@@ -95,6 +93,7 @@ class _NewGasRefillRequestPageState extends State {
SingleItemDropDownMenu(
context: context,
title: context.translation.cylinderType,
+ initialValue: _currentDetails.cylinderType,
onSelect: (value) {
_currentDetails.cylinderType = value;
},
@@ -103,6 +102,7 @@ class _NewGasRefillRequestPageState extends State {
SingleItemDropDownMenu(
context: context,
title: context.translation.cylinderSize,
+ initialValue: _currentDetails.cylinderSize,
onSelect: (value) {
_currentDetails.cylinderSize = value;
},
@@ -115,6 +115,9 @@ class _NewGasRefillRequestPageState extends State {
onSelect: (value) {
setState(() {
_gasModel.site = value;
+ _gasModel?.building = null;
+ _gasModel?.floor = null;
+ _gasModel?.department = null;
});
},
),
@@ -128,6 +131,8 @@ class _NewGasRefillRequestPageState extends State {
onSelect: (value) {
setState(() {
_gasModel.building = value;
+ _gasModel?.floor = null;
+ _gasModel?.department = null;
});
},
),
@@ -141,6 +146,7 @@ class _NewGasRefillRequestPageState extends State {
onSelect: (value) {
setState(() {
_gasModel.floor = value;
+ _gasModel?.department = null;
});
},
),
@@ -242,18 +248,10 @@ class _NewGasRefillRequestPageState extends State {
Fluttertoast.showToast(msg: context.translation.youHaveToAddRequests);
return;
}
- showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
- final status = await Provider.of(context, listen: false).createModel(
+ await Provider.of(context, listen: false).createModel(
+ context: context,
user: Provider.of(context, listen: false).user,
model: _gasModel,
);
- Navigator.pop(context);
- if (status >= 200 && status < 300) {
- Fluttertoast.showToast(msg: context.translation.createdSuccessfully);
- Navigator.of(context).pop();
- setState(() {});
- } else {
- Fluttertoast.showToast(msg: context.translation.failedToCompleteRequest);
- }
}
}
diff --git a/lib/providers/service_request_providers/requested_through_provider.dart b/lib/providers/service_request_providers/requested_through_provider.dart
new file mode 100644
index 00000000..928f507c
--- /dev/null
+++ b/lib/providers/service_request_providers/requested_through_provider.dart
@@ -0,0 +1,36 @@
+import 'dart:convert';
+
+import 'package:http/http.dart';
+import 'package:test_sa/providers/loading_list_notifier.dart';
+
+import '../../controllers/api_routes/api_manager.dart';
+import '../../controllers/api_routes/urls.dart';
+import '../../models/lookup.dart';
+
+class RequestedThroughProvider extends LoadingListNotifier {
+ @override
+ Future getDate() async {
+ if (loading == true) return -2;
+ loading = true;
+ notifyListeners();
+ loading = true;
+ notifyListeners();
+ try {
+ Response response = await ApiManager.instance.get(URLs.getServiceRequestThrough);
+ stateCode = response.statusCode;
+ 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();
+ }
+ loading = false;
+ notifyListeners();
+ return response.statusCode;
+ } catch (error) {
+ loading = false;
+ stateCode = -1;
+ notifyListeners();
+ return -1;
+ }
+ }
+}
diff --git a/lib/providers/service_request_providers/type_of_request_provider.dart b/lib/providers/service_request_providers/type_of_request_provider.dart
new file mode 100644
index 00000000..5650b3db
--- /dev/null
+++ b/lib/providers/service_request_providers/type_of_request_provider.dart
@@ -0,0 +1,36 @@
+import 'dart:convert';
+
+import 'package:http/http.dart';
+import 'package:test_sa/providers/loading_list_notifier.dart';
+
+import '../../controllers/api_routes/api_manager.dart';
+import '../../controllers/api_routes/urls.dart';
+import '../../models/lookup.dart';
+
+class TypeOfRequestProvider extends LoadingListNotifier {
+ @override
+ Future getDate() async {
+ if (loading == true) return -2;
+ loading = true;
+ notifyListeners();
+ loading = true;
+ notifyListeners();
+ try {
+ Response response = await ApiManager.instance.get(URLs.getServiceRequestTypes);
+ stateCode = response.statusCode;
+ 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();
+ }
+ loading = false;
+ notifyListeners();
+ return response.statusCode;
+ } catch (error) {
+ loading = false;
+ stateCode = -1;
+ notifyListeners();
+ return -1;
+ }
+ }
+}
diff --git a/lib/views/pages/device_transfer/request_device_transfer.dart b/lib/views/pages/device_transfer/request_device_transfer.dart
index aff207fd..6c4ebe2d 100644
--- a/lib/views/pages/device_transfer/request_device_transfer.dart
+++ b/lib/views/pages/device_transfer/request_device_transfer.dart
@@ -3,23 +3,25 @@ import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/asset_transfer_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/controllers/validator/validator.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
+import 'package:test_sa/extensions/text_extensions.dart';
+import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
-import 'package:test_sa/models/subtitle.dart';
-import 'package:test_sa/views/app_style/sizing.dart';
-import 'package:test_sa/views/widgets/buttons/app_button.dart';
-import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
-import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
+import 'package:test_sa/models/device/device.dart';
+import 'package:test_sa/models/new_models/department.dart';
+import 'package:test_sa/models/new_models/floor.dart';
+import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
-import '../../../../controllers/localization/localization.dart';
-import '../../../controllers/validator/validator.dart';
-import '../../app_style/colors.dart';
-import '../../widgets/app_text_form_field.dart';
-import '../../widgets/gas_refill/building_type_menu.dart';
-import '../../widgets/gas_refill/department_type_menu.dart';
-import '../../widgets/gas_refill/floor_type_menu.dart';
-import '../../widgets/hospitals/hospital_auto_complete_field_new.dart';
+import '../../../models/new_models/building.dart';
+import '../../../models/new_models/site.dart';
+import '../../../new_views/common_widgets/app_filled_button.dart';
+import '../../../new_views/common_widgets/default_app_bar.dart';
+import '../../../new_views/common_widgets/single_item_drop_down_menu.dart';
+import '../../../providers/gas_request_providers/site_provider.dart';
+import '../../../providers/loading_list_notifier.dart';
+import '../../widgets/equipment/pick_asset.dart';
class RequestDeviceTransfer extends StatefulWidget {
static const String id = "/request-device-transfer";
@@ -31,287 +33,148 @@ class RequestDeviceTransfer extends StatefulWidget {
}
class _RequestDeviceTransferState extends State {
- bool _isLoading = false;
- bool _validate = false;
UserProvider _userProvider;
SettingProvider _settingProvider;
AssetTransferProvider _deviceTransferProvider;
final TextEditingController _requestedQuantityController = TextEditingController();
- final AssetTransfer _formModel = AssetTransfer(/*receiver: DeviceTransferInfo(), sender: DeviceTransferInfo()*/);
+ final AssetTransfer _transferModel = AssetTransfer();
final GlobalKey _formKey = GlobalKey();
final GlobalKey _scaffoldKey = GlobalKey();
+ final TextEditingController _receiverNameController = TextEditingController(), _commentsController = TextEditingController();
+ final Device _assetDestination = Device();
+ Device _pickedAsset;
@override
void setState(VoidCallback fn) {
if (mounted) super.setState(() {});
}
- _onSubmit() async {
- _validate = true;
- if (!_formKey.currentState.validate()) {
- setState(() {});
- return false;
+ void _onSubmit() async {
+ _transferModel.assetId = _pickedAsset.id;
+ _transferModel.destSiteId = _assetDestination.site?.id;
+ _transferModel.destBuildingId = _assetDestination.building?.id;
+ _transferModel.destFloorId = _assetDestination.floor?.id;
+ _transferModel.destDepartmentId = _assetDestination.department?.id;
+ if (!_formKey.currentState.validate() || !(await _transferModel.validate(context))) {
+ return;
}
_formKey.currentState.save();
-
- // if (!_formModel.validate()) {
- // setState(() {});
- // return false;
- // }
-
- _isLoading = true;
- setState(() {});
- // _formModel.sender?.client?.id = _userProvider.user?.clientId;
- int status = await _deviceTransferProvider.createRequest(
- user: _userProvider.user,
- host: _settingProvider.host,
- model: _formModel,
- );
- _isLoading = false;
- setState(() {});
- 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),
- // ));
- // }
+ await _deviceTransferProvider.createRequest(context: context, assetDestination: _transferModel, asset: _pickedAsset);
}
@override
void dispose() {
_requestedQuantityController.dispose();
_deviceTransferProvider.reset();
+ _receiverNameController.dispose();
+ _commentsController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
- _userProvider = Provider.of(context);
- _settingProvider = Provider.of(context);
+ _userProvider = Provider.of(context, listen: false);
+ _settingProvider = Provider.of(context, listen: false);
_deviceTransferProvider = Provider.of(context, listen: false);
return Scaffold(
key: _scaffoldKey,
+ appBar: DefaultAppBar(title: context.translation.newTransferRequest),
body: Form(
key: _formKey,
child: SafeArea(
- child: LoadingManager(
- isLoading: _isLoading,
- isFailedLoading: false,
- stateCode: 200,
- onRefresh: () async {},
- child: SingleChildScrollView(
- padding: EdgeInsets.all(12 * AppStyle.getScaleFactor(context)),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Center(
- child: Padding(
- padding: const EdgeInsets.all(8.0),
- child: Text(
- "Transfer Asset",
- style: Theme.of(context).textTheme.headline5.copyWith(color: Theme.of(context).primaryColor, fontSize: 28, fontWeight: FontWeight.bold),
- ),
+ child: Column(
+ children: [
+ SingleChildScrollView(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ 16.height,
+ PickAsset(
+ device: _pickedAsset,
+ onPickAsset: (asset) {
+ _pickedAsset = asset;
+ setState(() {});
+ },
+ ),
+ 16.height,
+ context.translation.receiverDetails.heading5(context),
+ 8.height,
+ AppTextFormField(
+ controller: _receiverNameController,
+ labelText: context.translation.receiverName,
+ validator: (text) => Validator.hasValue(text) ? null : context.translation.requiredField,
+ onSaved: (text) {},
+ ),
+ 8.height,
+ SingleItemDropDownMenu(
+ context: context,
+ title: context.translation.destinationSite,
+ initialValue: _assetDestination?.site,
+ onSelect: (value) {
+ _assetDestination.site = value;
+ _assetDestination.building = null;
+ _assetDestination.floor = null;
+ _assetDestination.department = null;
+ setState(() {});
+ },
+ ),
+ 8.height,
+ SingleItemDropDownMenu(
+ context: context,
+ title: context.translation.building,
+ initialValue: _assetDestination?.building,
+ enabled: _assetDestination?.site?.buildings?.isNotEmpty ?? false,
+ staticData: _assetDestination?.site?.buildings ?? [],
+ onSelect: (value) {
+ _assetDestination?.building = value;
+ _assetDestination?.floor = null;
+ _assetDestination?.department = null;
+ setState(() {});
+ },
+ ),
+ 8.height,
+ SingleItemDropDownMenu(
+ context: context,
+ title: context.translation.floor,
+ initialValue: _assetDestination?.floor,
+ enabled: _assetDestination?.building?.floors?.isNotEmpty ?? false,
+ staticData: _assetDestination?.building?.floors ?? [],
+ onSelect: (value) {
+ _assetDestination?.floor = value;
+ _assetDestination?.department = null;
+ setState(() {});
+ },
+ ),
+ 8.height,
+ SingleItemDropDownMenu(
+ context: context,
+ title: context.translation.department,
+ initialValue: _assetDestination?.department,
+ enabled: _assetDestination?.floor?.departments?.isNotEmpty ?? false,
+ staticData: _assetDestination?.floor?.departments ?? [],
+ onSelect: (value) {
+ _assetDestination?.department = value;
+ },
),
- ),
- // const SizedBox(height: 8,),
- // ASubTitle(_subtitle.title),
- // if(_validate && _formModel.title == null || _formModel.title?.isEmpty == true)
- // ASubTitle(_subtitle.requiredWord,color: Colors.red,),
- // const SizedBox(height: 4,),
- // ATextFormField(
- // initialValue: _formModel?.title,
- // textAlign: TextAlign.center,
- // style: Theme.of(context).textTheme.subtitle1,
- // textInputType: TextInputType.text,
- // onSaved: (value){
- // _formModel.title = value;
- // },
- // ),
- 12.height,
- const ASubTitle("Asset"),
- if (_validate /*&& _formModel.device == null*/)
- ASubTitle(
- context.translation.requiredWord,
- color: Colors.red,
+ 16.height,
+ context.translation.comments.heading5(context),
+ 8.height,
+ AppTextFormField(
+ controller: _commentsController,
+ labelText: context.translation.comments,
+ onSaved: (text) {
+ _transferModel.senderComment = text;
+ },
),
- 6.height,
- // DeviceButton(
- // device: _formModel.device,
- // onDevicePick: (device) {
- // _formModel.device = device;
- // _formModel.sender.client = device.hospital;
- // setState(() {});
- // },
- // ),
- // if (_formModel.device != null) 8.height,
- // if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Site", value: _formModel.device.hospital?.name),
- // if (_formModel.device != null) 4.height,
- // if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Department", value: _formModel.device.destDepartmentName),
- // if (_formModel.device != null) 4.height,
- // if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Floor", value: _formModel.device.destFloor),
- // if (_formModel.device != null) 4.height,
- // if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Room", value: _formModel.device.destRoom),
- // if (_formModel.device != null) 8.height,
- // const SizedBox(height: 8,),
- // const ASubTitle("Sender Department"),
- // if(_validate && _formModel.senderDepartment == null)
- // ASubTitle(_subtitle.requiredWord,color: Colors.red,),
- // const SizedBox(height: 4,),
- // DepartmentButton(
- // department: _formModel.senderDepartment,
- // onDepartmentPick: (department){
- // _formModel.senderDepartment = department;
- // setState(() {});
- // },
- // ),
- // 12.height,
- // const ASubTitle("Destination Client"),
- // if (_validate && _formModel.receiver.client == null)
- // ASubTitle(
- // _subtitle.requiredWord,
- // color: Colors.red,
- // ),
- // 6.height,
- // HospitalButton(
- // hospital: _formModel.receiver.client,
- // onHospitalPick: (hospital) {
- // _formModel.receiver.client = hospital;
- // setState(() {});
- // },
- // ),
- // 12.height,
- // const ASubTitle("Destination Department"),
- // if (_validate && _formModel.receiver.department == null)
- // ASubTitle(
- // _subtitle.requiredWord,
- // color: Colors.red,
- // ),
- // 6.height,
- // DepartmentButton(
- // department: _formModel.receiver.department,
- // onDepartmentPick: (department) {
- // _formModel.receiver.department = department;
- // setState(() {});
- // },
- // ),
- const SizedBox(
- height: 4,
- ),
- Divider(
- color: Theme.of(context).colorScheme.primary,
- ),
- const SizedBox(height: 8),
- const ASubTitle("Destination"),
- const SizedBox(
- height: 4,
- ),
- HospitalAutoCompleteField(
- initialValue: _deviceTransferProvider.hospital?.name,
- // onSave: (value){
- // _search.hospital = value;
- // },
- onSearch: (value) {
- _deviceTransferProvider.hospital = value;
- _deviceTransferProvider.building = null;
- _deviceTransferProvider.floor = null;
- _deviceTransferProvider.department = null;
- // _formModel.receiver.client = value;
- setState(() {});
- },
- ),
- const SizedBox(
- height: 8,
- ),
- BuildingTypeMenu(
- initialValue: _deviceTransferProvider?.building,
- building: _deviceTransferProvider?.hospital?.buildings,
- onSelect: (status) {
- _deviceTransferProvider.building = status;
- setState(() {});
- },
- ),
- const SizedBox(height: 8),
- FloorTypeMenu(
- initialValue: _deviceTransferProvider?.floor,
- floors: _deviceTransferProvider?.building?.floors,
- onSelect: (status) {
- _deviceTransferProvider.floor = status;
- setState(() {});
- },
- ),
- const SizedBox(height: 8),
- DepartmentTypeMenu(
- initialValue: _deviceTransferProvider?.department,
- departments: _deviceTransferProvider?.floor?.departments,
- onSelect: (status) {
- _deviceTransferProvider.department = status;
- // _formModel.receiver.department = Department(id: status.id, name: status.name);
- setState(() {});
- },
- ),
- const SizedBox(height: 8),
- const ASubTitle("Room"),
- const SizedBox(
- height: 4,
- ),
- ATextFormField(
- textAlign: TextAlign.center,
- controller: _requestedQuantityController,
- style: Theme.of(context).textTheme.subtitle1,
- validator: (value) => Validator.isNumeric(value) ? null : "allow numbers only",
- textInputType: TextInputType.number,
- onSaved: (value) {
- _deviceTransferProvider.room = value;
- },
- ),
- 12.height,
- AButton(
- text: context.translation.submit,
- onPressed: _onSubmit,
- ),
- const SizedBox(
- height: 100,
- )
- ],
- ),
- ),
- ),
+ 100.height,
+ ],
+ ),
+ ).expanded,
+ AppFilledButton(label: context.translation.submitRequest, maxWidth: true, onPressed: _onSubmit)
+ ],
+ ).paddingOnly(start: 16, end: 16, bottom: 24),
),
),
);
}
}
-
-class AdditionalAssetInfo extends StatelessWidget {
- final String title, value;
- const AdditionalAssetInfo({@required this.title, @required this.value, Key key}) : super(key: key);
-
- @override
- Widget build(BuildContext context) {
- return Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- ASubTitle(title ?? ""),
- Container(
- width: double.infinity,
- alignment: Alignment.center,
- padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16),
- decoration: BoxDecoration(
- color: AColors.inputFieldBackgroundColor,
- border: Border.all(
- color: const Color(0xffefefef),
- ),
- borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
- ),
- child: ASubTitle(value ?? ""),
- ),
- ],
- );
- }
-}
diff --git a/lib/views/pages/sub_workorder/create_sub_workorder_page.dart b/lib/views/pages/sub_workorder/create_sub_workorder_page.dart
index 9542bf4b..6604135f 100644
--- a/lib/views/pages/sub_workorder/create_sub_workorder_page.dart
+++ b/lib/views/pages/sub_workorder/create_sub_workorder_page.dart
@@ -22,7 +22,6 @@ import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/status/service_request/service_request_defect_types_mune.dart';
import '../../../controllers/api_routes/http_status_manger.dart';
-import '../../../controllers/localization/localization.dart';
import '../../../controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.dart';
import '../../widgets/app_text_form_field.dart';
import '../../widgets/buttons/app_back_button.dart';
diff --git a/lib/views/pages/user/land_page.dart b/lib/views/pages/user/land_page.dart
index 127ea54e..9f00f6b3 100644
--- a/lib/views/pages/user/land_page.dart
+++ b/lib/views/pages/user/land_page.dart
@@ -12,7 +12,6 @@ import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/pages/new_gas_refill_request_page.dart';
-import 'package:test_sa/new_views/pages/new_transfer_request_page.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/pages/device_transfer/track_device_transfer.dart';
@@ -27,6 +26,7 @@ import 'package:test_sa/views/widgets/drawer/drawer_item.dart';
import 'package:url_launcher/url_launcher.dart';
import '../../widgets/land_page/land_page_item.dart';
+import '../device_transfer/request_device_transfer.dart';
import 'requests/requests_page.dart';
@Deprecated("Use the page which is inside the [new_views/pages/land_page] folder")
@@ -75,7 +75,7 @@ class _LandPageState extends State {
// _serviceRequestsProvider = Provider.of(context);
// _preventiveMaintenanceVisitsProvider = Provider.of(context);
// _regularVisitsProvider = Provider.of(context);
- //
+ //
if (firstTime) {
if (path != null) {
Navigator.of(context).pushNamed("/" + path.split("/").first, arguments: path.split("/").last);
@@ -147,7 +147,7 @@ class _LandPageState extends State {
mainAxisSpacing: 12,
childAspectRatio: 1,
children: [
- /// enable this condition when the nurse account works
+ /// todo [zaid] : enable this condition when the nurse account works
// if (_userProvider.user != null && _userProvider.user.type == UsersTypes.normal_user)
LandPageItem(
// text: _subtitle.newServiceRequest,
@@ -182,7 +182,7 @@ class _LandPageState extends State {
// Navigator.of(context).pushNamed(PreventiveMaintenanceVisitsPage.id);
// },
// ),
- /// enable this condition when the nurse account works
+ /// todo [zaid] : enable this condition when the nurse account works
// if (_userProvider?.user != null && _userProvider?.user?.type != UsersTypes.engineer)
LandPageItem(
text: "Request Gas Refill",
@@ -203,8 +203,7 @@ class _LandPageState extends State {
text: "Transfer Asset",
icon: FontAwesomeIcons.rightLeft,
onPressed: () {
- // Navigator.of(context).pushNamed(RequestDeviceTransfer.id);
- Navigator.of(context).pushNamed(NewTransferRequestPage.routeName);
+ Navigator.of(context).pushNamed(RequestDeviceTransfer.id);
},
),
LandPageItem(
@@ -215,7 +214,7 @@ class _LandPageState extends State {
},
),
- /// enable this condition when the nurse account works
+ /// todo [zaid] : enable this condition when the nurse account works
// if (_userProvider?.user != null && _userProvider?.user?.type != UsersTypes.normal_user)
LandPageItem(
text: "Create Sub Work Order",
diff --git a/lib/views/pages/user/requests/create_service_request_page.dart b/lib/views/pages/user/requests/create_service_request_page.dart
index 7d8c121b..7aa6e510 100644
--- a/lib/views/pages/user/requests/create_service_request_page.dart
+++ b/lib/views/pages/user/requests/create_service_request_page.dart
@@ -1,11 +1,7 @@
import 'dart:convert';
import 'dart:io';
-import 'package:file_picker/file_picker.dart';
-import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
-import 'package:fluttertoast/fluttertoast.dart';
-import 'package:image_picker/image_picker.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
@@ -16,19 +12,20 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
+import 'package:test_sa/providers/service_request_providers/requested_through_provider.dart';
import 'package:test_sa/views/widgets/equipment/pick_asset.dart';
+import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/sound/record_sound.dart';
import '../../../../models/lookup.dart';
import '../../../../new_views/app_style/app_color.dart';
-import '../../../../new_views/common_widgets/app_dashed_button.dart';
-import '../../../../new_views/common_widgets/app_lazy_loading.dart';
import '../../../../new_views/common_widgets/app_text_form_field.dart';
import '../../../../new_views/common_widgets/default_app_bar.dart';
import '../../../../new_views/common_widgets/single_item_drop_down_menu.dart';
import '../../../../providers/service_request_providers/equipment_status_provider.dart';
import '../../../../providers/service_request_providers/priority_provider.dart';
+import '../../../../providers/service_request_providers/type_of_request_provider.dart';
class CreateServiceRequestPage extends StatefulWidget {
static const String id = "/create-request";
@@ -156,8 +153,30 @@ class CreateServiceRequestPageState extends State {
},
),
8.height,
- AppDashedButton(title: _serviceRequest.devicePhotos?.first?.split("/")?.last ?? context.translation.attachImage, onPressed: _attachImage),
- 16.height,
+ Consumer(builder: (context, snapshot, _) {
+ return SingleItemDropDownMenu(
+ context: context,
+ enabled: false,
+ title: context.translation.requestedThrough,
+ initialValue: snapshot.items?.firstWhere((element) => element.id == 375, orElse: () => null),
+ );
+ }),
+ 8.height,
+ SingleItemDropDownMenu(
+ context: context,
+ title: context.translation.typeOfRequest,
+ initialValue: _serviceRequest?.type,
+ onSelect: (value) {
+ _serviceRequest.type = value;
+ },
+ ),
+ 8.height,
+ MultiFilesPicker(
+ label: context.translation.attachImage,
+ onlyImages: true,
+ files: _deviceImages,
+ ),
+ ((_serviceRequest.devicePhotos?.isNotEmpty ?? false) ? 16 : 8).height,
Align(
alignment: AlignmentDirectional.centerStart,
child: context.translation.callComments.heading5(context),
@@ -191,58 +210,8 @@ class CreateServiceRequestPageState extends State {
);
}
- _attachImage() async {
- ImageSource source = await showDialog(
- context: context,
- builder: (dialogContext) => CupertinoAlertDialog(
- actions: [
- TextButton(
- child: Text(context.translation.pickFromCamera),
- onPressed: () {
- Navigator.of(dialogContext).pop(ImageSource.camera);
- },
- ),
- TextButton(
- child: Text(context.translation.pickFromGallery),
- onPressed: () {
- Navigator.of(dialogContext).pop(ImageSource.gallery);
- },
- ),
- TextButton(
- child: Text(context.translation.pickFromFiles),
- onPressed: () async {
- await _fromFilePicker();
- Navigator.pop(context);
- },
- ),
- ],
- ),
- );
- if (source == null) return;
-
- final pickedFile = await ImagePicker().pickImage(source: source, imageQuality: 70, maxWidth: 800, maxHeight: 800);
- if (pickedFile != null) {
- _serviceRequest.devicePhotos ??= [];
- _serviceRequest.devicePhotos?.clear();
- _serviceRequest.devicePhotos?.add(pickedFile.path);
- setState(() {});
- }
- }
-
- _fromFilePicker() async {
- FilePickerResult result = await FilePicker.platform.pickFiles(
- type: FileType.custom,
- allowedExtensions: ['jpg', 'jpeg', 'png', 'pdf', 'doc', 'docx', 'xlsx', 'pptx'],
- );
- if (result?.files?.first != null) {
- _serviceRequest.devicePhotos ??= [];
- _serviceRequest.devicePhotos?.clear();
- _serviceRequest.devicePhotos?.add(result?.files?.first?.path);
- setState(() {});
- }
- }
-
Future _submit() async {
+ _serviceRequest?.requestedThrough = Provider.of(context, listen: false).items?.firstWhere((element) => element.id == 375, orElse: () => null);
if (_formKey.currentState.validate() && await _serviceRequest.validateNewRequest(context)) {
_formKey.currentState.save();
_serviceRequest.devicePhotos = _deviceImages.map((e) => _isLocalUrl(e.path) ? "${e.path.split("/").last}|${base64Encode(e.readAsBytesSync())}" : e.path).toList();
@@ -252,19 +221,12 @@ class CreateServiceRequestPageState extends State {
_serviceRequest.audio = "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}";
}
}
- showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
- int status = await _serviceRequestsProvider.createRequest(
+ await _serviceRequestsProvider.createRequest(
+ context: context,
user: _userProvider.user,
host: _settingProvider.host,
serviceRequest: _serviceRequest,
);
- Navigator.of(context);
- if (status >= 200 && status < 300) {
- Fluttertoast.showToast(msg: context.translation.successfulRequestMessage);
- Navigator.pop(context);
- } else {
- Fluttertoast.showToast(msg: context.translation.failedRequestMessage);
- }
}
}
}
diff --git a/lib/views/pages/user/requests/work_order/create_service_report.dart b/lib/views/pages/user/requests/work_order/create_service_report.dart
index 55fef57a..8893c3f1 100644
--- a/lib/views/pages/user/requests/work_order/create_service_report.dart
+++ b/lib/views/pages/user/requests/work_order/create_service_report.dart
@@ -5,7 +5,6 @@ import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
-import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
@@ -17,7 +16,6 @@ import 'package:test_sa/models/engineer.dart';
import 'package:test_sa/models/part.dart';
import 'package:test_sa/models/service_report.dart';
import 'package:test_sa/models/service_request/service_request.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';
import 'package:test_sa/views/widgets/app_text_form_field.dart';
@@ -59,7 +57,7 @@ class _CreateServiceReportState extends State with TickerPr
ServiceReport _serviceReport;
bool _isLoading = false;
bool _showCommentField = false;
-
+
final List _files = [];
final GlobalKey _formKey = GlobalKey();
final GlobalKey _scaffoldKey = GlobalKey();
diff --git a/lib/views/pages/user/requests/work_order/edit_service_report.dart b/lib/views/pages/user/requests/work_order/edit_service_report.dart
index 8e6d3475..21934713 100644
--- a/lib/views/pages/user/requests/work_order/edit_service_report.dart
+++ b/lib/views/pages/user/requests/work_order/edit_service_report.dart
@@ -5,7 +5,6 @@ import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/http_status_manger.dart';
-import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_last_calls_provider.dart';
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_provider.dart';
@@ -18,7 +17,6 @@ import 'package:test_sa/models/engineer.dart';
import 'package:test_sa/models/part.dart';
import 'package:test_sa/models/service_report.dart';
import 'package:test_sa/models/service_request/service_request.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';
import 'package:test_sa/views/widgets/app_text_form_field.dart';
@@ -60,7 +58,7 @@ class _EditServiceReportState extends State with TickerProvid
ServiceReport _serviceReport;
bool _isLoading = false;
bool _showCommentField = false;
-
+
List _images = [];
final GlobalKey _formKey = GlobalKey();
final GlobalKey _scaffoldKey = GlobalKey();
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 0fe9a0f3..d3c562aa 100644
--- a/lib/views/widgets/device_trancfer/device_transfer_info_section.dart
+++ b/lib/views/widgets/device_trancfer/device_transfer_info_section.dart
@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
-import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/widgets/loaders/image_loader.dart';
diff --git a/lib/views/widgets/images/multi_image_picker.dart b/lib/views/widgets/images/multi_image_picker.dart
index c0885083..916ffd38 100644
--- a/lib/views/widgets/images/multi_image_picker.dart
+++ b/lib/views/widgets/images/multi_image_picker.dart
@@ -5,170 +5,74 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:image_picker/image_picker.dart';
-import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.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';
-import 'package:test_sa/views/widgets/buttons/app_flat_button.dart';
-import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import '../../../new_views/common_widgets/app_dashed_button.dart';
import 'multi_image_picker_item.dart';
class MultiFilesPicker extends StatefulWidget {
final String label;
final bool error;
final List files;
- final bool enabled;
+ final bool enabled, onlyImages;
- const MultiFilesPicker({Key key, this.files, this.label, this.error = false, this.enabled = true}) : super(key: key);
+ const MultiFilesPicker({Key key, this.files, this.label, this.error = false, this.enabled = true, this.onlyImages = false}) : super(key: key);
@override
- _MultiFilesPickerState createState() => _MultiFilesPickerState();
+ State createState() => _MultiFilesPickerState();
}
-class _MultiFilesPickerState extends State with TickerProviderStateMixin {
- Size _size;
-
+class _MultiFilesPickerState extends State {
@override
Widget build(BuildContext context) {
- _size = MediaQuery.of(context).size;
-
- return (widget.enabled == false && (widget.files?.isEmpty ?? false))
- ? const SizedBox()
- : Container(
- padding: const EdgeInsets.all(12),
- decoration: BoxDecoration(
- color: const Color(0xfff5f5f5),
- border: Border.all(
- color: const Color(0xffefefef),
- ),
- borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
- ),
- child: Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- // SizedBox(height: 8 * AppStyle.getScaleFactor(context),),
- Row(
- children: [
- Expanded(
- child: Text(
- widget.label ?? context.translation.images,
- style: Theme.of(context).textTheme.headline6.copyWith(
- fontSize: 14,
- ),
- textScaleFactor: AppStyle.getScaleFactor(context),
- ),
- ),
- if (widget.enabled)
- AFlatButton(
- text: context.translation.add,
- onPressed: widget.enabled
- ? () {
- // onImagePick(_subtitle);
- onFilePicker(context.translation);
- }
- : null,
- ),
- ],
- ),
- 12.height,
- AnimatedSize(
- duration: const Duration(milliseconds: 400),
- child: !widget.error
- ? const SizedBox.shrink()
- : Column(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Text(
- context.translation.imagesRequired,
- style: Theme.of(context).textTheme.headline6.copyWith(
- fontSize: 14,
- color: AColors.red,
- ),
- textScaleFactor: AppStyle.getScaleFactor(context),
- ),
- SizedBox(
- height: 8 * AppStyle.getScaleFactor(context),
- ),
- ],
- ),
- ),
- AnimatedSwitcher(
- duration: const Duration(milliseconds: 400),
- child: Container(
- key: ValueKey(widget.files.length),
- width: _size.width,
- height: 200 * AppStyle.getScaleFactor(context),
- padding: EdgeInsets.all(
- 8 * AppStyle.getScaleFactor(context),
- ),
- alignment: Alignment.topLeft,
- decoration: BoxDecoration(
- border: Border.all(color: Theme.of(context).primaryColor, width: 2),
- borderRadius: BorderRadius.circular(8 * AppStyle.getScaleFactor(context)),
- ),
- child: widget.files.isEmpty && widget.enabled
- ? MaterialButton(
- onPressed: widget.enabled
- ? () {
- // onImagePick(_subtitle);
- onFilePicker(context.translation);
- }
- : null,
- child: Center(
- child: Icon(
- Icons.file_upload,
- size: 48 * AppStyle.getScaleFactor(context),
- color: Theme.of(context).primaryColor,
- )),
- )
- : GridView.count(
- crossAxisCount: 2,
- //_size.width ~/ 80,
- scrollDirection: Axis.horizontal,
- mainAxisSpacing: 10,
- crossAxisSpacing: 10,
- children: List.generate(widget.files.length, (index) {
- File _image = widget.files[index];
- return MultiFilesPickerItem(
- file: _image,
- enabled: widget.enabled,
- onRemoveTap: (image) {
- if (!widget.enabled) {
- return;
- }
- widget.files.remove(image);
- setState(() {});
- },
- );
- }),
- ),
- ),
- ),
- ],
+ return Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ AppDashedButton(title: widget.label, onPressed: (widget.enabled == false) ? () {} : onFilePicker),
+ 16.height,
+ if (widget.files?.isNotEmpty ?? false)
+ Wrap(
+ spacing: 8.toScreenWidth,
+ children: List.generate(
+ widget.files.length,
+ (index) {
+ File image = widget.files[index];
+ return MultiFilesPickerItem(
+ file: image,
+ enabled: widget.enabled,
+ onRemoveTap: (image) {
+ if (!widget.enabled) {
+ return;
+ }
+ widget.files.remove(image);
+ setState(() {});
+ },
+ );
+ },
),
- );
+ ),
+ ],
+ );
}
- fromFilePicker(AppLocalizations subtitle) async {
+ fromFilePicker() async {
FilePickerResult result = await FilePicker.platform.pickFiles(
type: FileType.custom,
allowMultiple: true,
- allowedExtensions: ['jpg', 'jpeg', 'png', 'pdf', 'doc', 'docx', 'xlsx', 'pptx'],
+ allowedExtensions: widget.onlyImages ? ['jpg', 'jpeg', 'png'] : ['jpg', 'jpeg', 'png', 'pdf', 'doc', 'docx', 'xlsx', 'pptx'],
);
if (result != null) {
for (var path in result.paths) {
- widget.files.insert(0, File(path));
+ widget.files.add(File(path));
}
setState(() {});
}
}
- onFilePicker(AppLocalizations subtitle) async {
+ onFilePicker() async {
if (widget.files.length >= 5) {
- Fluttertoast.showToast(msg: subtitle.maxImagesNumberIs5);
+ Fluttertoast.showToast(msg: context.translation.maxImagesNumberIs5);
return;
}
ImageSource source = await showDialog(
@@ -176,21 +80,21 @@ class _MultiFilesPickerState extends State with TickerProvider
builder: (dialogContext) => CupertinoAlertDialog(
actions: [
TextButton(
- child: Text(subtitle.pickFromCamera),
+ child: Text(context.translation.pickFromCamera),
onPressed: () {
Navigator.of(dialogContext).pop(ImageSource.camera);
},
),
TextButton(
- child: Text(subtitle.pickFromGallery),
+ child: Text(context.translation.pickFromGallery),
onPressed: () {
Navigator.of(dialogContext).pop(ImageSource.gallery);
},
),
TextButton(
- child: Text(subtitle.pickFromFiles),
+ child: Text(context.translation.pickFromFiles),
onPressed: () async {
- await fromFilePicker(subtitle);
+ await fromFilePicker();
Navigator.pop(context);
},
),
@@ -204,7 +108,7 @@ class _MultiFilesPickerState extends State with TickerProvider
if (pickedFile != null) {
File fileImage = File(pickedFile.path);
if (fileImage != null) {
- widget.files.insert(0, fileImage);
+ widget.files.add(fileImage);
setState(() {});
}
}
diff --git a/lib/views/widgets/images/multi_image_picker_item.dart b/lib/views/widgets/images/multi_image_picker_item.dart
index 907c20fa..04666f67 100644
--- a/lib/views/widgets/images/multi_image_picker_item.dart
+++ b/lib/views/widgets/images/multi_image_picker_item.dart
@@ -3,10 +3,12 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:open_file/open_file.dart';
+import 'package:test_sa/extensions/context_extension.dart';
+import 'package:test_sa/extensions/int_extensions.dart';
+import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.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/buttons/app_back_button.dart';
+import 'package:test_sa/new_views/app_style/app_color.dart';
+import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
import 'package:test_sa/views/widgets/loaders/image_loader.dart';
import 'package:url_launcher/url_launcher.dart';
@@ -22,72 +24,64 @@ class MultiFilesPickerItem extends StatelessWidget {
var isImage = file.path.split(".").last.toLowerCase() == "png" || file.path.split(".").last.toLowerCase() == "jpg" || file.path.split(".").last.toLowerCase() == "jpeg";
var isPdf = file.path.split(".").last.toLowerCase() == "pdf";
var isExcel = file.path.split(".").last.toLowerCase() == "xlsx";
- return Container(
- width: 80 * AppStyle.getScaleFactor(context),
- height: 80 * AppStyle.getScaleFactor(context),
- decoration: BoxDecoration(
- boxShadow: [BoxShadow(color: isImage ? Colors.black38 : AColors.cyan.withOpacity(0.5), blurRadius: 2)],
- image: DecorationImage(
- image: isImage
- ? (_isLocalUrl(file.path) ? FileImage(file) : NetworkImage(file.path))
- : AssetImage("assets/images/${isPdf ? "pdf" : isExcel ? "excel" : "doc"}.png"),
- fit: BoxFit.cover,
- ),
- borderRadius: BorderRadius.circular(8),
- ),
- child: MaterialButton(
- padding: EdgeInsets.zero,
- onPressed: () async {
- if (isImage) {
- Navigator.of(context).push(
- MaterialPageRoute(
- builder: (_) => Scaffold(
- body: SafeArea(
- child: Stack(
- children: [
- InteractiveViewer(
- child: _isLocalUrl(file.path)
- ? Image.file(file)
- : ImageLoader(
- url: file.path,
- boxFit: BoxFit.cover,
- ))
- .center,
- const ABackButton(),
- ],
- ),
- ),
- ),
+ return SizedBox(
+ width: 54.toScreenWidth,
+ height: 51.toScreenWidth,
+ child: Stack(
+ alignment: AlignmentDirectional.topEnd,
+ children: [
+ Container(
+ margin: EdgeInsetsDirectional.only(top: 4.toScreenHeight, end: 6.toScreenWidth),
+ decoration: BoxDecoration(
+ border: Border.all(width: 1, color: context.isDark ? AppColor.neutral30 : AppColor.neutral30),
+ image: DecorationImage(
+ image: isImage
+ ? (_isLocalUrl(file.path) ? FileImage(file) : NetworkImage(file.path))
+ : AssetImage("assets/images/${isPdf ? "pdf" : isExcel ? "excel" : "doc"}.png"),
+ fit: BoxFit.cover,
),
- );
- } else if (_isLocalUrl(file.path)) {
- OpenFile.open(file.path);
- } else {
- if (!await launchUrl(Uri.parse(file.path), mode: LaunchMode.externalApplication)) {
- Fluttertoast.showToast(msg: "UnExpected Error with file.");
- throw Exception('Could not launch ');
- }
- }
- },
- child: enabled
- ? Align(
- alignment: Alignment.topRight,
- child: IconButton(
- padding: const EdgeInsets.all(2.0),
- icon: Container(
- padding: const EdgeInsets.all(1),
- decoration: BoxDecoration(color: Theme.of(context).scaffoldBackgroundColor.withOpacity(.3), borderRadius: BorderRadius.circular(8)),
- child: const Icon(
- Icons.remove_circle,
- color: AColors.red,
+ borderRadius: BorderRadius.circular(8),
+ ),
+ child: MaterialButton(
+ padding: EdgeInsets.zero,
+ onPressed: () async {
+ if (isImage) {
+ Navigator.of(context).push(
+ MaterialPageRoute(
+ builder: (_) => Scaffold(
+ appBar: const DefaultAppBar(),
+ body: SafeArea(
+ child: InteractiveViewer(
+ child: _isLocalUrl(file.path)
+ ? Image.file(file)
+ : ImageLoader(
+ url: file.path,
+ boxFit: BoxFit.cover,
+ ),
+ ).center,
+ ),
+ ),
),
- ),
- onPressed: () {
- onRemoveTap(file);
- },
- ),
- )
- : const SizedBox(),
+ );
+ } else if (_isLocalUrl(file.path)) {
+ OpenFile.open(file.path);
+ } else {
+ if (!await launchUrl(Uri.parse(file.path), mode: LaunchMode.externalApplication)) {
+ Fluttertoast.showToast(msg: "UnExpected Error with file.");
+ throw Exception('Could not launch ');
+ }
+ }
+ },
+ ),
+ ),
+ if (enabled)
+ InkWell(
+ child: "remove".toSvgAsset(width: 16),
+ onTap: () {
+ onRemoveTap(file);
+ },
+ )
+ ],
),
);
}
diff --git a/lib/views/widgets/pentry/pentry_info_form.dart b/lib/views/widgets/pentry/pentry_info_form.dart
index 2cfc7076..f38b1fbc 100644
--- a/lib/views/widgets/pentry/pentry_info_form.dart
+++ b/lib/views/widgets/pentry/pentry_info_form.dart
@@ -2,7 +2,6 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
-import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/pantry/pentry.dart';
@@ -35,7 +34,7 @@ class _PentryInfoFormState extends State {
@override
Widget build(BuildContext context) {
widget.model?.files ??= [];
-
+
final userProvider = Provider.of(context);
return Padding(
padding: EdgeInsets.only(