opt: matrix anim (#1829)

This commit is contained in:
My-Responsitories
2026-02-08 15:27:03 +08:00
committed by GitHub
parent 4ac855d393
commit 8234b7ac92
6 changed files with 156 additions and 111 deletions

View File

@@ -15,17 +15,20 @@ class OnlyLayoutWidget extends SingleChildRenderObjectWidget {
@override
RenderObject createRenderObject(BuildContext context) =>
Layout(onPerformLayout: onPerformLayout);
NoRenderLayoutBox(onPerformLayout: onPerformLayout);
@override
void updateRenderObject(BuildContext context, Layout renderObject) {
void updateRenderObject(
BuildContext context,
NoRenderLayoutBox renderObject,
) {
super.updateRenderObject(context, renderObject);
renderObject.onPerformLayout = onPerformLayout;
}
}
class Layout extends RenderProxyBox {
Layout({required this.onPerformLayout});
class NoRenderLayoutBox extends RenderProxyBox {
NoRenderLayoutBox({required this.onPerformLayout});
LayoutCallback onPerformLayout;
@@ -40,3 +43,42 @@ class Layout extends RenderProxyBox {
@override
void paint(PaintingContext context, Offset offset) {}
}
class LayoutSizeWidget extends SingleChildRenderObjectWidget {
const LayoutSizeWidget({
super.key,
super.child,
required this.onPerformLayout,
});
final LayoutCallback onPerformLayout;
@override
RenderObject createRenderObject(BuildContext context) =>
RenderLayoutBox(onPerformLayout: onPerformLayout);
@override
void updateRenderObject(
BuildContext context,
RenderLayoutBox renderObject,
) {
super.updateRenderObject(context, renderObject);
renderObject.onPerformLayout = onPerformLayout;
}
}
class RenderLayoutBox extends RenderProxyBox {
RenderLayoutBox({required this.onPerformLayout});
LayoutCallback onPerformLayout;
Size? _size;
@override
void performLayout() {
super.performLayout();
if (_size != size) {
onPerformLayout(_size = size);
}
}
}