add pagination
This commit is contained in:
parent
52580c6568
commit
510e366216
@ -42,17 +42,62 @@ class ListItemOrganizers extends StatefulWidget {
|
|||||||
|
|
||||||
// homepage state
|
// homepage state
|
||||||
class _MyHomePageState extends State<ListItemOrganizers> {
|
class _MyHomePageState extends State<ListItemOrganizers> {
|
||||||
|
int _fetchCount = 0;
|
||||||
|
bool _isLoading = false;
|
||||||
|
late ScrollController _scrollController;
|
||||||
|
|
||||||
final AuthService _authService = AuthService();
|
final AuthService _authService = AuthService();
|
||||||
|
|
||||||
|
void _incrementFetchCount() {
|
||||||
|
setState(() {
|
||||||
|
_fetchCount++;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _decrementFetchCount() {
|
||||||
|
setState(() {
|
||||||
|
if (_fetchCount > 0) {
|
||||||
|
_fetchCount--;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _scrollListener() {
|
||||||
|
if (_scrollController.position.pixels ==
|
||||||
|
_scrollController.position.maxScrollExtent) {
|
||||||
|
_incrementFetchCount();
|
||||||
|
} else if (_scrollController.position.pixels ==
|
||||||
|
_scrollController.position.minScrollExtent) {
|
||||||
|
_decrementFetchCount();
|
||||||
|
}
|
||||||
|
_fetchData();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _fetchData() async {
|
||||||
|
print("Counter : ${_fetchCount}");
|
||||||
|
if (_isLoading) return;
|
||||||
|
setState(() {
|
||||||
|
_isLoading = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
await Future.delayed(Duration(seconds: 2));
|
||||||
|
getPosts(widget.organizer, count: _fetchCount);
|
||||||
|
|
||||||
|
setState(() {
|
||||||
|
_isLoading = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// variable to call and store future list of posts
|
// variable to call and store future list of posts
|
||||||
|
|
||||||
// function to fetch data from api and return future list of posts
|
// function to fetch data from api and return future list of posts
|
||||||
static Future<List<Events>> getPosts(organizer) async {
|
static Future<List<Events>> getPosts(organizer, {count = 0}) async {
|
||||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
var accessToken = prefs.getString("access_token") ?? "";
|
var accessToken = prefs.getString("access_token") ?? "";
|
||||||
final List<Events> body = [];
|
final List<Events> body = [];
|
||||||
if (accessToken.isNotEmpty) {
|
if (accessToken.isNotEmpty) {
|
||||||
var url = Uri.parse("${globals.api}/events?organizers=${organizer}");
|
var url = Uri.parse(
|
||||||
|
"${globals.api}/events?organizers=${organizer}&skip=${count}");
|
||||||
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: "access_token=${accessToken}"
|
||||||
@ -67,6 +112,14 @@ class _MyHomePageState extends State<ListItemOrganizers> {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_authService.checkTokenStatus(context);
|
_authService.checkTokenStatus(context);
|
||||||
|
_scrollController = ScrollController();
|
||||||
|
_scrollController.addListener(_scrollListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_scrollController.dispose();
|
||||||
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
// build function
|
// build function
|
||||||
@ -109,7 +162,10 @@ class _MyHomePageState extends State<ListItemOrganizers> {
|
|||||||
foregroundColor: Colors.white,
|
foregroundColor: Colors.white,
|
||||||
),
|
),
|
||||||
body: ListView.separated(
|
body: ListView.separated(
|
||||||
itemCount: posts.length,
|
controller: _scrollController,
|
||||||
|
itemCount: posts.isNotEmpty
|
||||||
|
? posts.length + (_isLoading ? 1 : 0) // Add 1 only if loading
|
||||||
|
: 0,
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
final post = posts[index];
|
final post = posts[index];
|
||||||
final startDate = DateTime.parse(post.startDate!);
|
final startDate = DateTime.parse(post.startDate!);
|
||||||
|
@ -44,15 +44,59 @@ class ListItemTags extends StatefulWidget {
|
|||||||
class _MyHomePageState extends State<ListItemTags> {
|
class _MyHomePageState extends State<ListItemTags> {
|
||||||
// variable to call and store future list of posts
|
// variable to call and store future list of posts
|
||||||
|
|
||||||
|
int _fetchCount = 0;
|
||||||
|
bool _isLoading = false;
|
||||||
|
late ScrollController _scrollController;
|
||||||
|
|
||||||
final AuthService _authService = AuthService();
|
final AuthService _authService = AuthService();
|
||||||
|
|
||||||
|
void _incrementFetchCount() {
|
||||||
|
setState(() {
|
||||||
|
_fetchCount++;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _decrementFetchCount() {
|
||||||
|
setState(() {
|
||||||
|
if (_fetchCount > 0) {
|
||||||
|
_fetchCount--;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _scrollListener() {
|
||||||
|
if (_scrollController.position.pixels ==
|
||||||
|
_scrollController.position.maxScrollExtent) {
|
||||||
|
_incrementFetchCount();
|
||||||
|
} else if (_scrollController.position.pixels ==
|
||||||
|
_scrollController.position.minScrollExtent) {
|
||||||
|
_decrementFetchCount();
|
||||||
|
}
|
||||||
|
_fetchData();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> _fetchData() async {
|
||||||
|
print("Counter : ${_fetchCount}");
|
||||||
|
if (_isLoading) return;
|
||||||
|
setState(() {
|
||||||
|
_isLoading = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
await Future.delayed(Duration(seconds: 2));
|
||||||
|
getPosts(widget.tags, count: _fetchCount);
|
||||||
|
|
||||||
|
setState(() {
|
||||||
|
_isLoading = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// function to fetch data from api and return future list of posts
|
// function to fetch data from api and return future list of posts
|
||||||
static Future<List<Events>> getPosts(tags) async {
|
static Future<List<Events>> getPosts(tags, {count = 0}) async {
|
||||||
SharedPreferences prefs = await SharedPreferences.getInstance();
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
var accessToken = prefs.getString("access_token") ?? "";
|
var accessToken = prefs.getString("access_token") ?? "";
|
||||||
final List<Events> body = [];
|
final List<Events> body = [];
|
||||||
if (accessToken.isNotEmpty) {
|
if (accessToken.isNotEmpty) {
|
||||||
var url = Uri.parse("${globals.api}/events?tags=${tags}");
|
var url = Uri.parse("${globals.api}/events?tags=${tags}&skip=${count}");
|
||||||
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: "access_token=${accessToken}"
|
||||||
@ -67,6 +111,15 @@ class _MyHomePageState extends State<ListItemTags> {
|
|||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_authService.checkTokenStatus(context);
|
_authService.checkTokenStatus(context);
|
||||||
|
_authService.checkTokenStatus(context);
|
||||||
|
_scrollController = ScrollController();
|
||||||
|
_scrollController.addListener(_scrollListener);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
_scrollController.dispose();
|
||||||
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
// build function
|
// build function
|
||||||
@ -108,7 +161,10 @@ class _MyHomePageState extends State<ListItemTags> {
|
|||||||
foregroundColor: Colors.white,
|
foregroundColor: Colors.white,
|
||||||
),
|
),
|
||||||
body: ListView.separated(
|
body: ListView.separated(
|
||||||
itemCount: posts.length,
|
controller: _scrollController,
|
||||||
|
itemCount: posts.isNotEmpty
|
||||||
|
? posts.length + (_isLoading ? 1 : 0) // Add 1 only if loading
|
||||||
|
: 0,
|
||||||
itemBuilder: (context, index) {
|
itemBuilder: (context, index) {
|
||||||
final post = posts[index];
|
final post = posts[index];
|
||||||
final startDate = DateTime.parse(post.startDate!);
|
final startDate = DateTime.parse(post.startDate!);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user