import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/view_models/tender_detail_view_model.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_action.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_card.dart'; import 'package:tm_app/views/detail/widgets/tender_detail_header.dart'; import '../../shared/desktop_navigation_widget.dart'; import '../strings/tender_details_strings.dart'; class TenderDetailDesktopPage extends StatefulWidget { final String tenderId; const TenderDetailDesktopPage({required this.tenderId, super.key}); @override State createState() => _TenderDetailDesktopPageState(); } class _TenderDetailDesktopPageState extends State { late final TenderDetailViewModel viewModel; @override void initState() { viewModel = context.read(); viewModel.addListener(_viewModelListener); super.initState(); } void _viewModelListener() { if (viewModel.status.isNotEmpty && viewModel.status == 'submitted' && viewModel.approvalStatus == true) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(TenderDetailsStrings.tenderSubmittedSuccessfully), ), ); } if (viewModel.status.isNotEmpty && viewModel.status == 'unsubmitted' && viewModel.approvalStatus == true) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(TenderDetailsStrings.tenderUnsubmittedSuccessfully), ), ); } if (viewModel.status.isNotEmpty && viewModel.status == 'rejected' && viewModel.approvalStatus == true) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(TenderDetailsStrings.tenderRejectedSuccessfully), ), ); } if (viewModel.status.isNotEmpty && viewModel.status == 'unrejected' && viewModel.approvalStatus == true) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(TenderDetailsStrings.tenderUnrejectedSuccessfully), ), ); } if (viewModel.approvalStatus != false && viewModel.errorMessage != null) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( backgroundColor: AppColors.errorColor, content: Text(viewModel.errorMessage!), ), ); } } @override void dispose() { viewModel.removeListener(_viewModelListener); super.dispose(); } @override Widget build(BuildContext context) { return PopScope( onPopInvokedWithResult: (didPop, result) { WidgetsBinding.instance.addPostFrameCallback((_) { viewModel.updateTenderApprovals(widget.tenderId); }); }, child: Scaffold( backgroundColor: AppColors.backgroundColor, body: Consumer( builder: (context, tenderViewModel, child) { if (tenderViewModel.isLoading) { return const Center( child: CircularProgressIndicator(color: AppColors.secondary50), ); } if (tenderViewModel.errorMessage != null) { return Center(child: Text(tenderViewModel.errorMessage!)); } final detail = tenderViewModel.tenderDetail; if (detail == null) { return const Center( child: Text(TenderDetailsStrings.tenderNoData), ); } return Column( children: [ DesktopNavigationWidget( currentIndex: 1, // Home index ), Expanded( child: SingleChildScrollView( child: Center( child: SizedBox( width: 740, child: Padding( padding: const EdgeInsets.all(32.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ TenderDetailHeader( isScreenBig: true, detail: detail, ), SizedBox(height: 32.0.h()), TenderDetailCard(detail: detail), SizedBox(height: 24.0.h()), TenderDetailActions( isScreenBig: true, detail: detail, ), ], ), ), ), ), ), ), ], ); }, ), ), ); } }