diff --git a/src/value.rs b/src/value.rs index 7e898d2..8500fed 100644 --- a/src/value.rs +++ b/src/value.rs @@ -18,7 +18,7 @@ use crate::context::sealed::WindowHandle; use crate::context::{self, WidgetContext}; use crate::utils::{run_in_bg, IgnorePoison, UnwindsafeCondvar, WithClone}; use crate::widget::{MakeWidget, WidgetId, WidgetInstance}; -use crate::widgets::{Radio, Switcher}; +use crate::widgets::{Radio, Space, Switcher}; /// An instance of a value that provides APIs to observe and react to its /// contents. @@ -589,6 +589,23 @@ impl Dynamic { } } +impl MakeWidget for Dynamic { + fn make_widget(self) -> WidgetInstance { + self.switcher().make_widget() + } +} + +impl MakeWidget for Dynamic> { + fn make_widget(self) -> WidgetInstance { + self.map_each(|widget| { + widget + .as_ref() + .map_or_else(|| Space::clear().make_widget(), Clone::clone) + }) + .make_widget() + } +} + impl context::sealed::Trackable for Dynamic { fn redraw_when_changed(&self, handle: WindowHandle) { self.redraw_when_changed(handle);