Initialize lazy::pure::Component view properly
... during `children` and `diff` in the `Widget` implementation
This commit is contained in:
parent
fbbb864aaa
commit
fa3bd4280e
1 changed files with 26 additions and 21 deletions
|
|
@ -101,27 +101,6 @@ where
|
||||||
&self,
|
&self,
|
||||||
f: impl FnOnce(&mut Element<'_, Event, Renderer>) -> T,
|
f: impl FnOnce(&mut Element<'_, Event, Renderer>) -> T,
|
||||||
) -> T {
|
) -> T {
|
||||||
if self
|
|
||||||
.state
|
|
||||||
.borrow()
|
|
||||||
.as_ref()
|
|
||||||
.unwrap()
|
|
||||||
.borrow_element()
|
|
||||||
.is_none()
|
|
||||||
{
|
|
||||||
let heads = self.state.borrow_mut().take().unwrap().into_heads();
|
|
||||||
|
|
||||||
*self.state.borrow_mut() = Some(
|
|
||||||
StateBuilder {
|
|
||||||
component: heads.component,
|
|
||||||
message: PhantomData,
|
|
||||||
state: PhantomData,
|
|
||||||
element_builder: |state| Some(state.view(&S::default())),
|
|
||||||
}
|
|
||||||
.build(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
self.state
|
self.state
|
||||||
.borrow_mut()
|
.borrow_mut()
|
||||||
.as_mut()
|
.as_mut()
|
||||||
|
|
@ -145,10 +124,36 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
fn children(&self) -> Vec<Tree> {
|
fn children(&self) -> Vec<Tree> {
|
||||||
|
let heads = self.state.borrow_mut().take().unwrap().into_heads();
|
||||||
|
|
||||||
|
*self.state.borrow_mut() = Some(
|
||||||
|
StateBuilder {
|
||||||
|
component: heads.component,
|
||||||
|
message: PhantomData,
|
||||||
|
state: PhantomData,
|
||||||
|
element_builder: |state| Some(state.view(&S::default())),
|
||||||
|
}
|
||||||
|
.build(),
|
||||||
|
);
|
||||||
|
|
||||||
self.with_element(|element| vec![Tree::new(element)])
|
self.with_element(|element| vec![Tree::new(element)])
|
||||||
}
|
}
|
||||||
|
|
||||||
fn diff(&self, tree: &mut Tree) {
|
fn diff(&self, tree: &mut Tree) {
|
||||||
|
let heads = self.state.borrow_mut().take().unwrap().into_heads();
|
||||||
|
|
||||||
|
*self.state.borrow_mut() = Some(
|
||||||
|
StateBuilder {
|
||||||
|
component: heads.component,
|
||||||
|
message: PhantomData,
|
||||||
|
state: PhantomData,
|
||||||
|
element_builder: |state| {
|
||||||
|
Some(state.view(tree.state.downcast_ref()))
|
||||||
|
},
|
||||||
|
}
|
||||||
|
.build(),
|
||||||
|
);
|
||||||
|
|
||||||
self.with_element(|element| {
|
self.with_element(|element| {
|
||||||
tree.diff_children(std::slice::from_ref(&element))
|
tree.diff_children(std::slice::from_ref(&element))
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue