Skip to content

Broaden the applicability of Color fix_data rules from flutter/painting.dart#181093

Merged
auto-submit[bot] merged 10 commits into
flutter:masterfrom
b-luk:fixdatadartuicolor
Jan 23, 2026
Merged

Broaden the applicability of Color fix_data rules from flutter/painting.dart#181093
auto-submit[bot] merged 10 commits into
flutter:masterfrom
b-luk:fixdatadartuicolor

Conversation

@b-luk

@b-luk b-luk commented Jan 17, 2026

Copy link
Copy Markdown
Contributor

See the conversation at dart-lang/sdk#59764 (comment) for more context.

Prior to this, these Color fix_data rules would only be visible to users that explicitly import package: flutter/painting.dart. This PR broadens the applicability of these rules so they are visible for users that import dart:ui, or import any one of the flutter/ packages that expose Color.

Enabling Color fix_data fixes for dart:ui:

  • Adds a fix_data.yaml file for 'dart:ui' fixes to engine/src/flutter/lib/ui/. This contains Color fixes copied from packages/flutter/lib/fix_data/fix_painting.yaml.
  • Typically fix_data files go in a Dart package's lib/ directory. But dart:ui is not a standard Dart package and doesn't have a typical lib directory. This directory is the closest thing to a lib directory for the dart:ui package that I can find. It contains the Dart code that implements the dart:ui package.
  • The actual Dart package for dart:ui is generated by engine/src/flutter/sky/packages/sky_engine/BUILD.gn with the package name sky_engine. I updated the build rule to copy the new fix_data.yaml file into the generated sky_engine/lib/ directory.

Enabling Color fix_data fixes for package:flutter/ libraries:

  • The Color fixes from packages/flutter/lib/fix_data/fix_painting.yaml are remove, and copied to over to a new packages/flutter/lib/fix_data/fix_dart_ui.yaml file.
  • This fix_data file specifies all the flutter/ libraries which export Color. With this change, importing any of these libraries will surface the Color fixes, rather than only surfacing the fixes only when package:flutter/painting.dart is specifically imported.

Other related changes

  • Updates some entries in fix_cupertino.yaml and fix_material.yaml which used the old Color.withOpacity method.
  • Updates existing flutter package test_fixes tests.
  • The color tests from the painting test_fixes test are moved to a new dart_ui test. Note that this only runs the test with only one of the flutter/ libraries specified in fix_dart_ui.yaml (animation.dart). Ideally I think we should run this test while independently importing each one of the flutter/ libraries specified in fix_dart_ui.yaml. But AFAICT there's no easy way to do this without creating a lot of duplicate code.
  • There is no fix_data test for dart:ui. Because this isn't a standard Dart library, I don't think there's an easy way to test its fix_data.yaml in a similar way to the flutter/ library fixes.

Somewhat fixes #180933 (makes the fixes more broadly available).
Somewhat addresses dart-lang/sdk#59764 (comment) (establishes a way to use fix_data.yaml files for dart:X libraries).

Pre-launch Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the gemini-code-assist bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

@github-actions github-actions Bot added framework flutter/packages/flutter repository. See also f: labels. engine flutter/engine related. See also e: labels. f: material design flutter/packages/flutter/material repository. f: cupertino flutter/packages/flutter/cupertino repository c: tech-debt Technical debt, code quality, testing, etc. labels Jan 17, 2026
@b-luk b-luk changed the title fix_data for dart:ui's color Broaden the applicability of Color fix_data rules from flutter/painting.dart Jan 17, 2026
@b-luk b-luk marked this pull request as ready for review January 17, 2026 00:41
@b-luk b-luk requested review from bwilkerson and gaaclarke January 17, 2026 00:41
@flutter-dashboard

Copy link
Copy Markdown

It looks like this pull request may not have tests. Please make sure to add tests or get an explicit test exemption before merging.

If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix?

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. If you believe this PR qualifies for a test exemption, contact "@test-exemption-reviewer" in the #hackers channel in Discord (don't just cc them here, they won't see it!). The test exemption team is a small volunteer group, so all reviewers should feel empowered to ask for tests, without delegating that responsibility entirely to the test exemption group.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request effectively broadens the availability of data-driven fixes for the Color class by moving them from being specific to painting.dart to being applicable to dart:ui and any Flutter library that exports Color. This is a good improvement for developers. The changes are well-structured, including updates to the engine build process to accommodate dart:ui fixes and refactoring the fix data files.

