summaryrefslogtreecommitdiffstats
path: root/examples/websocket/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/websocket/src/main.rs')
-rw-r--r--examples/websocket/src/main.rs48
1 files changed, 20 insertions, 28 deletions
diff --git a/examples/websocket/src/main.rs b/examples/websocket/src/main.rs
index 8422ce16..8b1efb41 100644
--- a/examples/websocket/src/main.rs
+++ b/examples/websocket/src/main.rs
@@ -1,20 +1,17 @@
mod echo;
-use iced::alignment::{self, Alignment};
use iced::widget::{
self, button, center, column, row, scrollable, text, text_input,
};
-use iced::{color, Element, Length, Subscription, Task};
+use iced::{color, Center, Element, Fill, Subscription, Task};
use once_cell::sync::Lazy;
pub fn main() -> iced::Result {
iced::application("WebSocket - Iced", WebSocket::update, WebSocket::view)
- .load(WebSocket::load)
.subscription(WebSocket::subscription)
- .run()
+ .run_with(WebSocket::new)
}
-#[derive(Default)]
struct WebSocket {
messages: Vec<echo::Message>,
new_message: String,
@@ -30,11 +27,18 @@ enum Message {
}
impl WebSocket {
- fn load() -> Task<Message> {
- Task::batch([
- Task::perform(echo::server::run(), |_| Message::Server),
- widget::focus_next(),
- ])
+ fn new() -> (Self, Task<Message>) {
+ (
+ Self {
+ messages: Vec::new(),
+ new_message: String::new(),
+ state: State::Disconnected,
+ },
+ Task::batch([
+ Task::perform(echo::server::run(), |_| Message::Server),
+ widget::focus_next(),
+ ]),
+ )
}
fn update(&mut self, message: Message) -> Task<Message> {
@@ -83,7 +87,7 @@ impl WebSocket {
}
fn subscription(&self) -> Subscription<Message> {
- echo::connect().map(Message::Echo)
+ Subscription::run(echo::connect).map(Message::Echo)
}
fn view(&self) -> Element<Message> {
@@ -99,7 +103,7 @@ impl WebSocket {
.spacing(10),
)
.id(MESSAGE_LOG.clone())
- .height(Length::Fill)
+ .height(Fill)
.into()
};
@@ -108,12 +112,8 @@ impl WebSocket {
.on_input(Message::NewMessageChanged)
.padding(10);
- let mut button = button(
- text("Send")
- .height(40)
- .vertical_alignment(alignment::Vertical::Center),
- )
- .padding([0, 20]);
+ let mut button = button(text("Send").height(40).align_y(Center))
+ .padding([0, 20]);
if matches!(self.state, State::Connected(_)) {
if let Some(message) = echo::Message::new(&self.new_message) {
@@ -122,13 +122,11 @@ impl WebSocket {
}
}
- row![input, button]
- .spacing(10)
- .align_items(Alignment::Center)
+ row![input, button].spacing(10).align_y(Center)
};
column![message_log, new_message_input]
- .height(Length::Fill)
+ .height(Fill)
.padding(20)
.spacing(10)
.into()
@@ -140,10 +138,4 @@ enum State {
Connected(echo::Connection),
}
-impl Default for State {
- fn default() -> Self {
- Self::Disconnected
- }
-}
-
static MESSAGE_LOG: Lazy<scrollable::Id> = Lazy::new(scrollable::Id::unique);