Explorar o código

Add example of working with streams

Jonathan Kelley hai 1 ano
pai
achega
6ed038e9e5
Modificáronse 1 ficheiros con 33 adicións e 0 borrados
  1. 33 0
      examples/streams.rs

+ 33 - 0
examples/streams.rs

@@ -0,0 +1,33 @@
+use dioxus::prelude::*;
+use dioxus_signals::use_signal;
+use futures_util::{future, stream, Stream, StreamExt};
+use std::time::Duration;
+
+fn main() {
+    dioxus_desktop::launch(app);
+}
+
+fn app(cx: Scope) -> Element {
+    let count = use_signal(cx, || 10);
+
+    use_future(cx, (), |_| async move {
+        let mut stream = some_stream();
+
+        while let Some(second) = stream.next().await {
+            count.set(second);
+        }
+    });
+
+    cx.render(rsx! {
+        h1 { "High-Five counter: {count}" }
+    })
+}
+
+fn some_stream() -> std::pin::Pin<Box<dyn Stream<Item = i32>>> {
+    Box::pin(
+        stream::once(future::ready(0)).chain(stream::iter(1..).then(|second| async move {
+            tokio::time::sleep(Duration::from_secs(1)).await;
+            second
+        })),
+    )
+}