| Crates.io | egui_suspense |
| lib.rs | egui_suspense |
| version | 0.9.0 |
| created_at | 2023-11-01 18:32:21.412771+00 |
| updated_at | 2025-07-11 18:04:43.240627+00 |
| description | Automatically show loading and error uis for egui |
| homepage | |
| repository | https://github.com/lucasmerlin/hello_egui/tree/main/crates/egui_suspense |
| max_upload_size | |
| id | 1021503 |
| size | 136,956 |
A helper to display loading, error and retry uis when waiting for asynchronous data.
use eframe::egui;
use egui::CentralPanel;
use egui_suspense::EguiSuspense;
pub fn main() -> eframe::Result<()> {
let mut suspense = EguiSuspense::reloadable(|cb| {
std::thread::spawn(move || {
std::thread::sleep(std::time::Duration::from_secs(1));
cb(if rand::random() {
Ok("Hello".to_string())
} else {
Err("OOPSIE WOOPSIE!".to_string())
});
});
});
eframe::run_simple_native(
"DnD Simple Example",
Default::default(),
move |ctx, _frame| {
CentralPanel::default().show(ctx, |ui| {
// This will show a spinner while loading and an error message with a
// retry button if the callback returns an error.
suspense.ui(ui, |ui, data, state| {
ui.label(format!("Data: {:?}", data));
if ui.button("Reload").clicked() {
state.reload();
}
});
});
},
)
}