Skip to content

Instantly share code, notes, and snippets.

@dakizu

dakizu/main.rs Secret

Created February 22, 2021 23:30
Show Gist options
  • Save dakizu/514042eaedbe77b1cee7e7bd82757bc1 to your computer and use it in GitHub Desktop.
Save dakizu/514042eaedbe77b1cee7e7bd82757bc1 to your computer and use it in GitHub Desktop.
use iced::{Checkbox, Column, Container, Element, Length, Sandbox, Settings};
fn main() -> iced::Result {
Example::run(Settings::default())
}
#[derive(Debug)]
struct Item {
name: String,
checked: bool,
}
#[derive(Debug, Default)]
struct Example {
items: Vec<Item>,
}
#[derive(Debug, Clone)]
enum Message {
ItemToggled(usize, bool),
}
impl Sandbox for Example {
type Message = Message;
fn new() -> Self {
let items = vec![
Item {
name: "example".into(),
checked: false,
},
Item {
name: "another example".into(),
checked: false,
},
Item {
name: "last example".into(),
checked: false,
},
];
Self { items }
}
fn title(&self) -> String {
"Checked Example".into()
}
fn update(&mut self, message: Self::Message) {
match message {
Message::ItemToggled(index, selected) => {
let toggled_item = &mut self.items[index];
toggled_item.checked = selected;
println!("Item {} was toggled to {}", toggled_item.name, selected);
}
}
}
fn view(&mut self) -> Element<'_, Self::Message> {
let col = self
.items
.iter()
.enumerate()
.fold(Column::new().spacing(10), |column, (index, item)| {
column.push(Checkbox::new(
item.checked,
&item.name,
move |b| Message::ItemToggled(index, b),
))
});
Container::new(col)
.width(Length::Fill)
.height(Length::Fill)
.center_x()
.into()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment