|
|
|
|
@ -1,3 +1,6 @@
|
|
|
|
|
import 'dart:convert';
|
|
|
|
|
import 'dart:io';
|
|
|
|
|
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
|
import 'package:test_sa/controllers/api_routes/urls.dart';
|
|
|
|
|
@ -19,13 +22,27 @@ import 'package:test_sa/service_request_latest/views/components/asset_detail_car
|
|
|
|
|
import 'package:test_sa/service_request_latest/views/components/initial_visit_card.dart';
|
|
|
|
|
import 'package:test_sa/service_request_latest/views/components/timer_widget.dart';
|
|
|
|
|
import 'package:test_sa/service_request_latest/views/forms/asset_retired/asset_retired.dart';
|
|
|
|
|
import 'package:test_sa/views/widgets/images/files_list.dart';
|
|
|
|
|
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
|
|
|
|
|
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
|
|
|
|
|
import 'package:test_sa/views/widgets/requests/request_status.dart';
|
|
|
|
|
import 'package:test_sa/views/widgets/sound/sound_player.dart';
|
|
|
|
|
|
|
|
|
|
class ServiceRequestDetailView extends StatelessWidget {
|
|
|
|
|
const ServiceRequestDetailView({Key? key}) : super(key: key);
|
|
|
|
|
class ServiceRequestDetailView extends StatefulWidget {
|
|
|
|
|
ServiceRequestDetailView({Key? key}) : super(key: key);
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
State<ServiceRequestDetailView> createState() => _ServiceRequestDetailViewState();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
|
|
|
|
|
List<File> _workOrderAttachments = [];
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
void initState() {
|
|
|
|
|
ServiceRequestDetailProvider requestDetailProvider = Provider.of<ServiceRequestDetailProvider>(context, listen: false);
|
|
|
|
|
_workOrderAttachments = requestDetailProvider.currentWorkOrder?.data?.workOrderAttachments.map((e) => File(e.name ?? '')).toList() ?? [];
|
|
|
|
|
super.initState();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
|
@ -45,7 +62,7 @@ class ServiceRequestDetailView extends StatelessWidget {
|
|
|
|
|
mainAxisSize: MainAxisSize.min,
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
workOrderDetailCard(context, requestProvider.currentWorkOrder!.data!, _userProvider),
|
|
|
|
|
workOrderDetailCard(context, requestProvider.currentWorkOrder!.data!, _userProvider, requestProvider),
|
|
|
|
|
initialVisitCard(requestDetailProvider: requestProvider, userProvider: _userProvider),
|
|
|
|
|
assetDetailCard(requestDetailProvider: requestProvider, userProvider: _userProvider),
|
|
|
|
|
20.height,
|
|
|
|
|
@ -69,7 +86,7 @@ class ServiceRequestDetailView extends StatelessWidget {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Widget workOrderDetailCard(BuildContext context, WorkOrderData workOrder, UserProvider userProvider) {
|
|
|
|
|
Widget workOrderDetailCard(BuildContext context, WorkOrderData workOrder, UserProvider userProvider, ServiceRequestDetailProvider requestProvider) {
|
|
|
|
|
return Column(
|
|
|
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
|
|
|
children: [
|
|
|
|
|
@ -230,11 +247,20 @@ class ServiceRequestDetailView extends StatelessWidget {
|
|
|
|
|
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120),
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
if (workOrder.workOrderAttachments.isNotEmpty ?? false) ...[
|
|
|
|
|
8.height,
|
|
|
|
|
const Divider().defaultStyle(context),
|
|
|
|
|
FilesList(images: workOrder.workOrderAttachments.map((toElement) => URLs.getFileUrl(toElement.name ?? '') ?? '').toList()),
|
|
|
|
|
],
|
|
|
|
|
|
|
|
|
|
8.height,
|
|
|
|
|
const Divider().defaultStyle(context),
|
|
|
|
|
MultiFilesPicker(
|
|
|
|
|
label: context.translation.attachments,
|
|
|
|
|
files: _workOrderAttachments,
|
|
|
|
|
buttonColor: AppColor.primary10,
|
|
|
|
|
onlyImages: false,
|
|
|
|
|
buttonIcon: 'quotation_icon'.toSvgAsset(color: AppColor.primary10),
|
|
|
|
|
onChange: (attachment) {
|
|
|
|
|
requestProvider.addWorkOrderAttachment(woId: workOrder.requestId!, attachments: attachment);
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
if (workOrder.voiceNote?.isNotEmpty ?? false) ...[
|
|
|
|
|
const Divider().defaultStyle(context),
|
|
|
|
|
16.height,
|
|
|
|
|
|