addItem method
void
addItem(
- ItemType newItem
Implementation
void addItem(ItemType newItem) {
if (_pagingState is PagingStateData<PageKeyType, ItemType>) {
final value = _pagingState as PagingStateData<PageKeyType, ItemType>;
if (widget.reverse && _scrollController.hasClients) {
_previousScrollOffset = _scrollController.position.pixels;
final beforeExtent = _scrollController.position.maxScrollExtent;
// Thêm item mới vào đầu danh sách
var items = [newItem, ...value.items];
emit(PagingStateData(items, value.status, value.hasRequestNextPage));
SchedulerBinding.instance.addPostFrameCallback((_) {
if (_scrollController.hasClients) {
final afterExtent = _scrollController.position.maxScrollExtent;
final itemSize = afterExtent - beforeExtent;
if (itemSize > 0) {
// Điều chỉnh vị trí cuộn dựa trên kích thước thực của viewport
final adjustedOffset = _previousScrollOffset + itemSize;
_scrollController.jumpTo(adjustedOffset);
}
}
});
} else {
var items = [newItem, ...value.items];
emit(PagingStateData(items, value.status, value.hasRequestNextPage));
}
}
}