egui_infinite_scroll 0.12.0

Infinite scroll widget for egui
Documentation
use eframe::{egui, NativeOptions};
use egui::{CentralPanel, ScrollArea};
use egui_infinite_scroll::InfiniteScroll;
use std::time::Duration;

#[tokio::main]
pub async fn main() -> eframe::Result<()> {
    let mut infinite_scroll = InfiniteScroll::new().end_loader_async(|cursor| async move {
        let start = cursor.unwrap_or(0);
        let end = start + 100;
        tokio::time::sleep(Duration::from_secs_f32(0.5)).await;
        Ok(((start..end).collect(), Some(end)))
    });

    eframe::run_ui_native(
        "Infinite Scroll Simple Example",
        NativeOptions::default(),
        move |ui, _frame| {
            CentralPanel::default().show(ui, |ui| {
                ScrollArea::vertical().show(ui, |ui| {
                    ui.set_width(ui.available_width());
                    if ui.button("Reset").clicked() {
                        infinite_scroll.reset();
                    }

                    infinite_scroll.ui(ui, 10, |ui, _index, item| {
                        ui.label(format!("Item {item}"));
                    });

                    if infinite_scroll.bottom_loading_state().loading() {
                        ui.spinner();
                    }
                });
            });
        },
    )
}