use eframe::{egui, NativeOptions};
use egui::{CentralPanel, Frame, Margin, ScrollArea};
use egui_virtual_list::VirtualList;
use rand::prelude::StdRng;
use rand::{RngExt, SeedableRng};
pub fn main() -> eframe::Result<()> {
let items: Vec<_> = (0..100_000).collect();
let mut virtual_list = VirtualList::new();
eframe::run_ui_native(
"Virtual List Simple Example",
NativeOptions::default(),
move |ui, _frame| {
CentralPanel::default().show(ui, |ui| {
ScrollArea::vertical().show(ui, |ui| {
ui.set_width(ui.available_width());
virtual_list.ui_custom_layout(ui, items.len(), |ui, start_index| {
let item = &items[start_index];
let mut rng = StdRng::seed_from_u64(*item as u64);
let height = rng.random_range(0..=100);
Frame::canvas(ui.style())
.inner_margin(Margin::symmetric(16, 8 + height / 2))
.show(ui, |ui| {
ui.set_width(ui.available_width());
ui.label(format!("Item {item}"));
});
1
});
});
});
},
)
}