Added pagination to recommand in home

This commit is contained in:
llsajjad
2025-08-18 15:30:22 +03:30
parent d9d5502e79
commit 95e7b516b3
6 changed files with 127 additions and 37 deletions
+26 -9
View File
@@ -5,7 +5,6 @@ import 'package:tm_app/core/routes/app_routes.dart';
import 'package:tm_app/core/theme/colors.dart';
import 'package:tm_app/core/utils/size_config.dart';
import 'package:tm_app/data/services/model/home/home_response/home_response_model.dart';
import 'package:tm_app/data/services/model/recommended_tenders_response/recommended_tenders_response.dart';
import 'package:tm_app/view_models/home_view_model.dart';
import 'package:tm_app/views/home/widgets/notification_card.dart';
@@ -42,7 +41,7 @@ class DesktopHomePage extends StatelessWidget {
SizedBox(height: 32.0.h()),
_yourTenderText(),
SizedBox(height: 8.0.h()),
_bottomListView(homeViewModel.recommendedTendersResponse!),
_bottomListView(homeViewModel),
],
),
);
@@ -162,20 +161,38 @@ class DesktopHomePage extends StatelessWidget {
);
}
Widget _bottomListView(
RecommendedTendersResponse recommendedTendersResponse,
) {
Widget _bottomListView(HomeViewModel homeViewModel) {
final controller = ScrollController();
controller.addListener(() {
if (controller.position.pixels >=
controller.position.maxScrollExtent - 200) {
if (!homeViewModel.isLoadingMore && homeViewModel.hasMore) {
homeViewModel.getHomeRecommandTenders();
}
}
});
return SizedBox(
width: 740,
height: 387.0,
child: ListView.builder(
controller: controller,
padding: EdgeInsets.only(bottom: 20),
itemCount: recommendedTendersResponse.data!.tenders.length,
itemCount:
homeViewModel.tenders.length +
(homeViewModel.isLoadingMore ? 1 : 0),
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) {
return TendersListItem(
tender: recommendedTendersResponse.data!.tenders[index]!,
);
if (index < homeViewModel.tenders.length) {
return TendersListItem(tender: homeViewModel.tenders[index]);
} else {
return Center(
child: Padding(
padding: EdgeInsets.all(16.0),
child: CircularProgressIndicator(color: AppColors.secondary50),
),
);
}
},
),
);