shared_state.rs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #![allow(non_snake_case)]
  2. use dioxus::prelude::*;
  3. fn main() {
  4. dioxus_desktop::launch(App);
  5. }
  6. struct DarkMode(bool);
  7. #[rustfmt::skip]
  8. pub fn App(cx: Scope) -> Element {
  9. use_shared_state_provider(cx, || DarkMode(false));
  10. render!(
  11. DarkModeToggle {},
  12. AppBody {}
  13. )
  14. }
  15. pub fn DarkModeToggle(cx: Scope) -> Element {
  16. let dark_mode = use_shared_state::<DarkMode>(cx).unwrap();
  17. let style = if dark_mode.read().0 {
  18. "color:white"
  19. } else {
  20. ""
  21. };
  22. cx.render(rsx!(label {
  23. style: "{style}",
  24. "Dark Mode",
  25. input {
  26. r#type: "checkbox",
  27. oninput: move |event| {
  28. let is_enabled = event.value == "true";
  29. dark_mode.write().0 = is_enabled;
  30. },
  31. },
  32. }))
  33. }
  34. fn AppBody(cx: Scope) -> Element {
  35. let dark_mode = use_shared_state::<DarkMode>(cx).unwrap();
  36. let is_dark_mode = dark_mode.read().0;
  37. let answer = if is_dark_mode { "Yes" } else { "No" };
  38. render!(
  39. p {
  40. "Is Dark mode enabled? {answer}"
  41. }
  42. )
  43. }