From 600bf8d2f4bda68a43cb6a9a2a0c3906443c6516 Mon Sep 17 00:00:00 2001 From: Valentin CZERYBA Date: Fri, 30 May 2025 23:39:50 +0200 Subject: [PATCH] add pagination with limit --- covas_mobile/lib/pages/ListItemMenu.dart | 32 ++++++++---------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/covas_mobile/lib/pages/ListItemMenu.dart b/covas_mobile/lib/pages/ListItemMenu.dart index ce5e366..4614044 100644 --- a/covas_mobile/lib/pages/ListItemMenu.dart +++ b/covas_mobile/lib/pages/ListItemMenu.dart @@ -51,7 +51,6 @@ class _MyHomePageState extends State { late ScrollController _scrollController; int _fetchCount = 0; bool _isLoading = false; - bool _lastData = false; Future> postsFuture = getPosts(); List filteredPosts = []; @@ -149,12 +148,10 @@ class _MyHomePageState extends State { } void _incrementFetchCount() { - if (!_lastData) { - setState(() { - _fetchCount++; - }); - _fetchData(); - } + setState(() { + _fetchCount++; + }); + _fetchData(); } void _scrollListener() { @@ -392,9 +389,10 @@ class _MyHomePageState extends State { } else { queryParameters = dateParameter; } + int limit = 20 * (_fetchCount + 1); return Uri.parse( - "${globals.api}/$endpoint?$queryParameters&skip=${_fetchCount}"); + "${globals.api}/$endpoint?$queryParameters&limit=${limit}"); } Future searchSuggestionsByItem(String input) async { @@ -405,7 +403,7 @@ class _MyHomePageState extends State { var url = await getUrlForEvents(); final response = await http.get(url, headers: { "Content-Type": "application/json", - HttpHeaders.cookieHeader: "access_token=$accessToken" + HttpHeaders.cookieHeader: "acce0ss_token=$accessToken" }); if (response.statusCode == 200) { @@ -472,14 +470,14 @@ class _MyHomePageState extends State { print("fetch count : ${_fetchCount}"); // Update state after getting the response if (body.isEmpty) { - _lastData = true; + _fetchCount--; } setState(() { if (body.isNotEmpty) { // If we have results, map them to Events - filteredPosts.addAll(body + filteredPosts = body .map((e) => Events.fromJson(e as Map)) - .toList()); + .toList(); } }); } else { @@ -619,7 +617,6 @@ class _MyHomePageState extends State { labelText: 'Search by item', onChanged: (value) { _fetchCount = 0; - _lastData = false; if (value.isNotEmpty) { setState(() { itemName = value; @@ -638,7 +635,6 @@ class _MyHomePageState extends State { }, onClear: () { _fetchCount = 0; - _lastData = false; setState(() { inputItem.clear(); itemName = ''; @@ -651,7 +647,6 @@ class _MyHomePageState extends State { suggestions: suggestionsItem, onSuggestionTap: (suggestion) async { _fetchCount = 0; - _lastData = false; setState(() { itemName = suggestion['name']; inputItem.text = itemName; @@ -668,7 +663,6 @@ class _MyHomePageState extends State { labelText: 'Search by tags', onChanged: (value) { _fetchCount = 0; - _lastData = false; if (value.isNotEmpty) { setState(() { itemTags = value; @@ -687,7 +681,6 @@ class _MyHomePageState extends State { }, onClear: () { _fetchCount = 0; - _lastData = false; setState(() { inputTags.clear(); }); @@ -696,7 +689,6 @@ class _MyHomePageState extends State { suggestions: suggestionsTags, onSuggestionTap: (suggestion) async { _fetchCount = 0; - _lastData = false; setState(() { itemTags = suggestion['name']; @@ -722,7 +714,6 @@ class _MyHomePageState extends State { labelText: 'Search by geographical zone', onChanged: (value) async { _fetchCount = 0; - _lastData = false; if (value.isNotEmpty) { setState(() { @@ -746,7 +737,6 @@ class _MyHomePageState extends State { }, onClear: () async { _fetchCount = 0; - _lastData = false; final prefs = await SharedPreferences.getInstance(); prefs.remove("city_lat"); prefs.remove("city_long"); @@ -763,8 +753,6 @@ class _MyHomePageState extends State { suggestions: suggestionsGeo, onSuggestionTap: (suggestion) async { _fetchCount = 0; - _lastData = false; - final latitude = suggestion['geometry']['coordinates'][1]; final longitude = suggestion['geometry']['coordinates'][0]; setState(() {