You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
185 lines
8.2 KiB
Dart
185 lines
8.2 KiB
Dart
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/extensions/string_extensions.dart';
|
|
import 'package:test_sa/extensions/widget_extensions.dart';
|
|
import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart';
|
|
import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
|
|
import 'package:test_sa/modules/demo_module/demo_extension_bottom_sheet.dart';
|
|
import 'package:test_sa/modules/demo_module/models/demo_request_model.dart';
|
|
import 'package:test_sa/modules/demo_module/provider/demo_provider.dart';
|
|
import 'package:test_sa/modules/loan_module/models/loan_attachment_model.dart';
|
|
import 'package:test_sa/new_views/app_style/app_color.dart';
|
|
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
|
|
import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
|
|
|
|
import '../../controllers/api_routes/urls.dart';
|
|
import '../../extensions/text_extensions.dart';
|
|
import '../../new_views/common_widgets/default_app_bar.dart';
|
|
import '../../views/widgets/images/files_list.dart';
|
|
import '../../views/widgets/requests/request_status.dart';
|
|
import '../loan_module/models/loan_request_model.dart';
|
|
import 'demo_activities_page.dart';
|
|
|
|
class DemoDetailViewPage extends StatefulWidget {
|
|
static const String id = "/demo-detail-page";
|
|
final int demoId;
|
|
|
|
DemoDetailViewPage({Key? key, required this.demoId}) : super(key: key);
|
|
|
|
@override
|
|
_DemoDetailViewPageState createState() {
|
|
return _DemoDetailViewPageState();
|
|
}
|
|
}
|
|
|
|
class _DemoDetailViewPageState extends State<DemoDetailViewPage> {
|
|
bool isLoading = false;
|
|
|
|
DemoRequestModel? dataModel;
|
|
DemoProvider? demoProvider;
|
|
List<WorkOrderAttachments> allAttachments = [];
|
|
|
|
//Todo need to check about attachments.
|
|
|
|
bool loading = false;
|
|
|
|
@override
|
|
void initState() {
|
|
demoProvider = Provider.of<DemoProvider>(context, listen: false);
|
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
getDetailsById();
|
|
});
|
|
super.initState();
|
|
}
|
|
|
|
Future<void> getDetailsById() async {
|
|
setState(() {
|
|
loading = true;
|
|
});
|
|
// dataModel = await demoProvider?.getDemoById(widget.demoId) ?? DemoRequestModel();
|
|
dataModel = await demoProvider?.getDemoById(11) ?? DemoRequestModel();
|
|
// _attachments = dataModel.demoAttachments.toList() ?? [];
|
|
setState(() {
|
|
loading = false;
|
|
});
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
super.dispose();
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
appBar: const DefaultAppBar(title: "Request Details"),
|
|
body: loading
|
|
? const CircularProgressIndicator(color: AppColor.primary10).center
|
|
: dataModel == null
|
|
? const NoDataFound().center
|
|
: Column(
|
|
children: [
|
|
SingleChildScrollView(
|
|
padding: const EdgeInsets.all(16),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
if (dataModel?.status != null) ...[
|
|
StatusLabel(
|
|
label: dataModel?.status?.name,
|
|
id: dataModel?.status?.value,
|
|
radius: 4,
|
|
textColor: AppColor.demoRequestStatusTextColor(context, dataModel!.status!.value!),
|
|
backgroundColor: AppColor.demoRequestStatus(context, dataModel!.status!.value!),
|
|
),
|
|
8.height,
|
|
],
|
|
...requesterDetails(context, dataModel),
|
|
12.height,
|
|
...requestDetails(context, dataModel),
|
|
12.height,
|
|
...doctorDetails(context, dataModel),
|
|
12.height,
|
|
...assetDetails(context, dataModel),
|
|
12.height,
|
|
...vendorDetails(context, dataModel),
|
|
if (allAttachments.isNotEmpty) ...[
|
|
const Divider().defaultStyle(context),
|
|
Text(
|
|
"Attachments".addTranslation,
|
|
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
|
|
),
|
|
FilesList(images: allAttachments.map((e) => URLs.getFileUrl(e.name ?? '') ?? '').toList() ?? []),
|
|
],
|
|
],
|
|
).toShadowContainer(context, padding: 12),
|
|
).expanded,
|
|
FooterActionButton.demoRequestDetailsFooterWidget(
|
|
demoRequestStage: dataModel!.status!.demoRequestStepEnum!,
|
|
dataModel: dataModel!,
|
|
status: dataModel!.status!,
|
|
context: context,
|
|
refreshData: (status) {
|
|
if (status) {
|
|
getDetailsById();
|
|
}
|
|
}).toShadowContainer(context, padding: 0, showShadow: false, borderRadius: 0),
|
|
],
|
|
));
|
|
}
|
|
|
|
List<Widget> requestDetails(BuildContext context, DemoRequestModel? model) {
|
|
return [
|
|
Text("Request Details", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
|
|
// 'Demo No: ${model. ?? "-"}'.bodyText(context),
|
|
'Demo Period: ${model?.demoPeriod?.name ?? "-"}'.bodyText(context),
|
|
'${context.translation.site}: ${model?.site?.custName ?? "-"}'.bodyText(context),
|
|
'${context.translation.department}: ${model?.department?.name ?? "-"}'.bodyText(context),
|
|
'Item Description: ${model?.itemDescription ?? "-"}'.bodyText(context),
|
|
'Request Description: ${model?.requestDescription ?? "-"}'.bodyText(context),
|
|
];
|
|
}
|
|
|
|
List<Widget> vendorDetails(BuildContext context, DemoRequestModel? model) {
|
|
return [
|
|
Text("Vendor Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
|
|
'Name: ${model?.supplier?.name ?? "-"}'.bodyText(context),
|
|
'Representative Name: ${model?.suppPerson?.name ?? "-"}'.bodyText(context),
|
|
'Contact: ${model?.supplier?.contact ?? "-"}'.bodyText(context),
|
|
'Email: ${model?.supplier?.email ?? "-"}'.bodyText(context),
|
|
];
|
|
}
|
|
|
|
List<Widget> assetDetails(BuildContext context, DemoRequestModel? model) {
|
|
return [
|
|
Text("Asset Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
|
|
'${context.translation.assetName}: ${model?.assetName ?? "-"}'.bodyText(context),
|
|
'${context.translation.manufacture}: ${model?.manufacturer ?? "-"}'.bodyText(context),
|
|
'${context.translation.model}: ${model?.model ?? "-"}'.bodyText(context),
|
|
];
|
|
}
|
|
|
|
List<Widget> doctorDetails(BuildContext context, DemoRequestModel? model) {
|
|
return [
|
|
Text("Doctor Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
|
|
'Name: ${model?.doctorName ?? "-"}'.bodyText(context),
|
|
'Contact: ${model?.doctorContactNumber ?? "-"}'.bodyText(context),
|
|
'Email: ${model?.doctorContactEmail ?? "-"}'.bodyText(context),
|
|
];
|
|
}
|
|
|
|
List<Widget> requesterDetails(BuildContext context, DemoRequestModel? model) {
|
|
return [
|
|
Text("Requester Information", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50)),
|
|
'Name: ${model?.requesterUser?.requesterName ?? "-"}'.bodyText(context),
|
|
'Email: ${model?.requesterUser?.requesterEmail ?? "-"}'.bodyText(context),
|
|
'Contact: ${model?.requesterUser?.requesterMobile ?? "-"}'.bodyText(context),
|
|
// 'Extension: ${loanData.requesterExtensionNo ?? "-"}'.bodyText(context),
|
|
];
|
|
}
|
|
|
|
void _update() {}
|
|
}
|