Support custom BoxBorder animation in BoxDecoration#186348
Conversation
There was a problem hiding this comment.
Code Review
This pull request enables BoxDecoration to handle interpolation and scaling for custom BoxBorder subclasses by introducing a private _lerpBorder method that utilizes ShapeBorder.lerp. New tests verify this functionality using a custom border implementation. Feedback suggests simplifying nullable type checks and renaming a local variable to avoid shadowing and improve idiomatic Dart usage.
Piinks
left a comment
There was a problem hiding this comment.
Thanks for the update!
WDYT about staying consistent with the implementation of ShapeBorder.lerp and OutlinedBorder.lerp? Should follow the same pattern for the fallback? This could also avoid the is check, which aligns better with the Flutter style guide.
What do you think about simplifying the interpolation logic to this one-liner?
final ShapeBorder? result = b?.lerpFrom(a, t) ?? a?.lerpTo(b, t);
return result as BoxBorder? ?? (t < 0.5 ? a : b);This provides a resilient fallback and keeps the implementation consistent with the rest of the library. Let me know what you think!
Piinks
left a comment
There was a problem hiding this comment.
Thanks for addressing the feedback, this LGTM
b07fbfc to
f51f6dd
Compare
|
autosubmit label was removed for flutter/flutter/186348, because - The status or check suite Google testing has failed. Please fix the issues identified (or deflake) before re-applying this label. |
|
Google are legit but may just be slight color changes. |
Looks like these are just very slight changes to borders, therefore I've overridden the Google testing status. |
f51f6dd to
0c6edf4
Compare
flutter/flutter@1ac2e82...2a2a79d 2026-07-22 [email protected] Clear cached directional focus history on a non-directional focus request (flutter/flutter#187957) 2026-07-22 [email protected] ci: Include root pubspec.yaml in pub cache key (flutter/flutter#189826) 2026-07-22 [email protected] Remove codecov badge from README (flutter/flutter#189728) 2026-07-22 [email protected] Clean android engine/embedding tests (flutter/flutter#189276) 2026-07-22 [email protected] Add barrierBuilder support to showDialog and showGeneralDialog (flutter/flutter#187992) 2026-07-22 [email protected] Fix Mockito dynamic agent loading warnings in Robolectric tests (flutter/flutter#189804) 2026-07-22 [email protected] [iOS] Remove dead RasterThreadMerger plumbing from platform views (flutter/flutter#189753) 2026-07-22 [email protected] Add OverlayPortal.overlayChildLayoutBuilder sample (flutter/flutter#188930) 2026-07-22 [email protected] Automate recurring tasks via workflows - localizations (flutter/flutter#189750) 2026-07-21 [email protected] [iOS] Remove dead parameters and no-op overrides (flutter/flutter#189754) 2026-07-21 [email protected] [iOS] Inject DisplayLinkManager into FlutterViewController (flutter/flutter#189764) 2026-07-21 [email protected] Support custom BoxBorder animation in BoxDecoration (flutter/flutter#186348) 2026-07-21 [email protected] Rename CpuArch.x86_64 to CpuArch.x64 (flutter/flutter#189478) 2026-07-21 [email protected] Roll Skia from 569534e9fa59 to 5e183e5aeac5 (3 revisions) (flutter/flutter#189795) 2026-07-21 [email protected] Roll Dart SDK from 3b2f5ad7718d to 1e65011ee004 (4 revisions) (flutter/flutter#189791) 2026-07-21 [email protected] Run delete-bot-branches.yaml on `pull_request_target` instead of `pull_request` so that we can access secrets. (flutter/flutter#189793) 2026-07-21 [email protected] Batch release directory correction (flutter/flutter#189738) 2026-07-21 [email protected] [flutter_test][Test cross imports] Move TestWidgetsApp to flutter_test (flutter/flutter#189435) 2026-07-21 [email protected] Fix null-deref/double-dispose in StretchingOverscrollIndicator (#189589) (flutter/flutter#189667) 2026-07-21 [email protected] Roll Packages from 611899b to 8260a1e (10 revisions) (flutter/flutter#189782) 2026-07-21 [email protected] [iOS] Inject DisplayLinkManager into FlutterMetalLayer (flutter/flutter#189752) 2026-07-21 [email protected] Derive the SkImage size used by ImageEncodingImpeller::ConvertDlImageToSkImage from the size of the underlying texture, not the size of the DlImage (flutter/flutter#189739) 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] 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 #180297
BoxDecoration now preserves the existing specialized Border and BorderDirectional interpolation path, while custom BoxBorder subclasses use ShapeBorder.lerp. This lets custom borders provide their own interpolation hooks and avoids the AnimatedContainer assertion when animating a BoxDecoration with a custom border.
Tests: