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.
cloudsolutions-atoms/lib/modules/demo_module/demo_detail_view_page.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() {}
}