From a4e7f30411f245b4265a36c17437f1f47096e440 Mon Sep 17 00:00:00 2001 From: hannathkadher Date: Mon, 13 Jan 2025 14:14:09 +0400 Subject: [PATCH] moved pagination to bloc --- .../bloc/space_management_bloc.dart | 16 +++++++-- .../views/assign_tag_models_dialog.dart | 4 +-- lib/services/space_model_mang_api.dart | 35 +++++++------------ 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/lib/pages/spaces_management/all_spaces/bloc/space_management_bloc.dart b/lib/pages/spaces_management/all_spaces/bloc/space_management_bloc.dart index 20f642fd..26e444ca 100644 --- a/lib/pages/spaces_management/all_spaces/bloc/space_management_bloc.dart +++ b/lib/pages/spaces_management/all_spaces/bloc/space_management_bloc.dart @@ -6,7 +6,6 @@ import 'package:syncrow_web/pages/spaces_management/all_spaces/model/space_model import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_event.dart'; import 'package:syncrow_web/pages/spaces_management/all_spaces/bloc/space_management_state.dart'; import 'package:syncrow_web/pages/spaces_management/all_spaces/model/tag.dart'; -import 'package:syncrow_web/pages/spaces_management/space_model/models/create_space_template_body_model.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/models/space_template_model.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/models/tag_body_model.dart'; import 'package:syncrow_web/services/product_api.dart'; @@ -77,6 +76,7 @@ class SpaceManagementBloc Future> fetchSpaceModels( SpaceManagementState previousState) async { try { + List allSpaces = []; List prevSpaceModels = []; if (previousState is SpaceManagementLoaded || @@ -87,10 +87,22 @@ class SpaceManagementBloc } if (prevSpaceModels.isEmpty) { + bool hasNext = true; + int page = 1; + + while (hasNext) { + final spaces = await _spaceModelApi.listSpaceModels(page: page); + if (spaces.isNotEmpty) { + allSpaces.addAll(spaces); + page++; + } else { + hasNext = false; + } + } prevSpaceModels = await _spaceModelApi.listSpaceModels(page: 1); } - return prevSpaceModels; + return allSpaces; } catch (e) { return []; } diff --git a/lib/pages/spaces_management/assign_tag_models/views/assign_tag_models_dialog.dart b/lib/pages/spaces_management/assign_tag_models/views/assign_tag_models_dialog.dart index f4f2276f..1b162832 100644 --- a/lib/pages/spaces_management/assign_tag_models/views/assign_tag_models_dialog.dart +++ b/lib/pages/spaces_management/assign_tag_models/views/assign_tag_models_dialog.dart @@ -16,7 +16,7 @@ import 'package:syncrow_web/utils/color_manager.dart'; class AssignTagModelsDialog extends StatelessWidget { final List? products; final List? subspaces; - final List? initialTags; + final List initialTags; final ValueChanged>? onTagsAssigned; final List addedProducts; final List? allTags; @@ -28,7 +28,7 @@ class AssignTagModelsDialog extends StatelessWidget { required this.products, required this.subspaces, required this.addedProducts, - this.initialTags, + required this.initialTags, this.onTagsAssigned, this.allTags, required this.spaceName, diff --git a/lib/services/space_model_mang_api.dart b/lib/services/space_model_mang_api.dart index b13d62ad..ee241189 100644 --- a/lib/services/space_model_mang_api.dart +++ b/lib/services/space_model_mang_api.dart @@ -1,4 +1,3 @@ -import 'package:flutter/material.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/models/create_space_template_body_model.dart'; import 'package:syncrow_web/pages/spaces_management/space_model/models/space_template_model.dart'; import 'package:syncrow_web/services/api/http_service.dart'; @@ -7,28 +6,18 @@ import 'package:syncrow_web/utils/constants/temp_const.dart'; class SpaceModelManagementApi { Future> listSpaceModels({int page = 1}) async { - List spaceModels = []; - bool hasNext = true; - while (hasNext) { - await HTTPService().get( - path: ApiEndpoints.listSpaceModels - .replaceAll('{projectId}', TempConst.projectId), - queryParameters: {'page': page}, - expectedResponseModel: (json) { - List jsonData = json['data']; - hasNext = json['hasNext'] ?? false; - int currentPage = json['page'] ?? 1; - List spaceModelList = jsonData.map((jsonItem) { - return SpaceTemplateModel.fromJson(jsonItem); - }).toList(); - - spaceModels.addAll(spaceModelList); - page = currentPage + 1; - return spaceModelList; - }, - ); - } - return spaceModels; + final response = await HTTPService().get( + path: ApiEndpoints.listSpaceModels + .replaceAll('{projectId}', TempConst.projectId), + queryParameters: {'page': page}, + expectedResponseModel: (json) { + List jsonData = json['data']; + return jsonData.map((jsonItem) { + return SpaceTemplateModel.fromJson(jsonItem); + }).toList(); + }, + ); + return response; } Future createSpaceModel(