Lorenzo Medici
Lorenzo Medici

Reputation: 1

Not working in infinite_scroll_pagination With cubit

HomeScreenTry

import 'package:final_project/post.dart';
import 'package:final_project/src/cubit/cubit/post_cubit.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';

class HomeScreenTry extends StatelessWidget {
  const HomeScreenTry({Key? key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Posts'),
        centerTitle: true,
      ),
      body: Container(
        margin: const EdgeInsets.all(16),
        child: BlocBuilder<PostCubit, PostState>(
          builder: (context, state) {
            if (state is PostInitial) {
              BlocProvider.of<PostCubit>(context).pagingController;
              return const Center(child: Text('Nothing to display'));
            } else if (state is PostLoaded) {
              return PagedListView<int, Post>(
                pagingController: state.pagingController,
                builderDelegate: PagedChildBuilderDelegate<Post>(
                  itemBuilder: (context, post, index) {
                    return ListTile(
                      title: Text(post.title ?? ''),
                      leading: Text(post.id?.toString() ?? ''),
                      subtitle: Text(post.body ?? ''),
                    );
                  },
                ),
              );
            } else if (state is PostError) {
              return Center(
                child: Text('Error: ${state.error}'),
              );
            } else {
              return const Center(
                child: CircularProgressIndicator(),
              );
            }
          },
        ),
      ),
    );
  }
}

PostState

part of 'post_cubit.dart';

@immutable
sealed class PostState extends Equatable {
  const PostState();
  @override
  List<Object> get props => [];
}

final class PostInitial extends PostState {}

class PostLoaded extends PostState {
  final PagingController<int,Post> pagingController;

  const PostLoaded(this.pagingController);
  @override
  List<Object> get props => [pagingController];
}

class PostError extends PostState {
  final String error;

  const PostError(this.error);

  @override
  List<Object> get props => [error];
}

PostCubit

import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:final_project/post.dart';
import 'package:final_project/src/data/api_services.dart';
import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart';
import 'package:meta/meta.dart';


part 'post_state.dart';

class PostCubit extends Cubit<PostState> {
  final PagingController<int, Post> pagingController =
      PagingController(firstPageKey: 1);
  final ApiServicesTry api;
  static const pageSize = 10;
  PostCubit(this.api) : super(PostInitial()) {
    pagingController.addPageRequestListener((pageKey) {
      fetchPosts(pageKey, pageSize);
    });
  }
  Future<void> fetchPosts(int pageSize, int pageKey) async { 
    try {
      final posts = await api.getPosts(pageSize, pageKey);
      if (posts.isEmpty) {
        pagingController.appendLastPage([]);
      } else {
        final isLast = pageSize > posts.length;
        if (isLast) {
          pagingController.appendLastPage(posts);
        } else {
          final nextPageKey = pageKey + 1;
          pagingController.appendPage(posts, nextPageKey);
        }
      }
      emit(PostLoaded(pagingController));
    } on Exception catch (e) {
      emit(PostError(e.toString()));
    }
  }

  PagingController<int, Post> getPagingController() {
    return pagingController;
  }

  @override
  Future<void> close() {
    pagingController.dispose();
    return super.close();
  }
}

every time I run app I get text Nothing to display, that I put it on where state is PostInitial then not displaying anything, why that's happened and how can I fix it?

Upvotes: 0

Views: 126

Answers (0)

Related Questions