My code is here, but it doesn’t work:
use iced::{
Alignment::Center,
Event, Subscription, Task, event,
keyboard::{self, Key, key::Named},
widget::{Column, button, column, text},
window::{self, Settings},
};
#[derive(Default, Clone)]
pub struct Counter {
val: i32,
}
#[derive(Debug, Clone, Copy)]
pub enum Message {
Increment,
Decrement,
OpenWindow,
Opened(window::Id),
Nothing,
}
impl Counter {
pub fn update(&mut self, message: Message) -> Task<Message> {
match message {
Message::Increment => {
self.val += 1;
Task::none()
}
Message::Decrement => {
self.val -= 1;
Task::none()
}
Message::OpenWindow => {
let (_id, open) = window::open(Settings::default());
open.map(Message::Opened)
}
_ => Task::none(),
}
}
pub fn view(&self, _window_id: window::Id) -> Column<Message> {
let increment_button = button("increment").on_press(Message::Increment);
let value = text(self.val).size(50);
let decrement_button = button("decrement").on_press(Message::Decrement);
column![increment_button, value, decrement_button].align_x(Center)
}
pub fn subscription(&self) -> Subscription<Message> {
event::listen().map(|event| match event {
Event::Keyboard(keyboard::Event::KeyReleased {
key: Key::Named(Named::F8),
..
}) => Message::OpenWindow,
_ => Message::Nothing,
})
}
}
the main function:
use anyhow::Result;
fn main() -> Result<()> {
iced::daemon("a test", Counter::update, Counter::view)
.subscription(Counter::subscription)
.run()?;
Ok(())
}