🚀 Getting Started
- A Flutter application showcasing pagination implementation using the
flutter_bloc
library. This project demonstrates how to efficiently load and display data in chunks, providing a smooth user experience with minimal resource consumption.
🪄 Features
- Pagination with Cubit: Utilize the power of flutter_bloc for efficient state management in paginated scenarios.
- Efficient Data Loading: Load data in chunks to minimize the impact on performance.
- Loading States: Handle loading states to keep users informed during data fetching.
- Error Handling: Gracefully handle errors during data retrieval.
⚙️ Customization
- Customize the appearance and behavior of the clipboard according to your requirements:
1- PaginationCubit:
class PostsCubit extends Cubit<PostsState> { final PostsRepo postsRepo; PostsCubit(this.postsRepo) : super(PostsInitial()); // MARK: - Variables. int page = 1; List<Post> posts = []; // MARK: - Load With Pagination Method. Future<void> loadPosts() async { // MARK: - Variables. final currentState = state; bool isRefresh = false; var oldPosts = <Post>[]; // MARK: - States. if (state is PostsLoading) return; if (currentState is PostsLoaded) { oldPosts = currentState.posts; } else if (currentState is PostsLoading) { oldPosts = currentState.oldPosts; isRefresh = currentState.isRefresh; } emit(PostsLoading(oldPosts: oldPosts, isRefresh: page == 1 ? false : isRefresh)); postsRepo.fetchPosts(page).then((newPosts) { page++; posts.addAll(newPosts); emit(PostsLoaded(posts: posts)); }).catchError((e) { // ignore: deprecated_member_use if (e is DioError) { debugPrint(e.response?.data); } }); } }
2- PaginationState:
@immutable sealed class PostsState {} final class PostsInitial extends PostsState {} final class PostsLoading extends PostsState { final List<Post> oldPosts; final bool isRefresh; PostsLoading({required this.oldPosts, this.isRefresh = false}); } final class PostsLoaded extends PostsState { final List<Post> posts; PostsLoaded({required this.posts}); }
📱 UI
a.mp4
🛠 Dependencies
flutter_bloc: ^8.1.3
🫴 Contributing
- Contributions are welcome 💜
- If you find any issues or have suggestions for improvements, feel free to open an issue or submit a pull request.
💳 License
- This package is distributed under the MIT License. Feel free to use and modify it according to your project requirements.
🤝 Contact With Me
💖 Support
- If you find this tutorial useful or learned something from this code, consider show some ❤️ by starring this repo.