-
Notifications
You must be signed in to change notification settings - Fork 29.7k
Material 3 - Tab indicator stretch animation #141954
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
5072d42 to
e7bad4f
Compare
Piinks
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey @davidmartos96! Thanks for your continued work on tabs!
Piinks
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is looking really goo! Just one question :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice clean up!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would controller.animation.status tell us earlier if it is completed? We might put this at the top of this function to skip doing work then. Otherwise, should we assert here that our determination that the animation status is finished is true?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Piinks Goog point!
We could add a guard with status == completed at the top, but it would only work when changing tabs via tapping. Dragging a TabBarView doesn't trigger an animation "life cycle", so there is never a completed status, making tabChangeProgress == 1.0 still neccessary.
We could add the early return at the top, and keep the other one as is, but with an assert that it should only happen when not indexIsChanging (dragging the TabBarView). What do you think?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Piinks Actually, trying out the proposed assert, it doesn't work. There is a frame where the progress is 1.0 but the status is .forward, not .completed. So maybe just having the early return with the status at the top is ok.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done in 30961c505dbce09a6ceee973475ea6719e0dc93e
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for looking into this!
Piinks
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for looking into this!
TahaTesser
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice fix
TahaTesser
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
657d0ed to
4f8223e
Compare
* master: (32 commits) [reland] Add `AnimationStyle` to `showSnackBar` (flutter#143052) Run Mac x64 build tests in postsubmit only (flutter#142334) Copy the flutter version JSON file into the simulated Flutter SDK used by update_packages (flutter#143035) Mark `Windows_android hot_mode_dev_cycle_win__benchmark` as no longer flaky (flutter#143016) Dispose precached image info (flutter#143017) Instrument CurvedAnimation. (flutter#143007) Update _goldens_io.dart to generate failure images during a size mism… (flutter#142177) Reverts "Activate InkSparkle on CanvasKit" (flutter#143036) Activate InkSparkle on CanvasKit (flutter#138545) [Windows] Fix signed/unsigned int comparison (flutter#142341) Reverts "Move native assets to `isolated/` directory" (flutter#143027) Reverts "Roll Flutter Engine from 808886312e2b to 07cdaab7f531 (18 revisions)" (flutter#143025) Make destructiveRed a CupertinoDynamicColor (flutter#141364) Move native assets to `isolated/` directory (flutter#142709) Roll Flutter Engine from 808886312e2b to 07cdaab7f531 (18 revisions) (flutter#143005) Fix CupertinoPageScaffold resizeToAvoidBottomInset (flutter#142776) Reverts "Add `AnimationStyle` to `showSnackBar`" (flutter#143001) Material 3 - Tab indicator stretch animation (flutter#141954) Add `AnimationStyle` to `showSnackBar` (flutter#142825) Roll Packages from ae3494d to 1a5a7ce (2 revisions) (flutter#142985) ...
flutter/flutter@e6ba809...8431cae 2024-02-07 [email protected] Roll Flutter Engine from 1ac6beb8a3c2 to 6807342305e4 (6 revisions) (flutter/flutter#143082) 2024-02-07 [email protected] Manual roll Flutter Engine from 808886312e2b to 1ac6beb8a3c2 (22 revisions) (flutter/flutter#143039) 2024-02-07 [email protected] Roll Packages from 1a5a7ce to e4ea6bf (4 revisions) (flutter/flutter#143076) 2024-02-07 [email protected] Fix M3 text field height + initial step for input decorator M3 test migration (flutter/flutter#142981) 2024-02-07 [email protected] [reland] Add `AnimationStyle` to `showSnackBar` (flutter/flutter#143052) 2024-02-07 [email protected] Run Mac x64 build tests in postsubmit only (flutter/flutter#142334) 2024-02-07 [email protected] Copy the flutter version JSON file into the simulated Flutter SDK used by update_packages (flutter/flutter#143035) 2024-02-07 [email protected] Mark `Windows_android hot_mode_dev_cycle_win__benchmark` as no longer flaky (flutter/flutter#143016) 2024-02-07 [email protected] Dispose precached image info (flutter/flutter#143017) 2024-02-07 [email protected] Instrument CurvedAnimation. (flutter/flutter#143007) 2024-02-07 [email protected] Update _goldens_io.dart to generate failure images during a size mism� (flutter/flutter#142177) 2024-02-07 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Activate InkSparkle on CanvasKit" (flutter/flutter#143036) 2024-02-07 [email protected] Activate InkSparkle on CanvasKit (flutter/flutter#138545) 2024-02-07 [email protected] [Windows] Fix signed/unsigned int comparison (flutter/flutter#142341) 2024-02-07 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Move native assets to `isolated/` directory" (flutter/flutter#143027) 2024-02-06 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Roll Flutter Engine from 808886312e2b to 07cdaab7f531 (18 revisions)" (flutter/flutter#143025) 2024-02-06 [email protected] Make destructiveRed a CupertinoDynamicColor (flutter/flutter#141364) 2024-02-06 [email protected] Move native assets to `isolated/` directory (flutter/flutter#142709) 2024-02-06 [email protected] Roll Flutter Engine from 808886312e2b to 07cdaab7f531 (18 revisions) (flutter/flutter#143005) 2024-02-06 [email protected] Fix CupertinoPageScaffold resizeToAvoidBottomInset (flutter/flutter#142776) 2024-02-06 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Add `AnimationStyle` to `showSnackBar`" (flutter/flutter#143001) 2024-02-06 [email protected] Material 3 - Tab indicator stretch animation (flutter/flutter#141954) 2024-02-06 [email protected] Add `AnimationStyle` to `showSnackBar` (flutter/flutter#142825) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [email protected],[email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Fixes #128696 (Motion checkbox)
This PR updates the Material 3 tab indicator animation, so that it stretches, as it can be seen in the showcase videos in the specification https://m3.material.io/components/tabs/accessibility#13ed756b-fb35-4bb3-ac8c-1157e49031d8
One thing to note is that the Material 3 videos have a tab transition duration of 700 ms, whereas currently in Flutter the duration is 300 ms. I recorded 4 comparison videos to see the difference better (current animation vs stretch animation and 300 ms vs 700 ms)
@Piinks You mentioned the other day that the default tab size could be updated in the future to better reflect the new size in M3. Maybe the
kTabScrollDurationconstant is another one that could end up being updated, as 300 ms for this animation feels too fast.Here are the comparison videos (Material 3 spec showcase on the left and Flutter on the right)
Original animation - 300 ms
orig_default_duration.mp4
New animation - 300 ms
stretch_default_duration.mp4
Original animation - 700 ms
orig_changed_duration.mp4
New animation - 700 ms
stretch_changed_duration.mp4
Code sample
If you had to change anything in the flutter/tests repo, include a link to the migration guide as per the breaking change policy.
Pre-launch Checklist
///).If you need help, consider asking for advice on the #hackers-new channel on Discord.