Comments (2)
You can't avoid calling layout on children, however, the framework does implement optimizations that short-circuit it for you.
If the constraints passed to a child are the same as in the previous layout (and markNeedsLayout wasn't called) then the framework skips calling performLayout: see if (!_needsLayout && constraints == _constraints) {
in https://api.flutter.dev/flutter/rendering/RenderObject/layout.html
from boxy.
That is great to hear ! I definitely see an improvement (250 to 80 micro-seconds !) by having the same constraints object for all the children.
However, it appears that, all the widgets still repaints, I already have a RepaintBoundary
on the moving wave but they are still painting on window resize or on the animation no matter if the constraints are the same, and only by giving the "has to resize" widget the same constraint the performance move to 80.
Only by giving the same constraints to the third widget the time drop, green and blue are when only the third and everyone have the same constraints between layouts, red and yellow are when only the two or nobody have the same constraints between layouts.
I'm a bit lost here :
BoxConstraints
== operator check if the value reference to the same objects before looking at maxHeight etc. I'm usingconstraints.copyWith()
so the yellow line would differ from the red, even slightly ? (It look like it does a bit lol)- Why the blue and green don't too ?
- I placed a
CustomPainter
in the "has to not" and it paint every times, even with the same constraints object. - The "has to resize" widget is so simple yet add (250-80) micro-seconds to the layout method.
// The entire top widget
class Salut extends StatefulWidget {
const Salut({Key? key}) : super(key: key);
@override
State<Salut> createState() => _SalutState();
}
class _SalutState extends State<Salut> {
bool open = false;
@override
Widget build(BuildContext context) {
// Never printed outside the first frame
print('rebuild top');
return GestureDetector(
onTap: () {
BottomWaveViewState waveViewState = BottomWaveView.of(context);
open = !open;
waveViewState.toogleWave(open);
},
child: const SizedBox(
height: double.infinity,
width: double.infinity,
child: Placeholder(child: Center(child: Text('Has to resize'))),
));
}
}
If you have some ideas, I would love to get your directions on this
from boxy.
Related Issues (20)
- Finding child Offeset HOT 4
- How to remove a rendered widget? HOT 4
- [Question] - Can I use Boxy to build a Flutter version of Angular FlexLayouts HOT 2
- Get widget's global position inside custom layout delegate HOT 3
- Problem with rendering a CustomBoxy when a new item is added to an animated list HOT 3
- Something wrong when using custom boxy and layer link HOT 3
- Strange behavior occurs when a Wrap widget is used in a Custom boxy. HOT 2
- [Question] Centered widget or Scrollable widget HOT 3
- Custom layout protocols
- Make `BoxyFlex` Implement `Flex` HOT 1
- [Question] is there a simple way to change the Tree View so that it is horizontally oriented? HOT 2
- OverflowPadding hitTest HOT 3
- `RedirectPointer` is not importable HOT 1
- [Feature Request] Sliver OverflowPadding
- Skip ignored children in `RenderObject.visitChildrenForSemantics` HOT 2
- [Feature request] `BaseBoxyDelegate.getChildOrNull` HOT 1
- [Question] Layout child reorder
- Overriden shouldRelayout doesn't have access to BoxyDelegate HOT 4
- `layers.clipPath()` does not apply `paintOffset` to `path` correctly when used in `paint()`. HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from boxy.