Reputation: 1
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