Initialize lazy::pure::Component view properly

... during `children` and `diff` in the `Widget` implementation
This commit is contained in:
Héctor Ramón Jiménez 2022-03-07 16:33:25 +07:00
parent fbbb864aaa
commit fa3bd4280e
No known key found for this signature in database
GPG key ID: 140CC052C94F138E

View file

@ -101,27 +101,6 @@ where
&self,
f: impl FnOnce(&mut Element<'_, Event, Renderer>) -> 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
.borrow_mut()
.as_mut()
@ -145,10 +124,36 @@ where
}
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)])
}
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| {
tree.diff_children(std::slice::from_ref(&element))
})