flutter_smooth

November 6, 2022 ยท View on GitHub

logo

Achieve ~60 FPS, no matter how heavy the tree is to build/layout.

๐ŸŽผ 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. Deliberately made it super janky for clear demonstration.)

๐Ÿ“š 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") - ListView becomes SmoothListView, MaterialPageRoute becomes SmoothMaterialPageRoute.

  • Arbitrarily flexible builder: For complex cases, use SmoothBuilder(builder: ...) and put whatever you want to be smooth inside the builder.

๐Ÿš€ What's next

The documentation - 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 :)

๐Ÿ’ญ Current status

Now I am working on pull requests to Flutter framework and engine (i.e. not directly modifying code in this repository), such that you can use this package with standard stable Flutter. An auto-generated list of PRs can be seen here, or conversations here.

Contributors

All Contributors

Thanks goes to these wonderful people (emoji key following all-contributors specification):

fzyzcjy
fzyzcjy

๐Ÿ’ป ๐Ÿ“– ๐Ÿค”
Ian Hickson
Ian Hickson

๐Ÿค”
Dan Field
Dan Field

๐Ÿค”
Jonah Williams
Jonah Williams

๐Ÿค”
gaaclarke
gaaclarke

๐Ÿค”
Nayuta403
Nayuta403

๐Ÿ“–
pajlada
pajlada

๐Ÿ“–

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.
  • @pajlada: Fix typo.