#![feature(min_specialization)]
#![feature(type_alias_impl_trait)]
use frui::prelude::*;
mod misc;
use misc::{RandomState, Switch};
#[derive(ViewWidget)]
struct App;
impl WidgetState for App {
type State = Switch;
fn create_state(&self) -> Self::State {
Switch::default()
}
}
impl ViewWidget for App {
fn build<'w>(&'w self, ctx: BuildContext<'w, Self>) -> Self::Widget<'w> {
KeyboardEventDetector {
on_event: |_| ctx.state_mut().switch(),
child: if ctx.state().value() {
Center::child(Column::builder().children((
Text::new("First child 🦀"),
Text::new("Second child 🦀"),
RandomState, )))
.boxed()
} else {
Center::child(Column::builder().children((
Text::new("First child 🦀"),
(),
RandomState, )))
.boxed()
},
}
}
}
fn main() {
run_app(App);
}
#[cfg(all(test, feature = "miri"))]
mod test {
use super::*;
use frui::{
app::runner::miri::MiriAppRunner,
druid_shell::{keyboard_types::Key, Modifiers},
};
#[test]
pub fn run_app_under_miri() {
let mut runner = MiriAppRunner::new(App);
for _ in 0..4 {
runner.send_keyboard_event(KeyEvent::for_test(
Modifiers::default(),
Key::Character(" ".into()),
));
runner.update();
}
}
}