{"id":13549588,"url":"https://github.com/fzyzcjy/flutter_smooth","last_synced_at":"2025-05-14T16:02:12.255Z","repository":{"id":60327696,"uuid":"541925534","full_name":"fzyzcjy/flutter_smooth","owner":"fzyzcjy","description":"Achieve ~60 FPS, no matter how heavy the tree is to build/layout","archived":false,"fork":false,"pushed_at":"2025-03-12T04:04:39.000Z","size":9832,"stargazers_count":1598,"open_issues_count":32,"forks_count":64,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-04-12T20:43:52.237Z","etag":null,"topics":["dart","flutter","fps","smooth"],"latest_commit_sha":null,"homepage":"https://fzyzcjy.github.io/flutter_smooth/","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fzyzcjy.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-27T05:56:45.000Z","updated_at":"2025-04-11T11:31:23.000Z","dependencies_parsed_at":"2024-01-14T03:32:45.042Z","dependency_job_id":"4fed8157-ff37-4c79-a364-2270c52d2c0f","html_url":"https://github.com/fzyzcjy/flutter_smooth","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fzyzcjy%2Fflutter_smooth","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fzyzcjy%2Fflutter_smooth/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fzyzcjy%2Fflutter_smooth/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fzyzcjy%2Fflutter_smooth/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fzyzcjy","download_url":"https://codeload.github.com/fzyzcjy/flutter_smooth/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254179903,"owners_count":22027884,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dart","flutter","fps","smooth"],"created_at":"2024-08-01T12:01:23.306Z","updated_at":"2025-05-14T16:02:12.218Z","avatar_url":"https://github.com/fzyzcjy.png","language":"Dart","funding_links":[],"categories":["Dart"],"sub_categories":[],"readme":"\u003c!-- start: title --\u003e\n\n# [flutter_smooth](https://github.com/fzyzcjy/flutter_smooth/tree/master)\n\n\u003c!-- end: title --\u003e\n\n![logo](https://raw.githubusercontent.com/fzyzcjy/flutter_smooth_blob/master/meta/logo.svg)\n\n\u003ccenter\u003e\u003csmall\u003eAchieve ~60 FPS, no matter how heavy the tree is to build/layout.\u003c/small\u003e\u003c/center\u003e\n\n## 🎼 3-second video\n\n\u003c!-- start: video --\u003e\n\nhttps://user-images.githubusercontent.com/5236035/196152010-09a2d829-c94c-48b4-80ed-0633430329ec.mp4\n\n\u003csmall\u003e\u003csmall\u003e(left = without smooth, right = smooth; captured by external camera to maximally demonstrate end-user perception. High-resolution video [here](https://fzyzcjy.github.io/flutter_smooth). Deliberately made it super janky for clear demonstration.)\u003c/small\u003e\u003c/small\u003e\n\n\u003c!-- end: video --\u003e\n\n## 📚 1-minute explanation\n\n### Purpose\n\nNo 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](https://fzyzcjy.github.io/flutter_smooth/benchmark))\n\n### Usage\n\nTwo possibilities:\n\n* **Drop-in replacements**: For common scenarios, add 6 characters (\"Smooth\") - `ListView` becomes `SmoothListView`, ``MaterialPageRoute`` becomes `SmoothMaterialPageRoute`.\n\n* **Arbitrarily flexible builder**: For complex cases, use `SmoothBuilder(builder: ...)` and put whatever you want to be smooth inside the `builder`.\n\n## 🚀 What's next\n\nThe documentation - https://fzyzcjy.github.io/flutter_smooth/, with usage, demo, benchmark, insights, and more.\n\n\u003e **Note**\n\u003e Feel free to create an [issue](https://github.com/fzyzcjy/flutter_smooth/issues) if you have any questions/problems. I usually reply quickly within minutes if not hours, except for sleeping :)\n\n## 💭 Current status\n\nNow 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](https://cjycode.com/flutter_smooth/insight/status), or conversations [here](https://cjycode.com/flutter_smooth/insight/conversation/).\n\n## Contributors\n\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-7-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key) following [all-contributors](https://github.com/all-contributors/all-contributors) specification):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/fzyzcjy\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5236035?v=4?s=100\" width=\"100px;\" alt=\"fzyzcjy\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003efzyzcjy\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/fzyzcjy/flutter_smooth/commits?author=fzyzcjy\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/fzyzcjy/flutter_smooth/commits?author=fzyzcjy\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#ideas-fzyzcjy\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"http://ln.hixie.ch/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/551196?v=4?s=100\" width=\"100px;\" alt=\"Ian Hickson\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eIan Hickson\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-Hixie\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/dnfield\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/8620741?v=4?s=100\" width=\"100px;\" alt=\"Dan Field\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDan Field\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-dnfield\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/jonahwilliams\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/8975114?v=4?s=100\" width=\"100px;\" alt=\"Jonah Williams\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJonah Williams\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-jonahwilliams\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/gaaclarke\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/30870216?v=4?s=100\" width=\"100px;\" alt=\"gaaclarke\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003egaaclarke\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-gaaclarke\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://juejin.cn/user/4309694831660711\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/40540394?v=4?s=100\" width=\"100px;\" alt=\"Nayuta403\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNayuta403\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/fzyzcjy/flutter_smooth/commits?author=Nayuta403\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://pajlada.se/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/962989?v=4?s=100\" width=\"100px;\" alt=\"pajlada\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003epajlada\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/fzyzcjy/flutter_smooth/commits?author=pajlada\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nMore specifically, thanks for all these contributions:\n\n* [@Hixie](https://github.com/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.\n* [@dnfield](https://github.com/dnfield) (Flutter team): Provide a canonical janky case inside Flutter framework to help prototyping. Point out slowness of sync generators which avoids detouring.\n* [@jonahwilliams](https://github.com/jonahwilliams) (Flutter team): Elaborate shortcomings of the old gesture system proposal (later I made a much more natural one).\n* [@gaaclarke](https://github.com/gaaclarke) (Flutter team): Share his pet theory that slowness is caused by memory locality, indicating another potential application of the package.\n* [@Nayuta403](https://github.com/Nayuta403): Fix link.\n* [@pajlada](https://github.com/pajlada): Fix typo.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffzyzcjy%2Fflutter_smooth","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffzyzcjy%2Fflutter_smooth","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffzyzcjy%2Fflutter_smooth/lists"}