I've found a minor but important typo in one of the material fix files (withValue instead of withValues), which also affected a test expectation file. I've left specific comments with suggestions to correct this. Otherwise, the changes look solid.

Comment thread packages/flutter/lib/fix_data/fix_material/fix_material.yaml Outdated
Comment thread packages/flutter/test_fixes/material/material.dart.expect Outdated

@bwilkerson bwilkerson left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The change lgtm, but I don't have the ability to approve changes in the flutter repo.

@gaaclarke gaaclarke left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mostly looks good to me, i just have a few organizational questions.

# https://dart.dev/go/data-driven-fixes.

# * Fixes in this file are for classes exported from the 'dart:ui' library. *

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know there is a lot of text up here already, but we should at least have a link to the other file since this is duplicated. We should make sure we don't change one without the other.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. I updated both this packages/flutter fix file and also the engine's fix file to have a bit more context and to have them reference each other.

}

copy("copy_dart_ui_fix_data") {
sources = [ dart_ui_fix_data_file ]

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could the source of this rule just be the other file? They look exactly the same.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This source uses the engine's fix file. We shouldn't use the packages/flutter fix file here.

The engine's file uses 'dart:ui' as the URI for its fixes.

The packages/flutter file specifies 'package:flutter/*' libraries as the URIs for its fixes.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be helpful if the name of the source filename matches the destination of the copy.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

@gaaclarke gaaclarke left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm, thanks for digging into this. @loic-sharma is going to be excited

@b-luk

b-luk commented Jan 20, 2026

Copy link
Copy Markdown
Contributor Author

Created fzyzcjy/flutter_portal#127 to fix the broken customer_testing tests.

@b-luk

b-luk commented Jan 21, 2026

Copy link
Copy Markdown
Contributor Author

Created fzyzcjy/flutter_portal#127 to fix the broken customer_testing tests.

Ended up disabling the tests instead (flutter/tests#479). Updated this PR to update the customer testing commit version to include disabling those tests.

@b-luk b-luk added the autosubmit Merge PR when tree becomes green via auto submit App label Jan 21, 2026
@auto-submit auto-submit Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Jan 21, 2026
@auto-submit

auto-submit Bot commented Jan 21, 2026

Copy link
Copy Markdown
Contributor

autosubmit label was removed for flutter/flutter/181093, because - The status or check suite Google testing has failed. Please fix the issues identified (or deflake) before re-applying this label.

@b-luk b-luk added the autosubmit Merge PR when tree becomes green via auto submit App label Jan 22, 2026
@auto-submit auto-submit Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Jan 22, 2026
@auto-submit

auto-submit Bot commented Jan 22, 2026

Copy link
Copy Markdown
Contributor

autosubmit label was removed for flutter/flutter/181093, because - The status or check suite Google testing has failed. Please fix the issues identified (or deflake) before re-applying this label.

@b-luk b-luk added the autosubmit Merge PR when tree becomes green via auto submit App label Jan 23, 2026
@auto-submit auto-submit Bot added this pull request to the merge queue Jan 23, 2026
Merged via the queue into flutter:master with commit e13db18 Jan 23, 2026
180 of 181 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Jan 23, 2026
@b-luk b-luk deleted the fixdatadartuicolor branch January 23, 2026 01:13
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jan 23, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Jan 23, 2026
Roll Flutter from 48c2475 to bfc9041eb118 (173 revisions)

flutter/flutter@48c2475...bfc9041

2026-01-23 [email protected] No longer exiting the application when the RegularWindow is destroyed + resolving the window created promise after runWidget (flutter/flutter#181339)
2026-01-23 [email protected] Remove unnecessary Material import from dialog_test.dart (flutter/flutter#181249)
2026-01-23 [email protected] Roll Skia from 8e516fe6828f to db10db8bd55f (1 revision) (flutter/flutter#181379)
2026-01-23 [email protected] Reset TextFormField to initial value after state change (flutter/flutter#181199)
2026-01-23 [email protected] Roll Dart SDK from 980b2b41d36e to e82d7ad1855e (1 revision) (flutter/flutter#181375)
2026-01-23 [email protected] Roll Skia from 3e86f377d300 to 8e516fe6828f (4 revisions) (flutter/flutter#181370)
2026-01-23 [email protected] Remove unnecessary Material import from sliver_visibility_test (flutter/flutter#181248)
2026-01-23 [email protected] Add bottom navigation bar item semantics label (flutter/flutter#180577)
2026-01-23 [email protected] Make topGap not required for CupertinoSheetTransition (flutter/flutter#181269)
2026-01-23 [email protected] Roll Fuchsia Linux SDK from b4cLyhuxciUC-4zCJ... to n7NohL9DPpEuPjNt9... (flutter/flutter#181365)
2026-01-23 [email protected] Roll Dart SDK from 806f04638561 to 980b2b41d36e (1 revision) (flutter/flutter#181364)
2026-01-23 [email protected] Reland hybrid views test (flutter/flutter#181336)
2026-01-23 [email protected] Revert DropdownMenu non-nullable breaking change (flutter/flutter#181074)
2026-01-23 [email protected] Fix leaks in `flutter_test` tests (flutter/flutter#180879)
2026-01-23 [email protected] Re-enable fragment_shader_tests.dart 'Shader Compiler appropriately pads vec3 uniform arrays' test on Vulkan (flutter/flutter#181292)
2026-01-23 [email protected] [ Tool ] Fix `update-packages` failing due to mismatched dependencies between flutter_tools and the framework (flutter/flutter#181335)
2026-01-23 [email protected] [Impeller] Make dynamically created shader metadata for runtime effects consistent with metadata for built-in shaders (flutter/flutter#181201)
2026-01-23 [email protected] Broaden the applicability of `Color` fix_data rules from flutter/painting.dart (flutter/flutter#181093)
2026-01-23 [email protected] Fixes macOS App.framework not being codesigned or find framework (flutter/flutter#181348)
2026-01-22 [email protected] Roll Fuchsia GN SDK from NAEC5tfgSl8g94nwp... to JLBh4Z9PKsjIJcqDU... (flutter/flutter#181139)
2026-01-22 [email protected] Roll Dart SDK from ab4640ea82e9 to 806f04638561 (2 revisions) (flutter/flutter#181347)
2026-01-22 [email protected] Add ExpansibleController.toggle method. (flutter/flutter#181320)
2026-01-22 [email protected] Fixes Typo in codebase (flutter/flutter#181256)
2026-01-22 [email protected] Roll Skia from 4766615bcc96 to 3e86f377d300 (3 revisions) (flutter/flutter#181346)
2026-01-22 [email protected] Make sure that a Hero doesn't crash in 0x0 environment (flutter/flutter#180954)
2026-01-22 [email protected] Reland "Fix capitalization of the path to FlutterWindowControllerTest.mm in the macOS platform build script" (flutter/flutter#181200)
2026-01-22 [email protected] Roll Skia from 6e9746be8c4a to 4766615bcc96 (3 revisions) (flutter/flutter#181331)
2026-01-22 [email protected] Fix remove material import textfield (flutter/flutter#181254)
2026-01-22 [email protected] Add FlutterFramework as an Xcode SwiftPM local package override (flutter/flutter#179512)
2026-01-22 [email protected] Roll Dart SDK from 7bd4c68b625c to ab4640ea82e9 (1 revision) (flutter/flutter#181324)
2026-01-22 [email protected] Roll Packages from d80c60e to 9010299 (9 revisions) (flutter/flutter#181323)
2026-01-22 [email protected] Roll Dart SDK from 2d53a77adc5d to 7bd4c68b625c (2 revisions) (flutter/flutter#181316)
2026-01-22 [email protected] Roll Skia from 3f6949bc5780 to 6e9746be8c4a (2 revisions) (flutter/flutter#181311)
2026-01-22 [email protected] Roll Skia from ef6efc358b4a to 3f6949bc5780 (2 revisions) (flutter/flutter#181307)
2026-01-22 [email protected] Roll Dart SDK from 5d7c8faf2e41 to 2d53a77adc5d (1 revision) (flutter/flutter#181305)
2026-01-22 [email protected] [Material] update hourFormat to use Dart 3 switch expression (flutter/flutter#181041)
2026-01-22 [email protected] Use null-aware elements in cupertino/nav_bar.dart (flutter/flutter#181237)
2026-01-22 [email protected] Roll Fuchsia Linux SDK from b2KIEXVAlEqImQ9VO... to b4cLyhuxciUC-4zCJ... (flutter/flutter#181297)
2026-01-22 [email protected] Roll pub packages (flutter/flutter#181295)
2026-01-22 [email protected] Enables fragment shader test for impeller (fixes mat2 on vulkan) (flutter/flutter#181013)
2026-01-21 [email protected] Roll Dart SDK from 366200db1aa1 to 5d7c8faf2e41 (4 revisions) (flutter/flutter#181290)
2026-01-21 [email protected] Roll Skia from b5ec89e31f59 to ef6efc358b4a (19 revisions) (flutter/flutter#181289)
2026-01-21 [email protected] fix description for semantics finders (flutter/flutter#181214)
2026-01-21 [email protected] Make sure that an Icon doesn't crash in 0x0 environment (flutter/flutter#181021)
2026-01-21 [email protected] Make sure that a GridPaper doesn't crash in 0x0 environment (flutter/flutter#180906)
2026-01-21 [email protected] Bring Linux coverage out of bringup (flutter/flutter#181280)
...
@loic-sharma

Copy link
Copy Markdown
Member

This is awesome!!!! Thank you @b-luk \o/

flutter-zl pushed a commit to flutter-zl/flutter that referenced this pull request Feb 10, 2026
…ting.dart (flutter#181093)

See the conversation at
dart-lang/sdk#59764 (comment)
for more context.

Prior to this, these `Color` fix_data rules would only be visible to
users that explicitly import `package: flutter/painting.dart`. This PR
broadens the applicability of these rules so they are visible for users
that import `dart:ui`, or import any one of the `flutter/` packages that
expose `Color`.

#### Enabling `Color` fix_data fixes for `dart:ui`:
- Adds a `fix_data.yaml` file for `'dart:ui'` fixes to
`engine/src/flutter/lib/ui/`. This contains `Color` fixes copied from
`packages/flutter/lib/fix_data/fix_painting.yaml`.
- Typically `fix_data` files go in a Dart package's `lib/` directory.
But `dart:ui` is not a standard Dart package and doesn't have a typical
`lib` directory. This directory is the closest thing to a `lib`
directory for the `dart:ui` package that I can find. It contains the
Dart code that implements the `dart:ui` package.
- The actual Dart package for `dart:ui` is generated by
`engine/src/flutter/sky/packages/sky_engine/BUILD.gn` with the package
name `sky_engine`. I updated the build rule to copy the new
`fix_data.yaml` file into the generated `sky_engine/lib/` directory.

#### Enabling `Color` fix_data fixes for `package:flutter/` libraries:
- The `Color` fixes from
`packages/flutter/lib/fix_data/fix_painting.yaml` are remove, and copied
to over to a new `packages/flutter/lib/fix_data/fix_dart_ui.yaml` file.
- This fix_data file specifies all the `flutter/` libraries which export
`Color`. With this change, importing any of these libraries will surface
the `Color` fixes, rather than only surfacing the fixes only when
`package:flutter/painting.dart` is specifically imported.

#### Other related changes
- Updates some entries in `fix_cupertino.yaml` and `fix_material.yaml`
which used the old `Color.withOpacity` method.
- Updates existing flutter package `test_fixes` tests.
- The color tests from the `painting` `test_fixes` test are moved to a
new `dart_ui` test. Note that this only runs the test with only one of
the `flutter/` libraries specified in `fix_dart_ui.yaml`
(`animation.dart`). Ideally I think we should run this test while
independently importing each one of the `flutter/` libraries specified
in `fix_dart_ui.yaml`. But AFAICT there's no easy way to do this without
creating a lot of duplicate code.
- There is no `fix_data` test for `dart:ui`. Because this isn't a
standard Dart library, I don't think there's an easy way to test its
`fix_data.yaml` in a similar way to the `flutter/` library fixes.


Somewhat fixes flutter#180933 (makes the fixes more broadly available).
Somewhat addresses
dart-lang/sdk#59764 (comment)
(establishes a way to use `fix_data.yaml` files for `dart:X` libraries).

## 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].

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

c: tech-debt Technical debt, code quality, testing, etc. engine flutter/engine related. See also e: labels. f: cupertino flutter/packages/flutter/cupertino repository f: material design flutter/packages/flutter/material repository. framework flutter/packages/flutter repository. See also f: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add dart fix for withOpacity deprecation to engine

4 participants