import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tm_app/core/constants/assets.dart'; import 'package:tm_app/core/theme/colors.dart'; import 'package:tm_app/core/utils/size_config.dart'; import 'package:tm_app/view_models/your_tenders_view_model.dart'; import 'package:tm_app/views/your_tenders/widgets/tender_card.dart'; import '../../../data/services/model/tender_approvals_response/tender_approvals_response.dart'; class TendersSubmitted extends StatefulWidget { const TendersSubmitted({ required this.approvedTenders, required this.isDesktop, super.key, }); final TenderApprovalsResponse approvedTenders; final bool isDesktop; @override State createState() => _TendersSubmittedState(); } class _TendersSubmittedState extends State { late final ScrollController _scrollController; @override void initState() { super.initState(); _scrollController = ScrollController()..addListener(_onScroll); } void _onScroll() { if (!_scrollController.hasClients) { return; } final max = _scrollController.position.maxScrollExtent; final pos = _scrollController.position.pixels; const threshold = 200.0; if (max - pos <= threshold) { final vm = Provider.of(context, listen: false); vm.loadMoreTenders(); } } @override void dispose() { _scrollController.removeListener(_onScroll); _scrollController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Consumer( builder: (context, viewModel, child) { if (widget.approvedTenders.data == null) { return const Center(child: Text('No submitted projects yet.')); } final tenders = widget.approvedTenders.data!.tenders ?? []; if (tenders.isEmpty) { return const Center(child: Text('No submitted projects yet.')); } final itemCount = tenders.length + (viewModel.isLoadingMoreTenders ? 1 : 0); return ListView.builder( controller: _scrollController, padding: EdgeInsets.symmetric( // horizontal: 24.0.w(), vertical: 15.0.h(), ), itemCount: itemCount, itemBuilder: (context, index) { if (index < tenders.length) { final tender = tenders[index]; return TenderCard( date: tender.createdAt!.toString(), title: tender.tender!.title!, description: tender.tender!.description!, location: tender.tender!.countryCode!, countryFlag: AssetsManager.seFlag, status: tender.status, countryCode: tender.tender!.countryCode!, projectStatus: tender.tender!.status!, isDesktop: widget.isDesktop, backgroundColor: tender.status == 'Won' ? AppColors.green0 : tender.status == 'submitted' ? AppColors.grey0 : AppColors.red0.withValues(alpha: 0.2), borderColor: tender.status == 'Won' ? AppColors.green10 : tender.status == 'submitted' ? AppColors.grey30 : AppColors.red0, statusIcon: tender.status == 'Won' ? AssetsManager.tickCircle : tender.status == 'submitted' ? null : AssetsManager.closeCircle, statusCardColor: tender.status == 'Won' ? AppColors.green20 : tender.status == 'submitted' ? AppColors.green20 : AppColors.red0, statusTextColor: tender.status == 'Won' ? AppColors.green30 : tender.status == 'submitted' ? AppColors.green30 : AppColors.red10, ); } else { return Padding( padding: EdgeInsets.symmetric(vertical: 20.0.h()), child: Center( child: SizedBox( width: 24.0.w(), height: 24.0.h(), child: CircularProgressIndicator( color: AppColors.secondary50, strokeWidth: 2, ), ), ), ); } }, ); }, ); } }