add pagination with limit

This commit is contained in:
Valentin CZERYBA 2025-05-30 23:39:50 +02:00
parent ec7a286074
commit 600bf8d2f4

View File

@ -51,7 +51,6 @@ class _MyHomePageState extends State<ListItemMenu> {
late ScrollController _scrollController; late ScrollController _scrollController;
int _fetchCount = 0; int _fetchCount = 0;
bool _isLoading = false; bool _isLoading = false;
bool _lastData = false;
Future<List<Events>> postsFuture = getPosts(); Future<List<Events>> postsFuture = getPosts();
List<Events> filteredPosts = []; List<Events> filteredPosts = [];
@ -149,12 +148,10 @@ class _MyHomePageState extends State<ListItemMenu> {
} }
void _incrementFetchCount() { void _incrementFetchCount() {
if (!_lastData) { setState(() {
setState(() { _fetchCount++;
_fetchCount++; });
}); _fetchData();
_fetchData();
}
} }
void _scrollListener() { void _scrollListener() {
@ -392,9 +389,10 @@ class _MyHomePageState extends State<ListItemMenu> {
} else { } else {
queryParameters = dateParameter; queryParameters = dateParameter;
} }
int limit = 20 * (_fetchCount + 1);
return Uri.parse( return Uri.parse(
"${globals.api}/$endpoint?$queryParameters&skip=${_fetchCount}"); "${globals.api}/$endpoint?$queryParameters&limit=${limit}");
} }
Future<void> searchSuggestionsByItem(String input) async { Future<void> searchSuggestionsByItem(String input) async {
@ -405,7 +403,7 @@ class _MyHomePageState extends State<ListItemMenu> {
var url = await getUrlForEvents(); var url = await getUrlForEvents();
final response = await http.get(url, headers: { final response = await http.get(url, headers: {
"Content-Type": "application/json", "Content-Type": "application/json",
HttpHeaders.cookieHeader: "access_token=$accessToken" HttpHeaders.cookieHeader: "acce0ss_token=$accessToken"
}); });
if (response.statusCode == 200) { if (response.statusCode == 200) {
@ -472,14 +470,14 @@ class _MyHomePageState extends State<ListItemMenu> {
print("fetch count : ${_fetchCount}"); print("fetch count : ${_fetchCount}");
// Update state after getting the response // Update state after getting the response
if (body.isEmpty) { if (body.isEmpty) {
_lastData = true; _fetchCount--;
} }
setState(() { setState(() {
if (body.isNotEmpty) { if (body.isNotEmpty) {
// If we have results, map them to Events // If we have results, map them to Events
filteredPosts.addAll(body filteredPosts = body
.map((e) => Events.fromJson(e as Map<String, dynamic>)) .map((e) => Events.fromJson(e as Map<String, dynamic>))
.toList()); .toList();
} }
}); });
} else { } else {
@ -619,7 +617,6 @@ class _MyHomePageState extends State<ListItemMenu> {
labelText: 'Search by item', labelText: 'Search by item',
onChanged: (value) { onChanged: (value) {
_fetchCount = 0; _fetchCount = 0;
_lastData = false;
if (value.isNotEmpty) { if (value.isNotEmpty) {
setState(() { setState(() {
itemName = value; itemName = value;
@ -638,7 +635,6 @@ class _MyHomePageState extends State<ListItemMenu> {
}, },
onClear: () { onClear: () {
_fetchCount = 0; _fetchCount = 0;
_lastData = false;
setState(() { setState(() {
inputItem.clear(); inputItem.clear();
itemName = ''; itemName = '';
@ -651,7 +647,6 @@ class _MyHomePageState extends State<ListItemMenu> {
suggestions: suggestionsItem, suggestions: suggestionsItem,
onSuggestionTap: (suggestion) async { onSuggestionTap: (suggestion) async {
_fetchCount = 0; _fetchCount = 0;
_lastData = false;
setState(() { setState(() {
itemName = suggestion['name']; itemName = suggestion['name'];
inputItem.text = itemName; inputItem.text = itemName;
@ -668,7 +663,6 @@ class _MyHomePageState extends State<ListItemMenu> {
labelText: 'Search by tags', labelText: 'Search by tags',
onChanged: (value) { onChanged: (value) {
_fetchCount = 0; _fetchCount = 0;
_lastData = false;
if (value.isNotEmpty) { if (value.isNotEmpty) {
setState(() { setState(() {
itemTags = value; itemTags = value;
@ -687,7 +681,6 @@ class _MyHomePageState extends State<ListItemMenu> {
}, },
onClear: () { onClear: () {
_fetchCount = 0; _fetchCount = 0;
_lastData = false;
setState(() { setState(() {
inputTags.clear(); inputTags.clear();
}); });
@ -696,7 +689,6 @@ class _MyHomePageState extends State<ListItemMenu> {
suggestions: suggestionsTags, suggestions: suggestionsTags,
onSuggestionTap: (suggestion) async { onSuggestionTap: (suggestion) async {
_fetchCount = 0; _fetchCount = 0;
_lastData = false;
setState(() { setState(() {
itemTags = suggestion['name']; itemTags = suggestion['name'];
@ -722,7 +714,6 @@ class _MyHomePageState extends State<ListItemMenu> {
labelText: 'Search by geographical zone', labelText: 'Search by geographical zone',
onChanged: (value) async { onChanged: (value) async {
_fetchCount = 0; _fetchCount = 0;
_lastData = false;
if (value.isNotEmpty) { if (value.isNotEmpty) {
setState(() { setState(() {
@ -746,7 +737,6 @@ class _MyHomePageState extends State<ListItemMenu> {
}, },
onClear: () async { onClear: () async {
_fetchCount = 0; _fetchCount = 0;
_lastData = false;
final prefs = await SharedPreferences.getInstance(); final prefs = await SharedPreferences.getInstance();
prefs.remove("city_lat"); prefs.remove("city_lat");
prefs.remove("city_long"); prefs.remove("city_long");
@ -763,8 +753,6 @@ class _MyHomePageState extends State<ListItemMenu> {
suggestions: suggestionsGeo, suggestions: suggestionsGeo,
onSuggestionTap: (suggestion) async { onSuggestionTap: (suggestion) async {
_fetchCount = 0; _fetchCount = 0;
_lastData = false;
final latitude = suggestion['geometry']['coordinates'][1]; final latitude = suggestion['geometry']['coordinates'][1];
final longitude = suggestion['geometry']['coordinates'][0]; final longitude = suggestion['geometry']['coordinates'][0];
setState(() { setState(() {