From 90aabebe12d482cc2e62b70778db087d52460402 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Thu, 31 Aug 2023 09:34:03 +0300 Subject: [PATCH] calling api to get complete data for service request to show attachments and voice notes. & improvements --- .../api/service_requests_provider.dart | 14 ++++++++++ .../service_request/service_request.dart | 6 +++-- .../pages/user/requests/create_request.dart | 26 +++++++++++++++++-- .../widgets/images/multi_image_picker.dart | 3 +++ .../images/multi_image_picker_item.dart | 9 +++++-- 5 files changed, 52 insertions(+), 6 deletions(-) diff --git a/lib/controllers/providers/api/service_requests_provider.dart b/lib/controllers/providers/api/service_requests_provider.dart index 41e749c0..21b690a7 100644 --- a/lib/controllers/providers/api/service_requests_provider.dart +++ b/lib/controllers/providers/api/service_requests_provider.dart @@ -614,6 +614,20 @@ class ServiceRequestsProvider extends ChangeNotifier { } } + Future getServiceRequestObjectById({@required String requestId}) async { + try { + Response response = await ApiManager.instance.get(URLs.getServiceRequestById + "?callRequestId=$requestId"); + if (response.statusCode >= 200 && response.statusCode < 300) { + return ServiceRequest.fromJson(json.decode(response.body)["data"]); + } else { + return null; + } + } catch (error) { + print(error); + return null; + } + } + Future> getServiceRequestById({@required String requestId}) async { Response response; try { diff --git a/lib/models/service_request/service_request.dart b/lib/models/service_request/service_request.dart index 68a55eb8..78828a29 100644 --- a/lib/models/service_request/service_request.dart +++ b/lib/models/service_request/service_request.dart @@ -84,9 +84,11 @@ class ServiceRequest { factory ServiceRequest.fromJson(Map parsedJson) { List images = []; + print(parsedJson["attachmentsCallRequest"]); if (parsedJson["attachmentsCallRequest"] != null) if (parsedJson["attachmentsCallRequest"] is List) { List list = parsedJson["attachmentsCallRequest"]; - images = list.map((e) => URLs.getFileUrl(e["attachmentsCallRequest"])).toList(); + images = list.map((e) => URLs.getFileUrl(e["name"])).toList(); + print(images); } return ServiceRequest( id: parsedJson["id"].toString(), @@ -123,7 +125,7 @@ class ServiceRequest { reviewComment: parsedJson["reviewComment"], type: Lookup.fromJson(parsedJson['typeofRequest']), defectType: Lookup.fromJson(parsedJson['defectType']), - loanAvailability: Lookup.fromJson(parsedJson['loanAvailability']), + loanAvailability: Lookup.fromJson(parsedJson['loanAvailablity']), firstAction: Lookup.fromJson(parsedJson['firstAction']), requestedThrough: Lookup.fromJson(parsedJson['requestedThrough']), priority: Lookup.fromJson(parsedJson['priority']), diff --git a/lib/views/pages/user/requests/create_request.dart b/lib/views/pages/user/requests/create_request.dart index dddba5a1..74000354 100644 --- a/lib/views/pages/user/requests/create_request.dart +++ b/lib/views/pages/user/requests/create_request.dart @@ -74,14 +74,33 @@ class CreateRequestPageState extends State { _device = _serviceRequest.device; _deviceImages.addAll(_serviceRequest.devicePhotos.map((e) => File(e)).toList()); _showDatePicker = _serviceRequest.firstAction != null && _serviceRequest.firstAction.name == "Need a visit"; + if (_showDatePicker && _serviceRequest.visitDate != null) { + _dateTime = DateTime.tryParse(_serviceRequest.visitDate); + } } else { _serviceRequest = ServiceRequest(); } + _isLoading = true; super.initState(); } getServiceRequestById(String id) async { - await _serviceRequestsProvider.getServiceRequestById(requestId: id) ?? ""; + try { + ServiceRequest request = await _serviceRequestsProvider.getServiceRequestObjectById(requestId: id) ?? ""; + _serviceRequest = request; + _device = _serviceRequest.device; + _deviceImages.addAll(_serviceRequest.devicePhotos.map((e) { + return File(e); + }).toList()); + _showDatePicker = _serviceRequest.firstAction != null && _serviceRequest.firstAction.name == "Need a visit"; + if (_showDatePicker && _serviceRequest.visitDate != null) { + _dateTime = DateTime.tryParse(_serviceRequest.visitDate); + } + _isLoading = false; + } catch (ex) { + _isLoading = false; + } + setState(() {}); } @override @@ -101,8 +120,11 @@ class CreateRequestPageState extends State { _height = MediaQuery.of(context).size.height; _userProvider = Provider.of(context); _settingProvider = Provider.of(context); - _serviceRequestsProvider = Provider.of(context); _subtitle = AppLocalization.of(context).subtitle; + if (_serviceRequestsProvider == null) { + _serviceRequestsProvider = Provider.of(context); + getServiceRequestById(widget.serviceRequest.id); + } return Scaffold( key: _scaffoldKey, diff --git a/lib/views/widgets/images/multi_image_picker.dart b/lib/views/widgets/images/multi_image_picker.dart index 84ad643e..a19d3d56 100644 --- a/lib/views/widgets/images/multi_image_picker.dart +++ b/lib/views/widgets/images/multi_image_picker.dart @@ -130,6 +130,9 @@ class _MultiFilesPickerState extends State with TickerProvider return MultiFilesPickerItem( file: _image, onRemoveTap: (image) { + if (!widget.enabled) { + return; + } widget.files.remove(image); setState(() {}); }, diff --git a/lib/views/widgets/images/multi_image_picker_item.dart b/lib/views/widgets/images/multi_image_picker_item.dart index 8ec971d8..fea9ce6f 100644 --- a/lib/views/widgets/images/multi_image_picker_item.dart +++ b/lib/views/widgets/images/multi_image_picker_item.dart @@ -23,7 +23,7 @@ class MultiFilesPickerItem extends StatelessWidget { boxShadow: [BoxShadow(color: isImage ? Colors.black38 : AColors.cyan.withOpacity(0.5), blurRadius: 2)], image: DecorationImage( image: isImage - ? FileImage(file) + ? (_isLocalUrl(file.path) ? FileImage(file) : NetworkImage(file.path)) : AssetImage("assets/images/${isPdf ? "pdf" : isExcel ? "excel" : "doc"}.png"), fit: BoxFit.cover, ), @@ -39,7 +39,7 @@ class MultiFilesPickerItem extends StatelessWidget { body: SafeArea( child: Stack( children: [ - Center(child: isImage ? InteractiveViewer(child: Image(image: FileImage(file))) : const SizedBox.shrink()), + Center(child: isImage ? InteractiveViewer(child: Image(image: (_isLocalUrl(file.path) ? FileImage(file) : NetworkImage(file.path)))) : const SizedBox.shrink()), const ABackButton(), ], ), @@ -69,4 +69,9 @@ class MultiFilesPickerItem extends StatelessWidget { ), ); } + + bool _isLocalUrl(String url) { + if (url?.isEmpty != false) return false; + return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\'); + } }