flutter_smooth
flutter_smooth copied to clipboard
Achieve ~60 FPS, no matter how heavy the tree is to build/layout
flutter_smooth
🎼 3-second video
https://user-images.githubusercontent.com/5236035/196152010-09a2d829-c94c-48b4-80ed-0633430329ec.mp4
(left = without smooth, right = smooth; captured by external camera to maximally demonstrate end-user perception. High-resolution video here.)
📚 1-minute explanation
Purpose
No matter how heavy the tree is to build/layout, it will run at (roughly) full FPS, feel smooth, has zero uncomfortable janks, with negligible overhead. (Detailed reports here)
Usage
Two possibilities:
-
Drop-in replacements: For common scenarios, add 6 characters ("Smooth") -
ListViewbecomesSmoothListView,MaterialPageRoutebecomesSmoothMaterialPageRoute. -
Arbitrarily flexible builder: For complex cases, use
SmoothBuilder(builder: ...)and put whatever you want to be smooth inside thebuilder.
🚀 What's next
The documentaiton - https://fzyzcjy.github.io/flutter_smooth/, with usage, demo, benchmark, insights, and more.
Note Feel free to create an issue if you have any questions/problems. I usually reply quickly within minutes if not hours, except for sleeping :)
Contributors
Thanks goes to these wonderful people (emoji key following all-contributors specification):
fzyzcjy 💻 📖 🤔 |
Ian Hickson 🤔 |
Dan Field 🤔 |
Jonah Williams 🤔 |
gaaclarke 🤔 |
Nayuta403 📖 |
More specifically, thanks for all these contributions:
- @Hixie (Flutter team): Consider details of my several proposals to the Flutter framework/engine such as requiring zero-overhead principle. Construct concrete cases when the initial proposal becomes fragile.
- @dnfield (Flutter team): Provide a canonical janky case inside Flutter framework to help prototyping. Point out slowness of sync generators which avoids detouring.
- @jonahwilliams (Flutter team): Elaborate shortcomings of the old gesture system proposal (later I made a much more natural one).
- @gaaclarke (Flutter team): Share his pet theory that slowness is caused by memory locality, indicating another potential application of the package.
- @Nayuta403: Fix link.