Clarify performacne of SingleTickerProviderStateMixin vs TickerProviderStateMixin#164870
Merged
auto-submit[bot] merged 7 commits intoflutter:masterfrom Mar 11, 2025
Merged
Clarify performacne of SingleTickerProviderStateMixin vs TickerProviderStateMixin#164870auto-submit[bot] merged 7 commits intoflutter:masterfrom
auto-submit[bot] merged 7 commits intoflutter:masterfrom
Conversation
chunhtai
reviewed
Mar 10, 2025
Contributor
chunhtai
left a comment
There was a problem hiding this comment.
looking at the code, I can be sure this statement is true.
Using one [TickerProviderStateMixin] twice is more efficient than two [SingleTickerProviderStateMixin]s
| /// If you only have a single [Ticker] (for example only a single | ||
| /// [AnimationController]) for the lifetime of your [State], then using a | ||
| /// [SingleTickerProviderStateMixin] is more efficient. This is the common case. | ||
| /// Using one [TickerProviderStateMixin] twice is more efficient than two |
Contributor
There was a problem hiding this comment.
When creating multiple [AnimationController]s, using a single state with [TickerProviderStateMixin] as vsync for all [AnimationController]s is more efficient than creating multiple states with [SingleTickerProviderStateMixin].
and there should be a new line in between this and previous paragraph.
Contributor
|
looks like there is trailing space |
Contributor
Author
|
Should be fixed now. |
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 11, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 11, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 11, 2025
…erProviderStateMixin (flutter/flutter#164870)
This was referenced Mar 11, 2025
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 11, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 11, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 12, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 15, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 15, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 16, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 16, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 16, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 17, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 20, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 25, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 25, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 26, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 26, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 26, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 26, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 26, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 26, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 26, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 26, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 27, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 27, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 27, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 27, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 27, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 27, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 27, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 27, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
Mar 28, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
May 20, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
May 20, 2025
…erProviderStateMixin (flutter/flutter#164870)
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/packages
that referenced
this pull request
May 21, 2025
…erProviderStateMixin (flutter/flutter#164870)
romanejaquez
pushed a commit
to romanejaquez/flutter
that referenced
this pull request
Aug 14, 2025
…erStateMixin (flutter#164870) Adds the following line to [TickerProviderStateMixin](https://api.flutter.dev/flutter/widgets/TickerProviderStateMixin-mixin.html): >Using one [TickerProviderStateMixin] twice is more efficient than two [SingleTickerProviderStateMixin]s. This is based on a discussion on Flutter Discord with @chunhtai. From what I understood, creating multiple `SingleTickerProviderStateMixin`s is more expensive because you need two different state which is relatively costly compared to having just one. Not sure if this line should should be qualified like "Using one [TickerProviderStateMixin] twice is *generally* more efficient than two [SingleTickerProviderStateMixin]s" or similar. This change should be reviewed for correctness as I don't actually understand enough about the difference between `TickerProviderStateMixin` and `SingleTickerProviderStateMixin`. Closes flutter#164869 <details> <summary> Example case where this was relevant (click) </summary> I was avoiding using `TickerProviderStateMixin` like so: ```dart _animationController = AnimationController.unbounded(vsync: this) ..addListener(() { _updateScale(_animationController.value); }); //could have just set `vsync` to `this` if using `TickerProviderStateMixin` WidgetsBinding.instance.addPostFrameCallback((_) { _verticalAnimationController = AnimationController.unbounded(vsync: _verticalController.position.context.vsync) ..addListener(() { _verticalController.jumpTo(_verticalAnimationController.value); }); _horizontalAnimationController = AnimationController.unbounded(vsync: _horizontalController.position.context.vsync) ..addListener(() { _horizontalController.jumpTo(_horizontalAnimationController.value); }); }); ``` Instead of just: ```dart _animationController = AnimationController.unbounded(vsync: this) ..addListener(() { _updateScale(_animationController.value); }); _verticalAnimationController = AnimationController.unbounded(vsync: this) ..addListener(() { _verticalController.jumpTo(_verticalAnimationController.value); }); _horizontalAnimationController = AnimationController.unbounded(vsync: this) ..addListener(() { _horizontalController.jumpTo(_horizontalAnimationController.value); }); ``` </details> ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Adds the following line to TickerProviderStateMixin:
This is based on a discussion on Flutter Discord with @chunhtai. From what I understood, creating multiple
SingleTickerProviderStateMixins is more expensive because you need two different state which is relatively costly compared to having just one. Not sure if this line should should be qualified like "Using one [TickerProviderStateMixin] twice is generally more efficient than two [SingleTickerProviderStateMixin]s" or similar.This change should be reviewed for correctness as I don't actually understand enough about the difference between
TickerProviderStateMixinandSingleTickerProviderStateMixin.Closes #164869
Example case where this was relevant (click)
I was avoiding using
TickerProviderStateMixinlike so:Instead of just:
Pre-launch Checklist
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.