file_upload.rs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. #![allow(non_snake_case)]
  2. use dioxus::prelude::*;
  3. use tokio::time::sleep;
  4. fn main() {
  5. dioxus_desktop::launch(App);
  6. }
  7. fn App(cx: Scope) -> Element {
  8. let files_uploaded: &UseRef<Vec<String>> = use_ref(cx, Vec::new);
  9. cx.render(rsx! {
  10. input {
  11. r#type: "file",
  12. accept: ".txt, .rs",
  13. multiple: true,
  14. directory: true,
  15. onchange: |evt| {
  16. to_owned![files_uploaded];
  17. async move {
  18. if let Some(file_engine) = &evt.files {
  19. let files = file_engine.files();
  20. for file_name in files {
  21. sleep(std::time::Duration::from_secs(1)).await;
  22. files_uploaded.write().push(file_name);
  23. }
  24. }
  25. }
  26. },
  27. },
  28. div { "progress: {files_uploaded.read().len()}" },
  29. ul {
  30. for file in files_uploaded.read().iter() {
  31. li { "{file}" }
  32. }
  33. }
  34. })
  35. }