From cd091b696ae5389aa3f771900e5ee04d0ab8fc2e Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Mon, 13 Mar 2023 16:12:26 +0300 Subject: [PATCH] worklist pagination added. --- lib/api/worklist/worklist_api_client.dart | 2 +- lib/ui/work_list/work_list_screen.dart | 27 +++++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/lib/api/worklist/worklist_api_client.dart b/lib/api/worklist/worklist_api_client.dart index 8765ddd..51e5c80 100644 --- a/lib/api/worklist/worklist_api_client.dart +++ b/lib/api/worklist/worklist_api_client.dart @@ -47,7 +47,7 @@ class WorkListApiClient { Map postParams = { "P_NOTIFICATION_TYPE": pNotificationType, "P_PAGE_NUM": pPageNum, - "P_PAGE_LIMIT": 50, + "P_PAGE_LIMIT": 20, "P_ITEM_TYPE": pItemType, "P_SEARCH_FROM_USER": pSearchUser, "P_SEARCH_ITEM_TYPE_DSP_NAME": pSearchItemType, diff --git a/lib/ui/work_list/work_list_screen.dart b/lib/ui/work_list/work_list_screen.dart index 485921d..9dea0a1 100644 --- a/lib/ui/work_list/work_list_screen.dart +++ b/lib/ui/work_list/work_list_screen.dart @@ -93,10 +93,12 @@ class _WorkListScreenState extends State { final ScrollController _controller = ScrollController(); int pNotificationType = 1; + ScrollController? _scrollController; @override void initState() { super.initState(); + _scrollController = ScrollController()..addListener(_scrollListener); providerData = Provider.of(context, listen: false); calculateCounter(); if (workListItemIndex != null) getWorkList(); @@ -154,7 +156,7 @@ class _WorkListScreenState extends State { ItgFormsModel? itgFormsModel; int? itgRequestTypeIndex; - Future getWorkList({bool showLoading = true}) async { + Future getWorkList({bool showLoading = true, bool isCallingFromRefresh = false}) async { try { if (showLoading) Utils.showLoading(context); if (workListItemTypes[workListItemIndex!].key == "ITG") { @@ -173,7 +175,12 @@ class _WorkListScreenState extends State { } } else { itgRequestTypeIndex = null; - workList = await WorkListApiClient().getWorkList(pageNumber, workListItemTypes[workListItemIndex!].key, pNotificationType.toString()); + List? _list = await WorkListApiClient().getWorkList(pageNumber, workListItemTypes[workListItemIndex!].key, pNotificationType.toString()); + if (workList != null && _list != null && !isCallingFromRefresh) { + workList!.addAll(_list); + } else { + workList = _list; + } AppState().setWorkList = workList; } if (showLoading) Utils.hideLoading(context); @@ -188,9 +195,10 @@ class _WorkListScreenState extends State { try { _refreshController.refreshCompleted(); Utils.showLoading(context); + pageNumber = 1; List dataOnRefresh = await Future.wait([ providerData.fetchWorkListCounter(context, showLoading: false), - getWorkList(showLoading: false), + getWorkList(showLoading: false, isCallingFromRefresh: true), ]); calculateCounter(); Utils.hideLoading(context); @@ -203,9 +211,19 @@ class _WorkListScreenState extends State { @override void dispose() { + _scrollController?.dispose(); super.dispose(); } + void _scrollListener() { + if (_scrollController!.position.pixels == _scrollController!.position.maxScrollExtent) { + pageNumber = pageNumber + 1; + if (itgRequestTypeIndex == null && workListItemTypes[workListItemIndex!].value != workList!.length) { + getWorkList(); + } + } + } + @override Widget build(BuildContext context) { return Scaffold( @@ -236,6 +254,7 @@ class _WorkListScreenState extends State { } if (workListItemIndex != index && !workListItemTypes[index].disable) { workListItemIndex = index; + pageNumber = 1; if (workListItemTypes[index].value == 0) { workList = []; itgRequestTypeIndex = null; @@ -273,6 +292,7 @@ class _WorkListScreenState extends State { ), controller: _refreshController, onRefresh: _onRefresh, + scrollController: _scrollController, child: SingleChildScrollView( physics: const BouncingScrollPhysics(), child: itgRequestTypeIndex != null @@ -354,7 +374,6 @@ class _WorkListScreenState extends State { setState(() {}); } } - } else { verifyWorkListCounter(); if (mounted) setState(() {});