fzyzcjy / flutter_smooth

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

Home Page:https://fzyzcjy.github.io/flutter_smooth/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

logo

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

🎼 3-second video

output_small.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.

About

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

https://fzyzcjy.github.io/flutter_smooth/

License:MIT License


Languages

Language:Dart 69.8%Language:Python 9.4%Language:C++ 5.6%Language:JavaScript 5.1%Language:CMake 5.0%Language:Ruby 1.0%Language:Objective-C 0.9%Language:Java 0.8%Language:HTML 0.5%Language:Swift 0.5%Language:CSS 0.4%Language:C 0.4%Language:Kotlin 0.4%Language:TypeScript 0.3%