Repository navigation
[material_ui] Add contrastLevel for M3 ColorScheme - #12743
Conversation
There was a problem hiding this comment.
Code Review
This pull request adds support for standard, medium, and high contrast Material 3 color scheme baselines by introducing a contrastLevel parameter to ThemeData and generating the corresponding default color schemes. It also adds a ContrastLevel class with predefined contrast values, updates the default generation tools, and includes tests for the new contrast levels. A review comment notes that while contrastLevel is added to the ThemeData constructor, it is not declared as a field on ThemeData, which prevents public access, breaks copying via copyWith, and excludes it from equality, hashing, and debugging properties.
| contrastLevel == null || (contrastLevel >= -1.0 && contrastLevel <= 1.0), | ||
| 'contrastLevel must be between -1.0 and 1.0 inclusive.', | ||
| ); | ||
| contrastLevel ??= ContrastLevel.standard; |
There was a problem hiding this comment.
looking at this factory, do you know why we assign default value here instead of in the parameter list directly like
factory ThemeData({
double contrastLevel = ContrastLevel.standard,
});There was a problem hiding this comment.
I traced this back through ThemeData history. Since the ThemeData/ThemeData.raw split was introduced, the public factory has treated its parameters as optional inputs and resolved their effective defaults in the implementation before constructing ThemeData.raw. For consistency with that existing ThemeData convention, I kept contrastLevel nullable and resolved ContrastLevel.standard in the factory body. I couldn’t find a formal style rule requiring this, though.
There was a problem hiding this comment.
we should prefer parameter with default value if possible as that makes the parameter non-nullable. but that can be a separate pr
fdcde10 to
a04411b
Compare
chunhtai
left a comment
There was a problem hiding this comment.
LGTM, just a minor comment
a04411b to
b62b641
Compare
d12d5cf to
48b3179
Compare
Roll Packages from c2b58e1 to 431ea69 (56 revisions) flutter/packages@c2b58e1...431ea69 2026-09-24 [email protected] [cross_file] Updates cross_file to a package separated federated plugin (flutter/packages#11010) 2026-09-23 [email protected] [material_ui] Remove static access of `copyWith` from `dart fix` golden tests for `ThemeData/TextTheme` (flutter/packages#12994) 2026-09-23 [email protected] [camera_avfoundation] Replace deprecated high-resolution capture APIs (flutter/packages#12372) 2026-09-23 [email protected] [pigeon] update nullish checks to use new isNullish method (flutter/packages#12985) 2026-09-23 [email protected] [ci] Assign batch release PR approver as reviewer on sync-back PR (flutter/packages#12976) 2026-09-23 [email protected] [image_picker] Fix scaling 10-bit images (flutter/packages#12557) 2026-09-23 [email protected] [material_ui] Improve Autocomplete, DrawerHeader, and Tooltip accessibility (flutter/packages#12918) 2026-09-23 [email protected] [google_fonts] Decouple GoogleFontsLite for full tree-shaking and add full feature parity (flutter/packages#12830) 2026-09-23 [email protected] [file_selector] Ignore flakey `file_selector_android` tests (flutter/packages#12992) 2026-09-23 [email protected] [CI] Remove bringup from `Mac_arm64 build_all_packages` targets (flutter/packages#12978) 2026-09-22 [email protected] [material_ui] Unskip 5 passing web tests in bottom_app_bar_test and text_field_test (flutter/packages#12983) 2026-09-22 [email protected] [cupertino_ui] Unskip 5 passing web tests in adaptive_text_selection_toolbar_test and text_field_test (flutter/packages#12984) 2026-09-22 [email protected] [go_router] Fix ShellRoute chrome dropped from semantics tree by ModalBarrier (flutter/packages#12353) 2026-09-22 [email protected] [material_ui] Add contrastLevel for M3 ColorScheme (flutter/packages#12743) 2026-09-22 [email protected] [go_router] Preserve nested pushes during config updates (flutter/packages#12611) 2026-09-22 [email protected] [material_ui] Migrate M3 Chip template to use new gen_defaults (flutter/packages#12847) 2026-09-22 [email protected] [material_ui] Fix LocalHistoryEntry leak when double tapping Drawer scrim (flutter/packages#12552) 2026-09-22 [email protected] Update suggested reviewers (flutter/packages#12974) 2026-09-22 [email protected] Sync release-material_ui-1.4.0 to main (flutter/packages#12966) 2026-09-22 [email protected] Sync release-cupertino_ui-1.1.1 to main (flutter/packages#12965) 2026-09-21 [email protected] [ci] Update repo for 3.47 stable release (flutter/packages#12959) 2026-09-21 [email protected] Manual roll Flutter from 27fec0e to 4fcd90b (1 revision) (flutter/packages#12904) 2026-09-21 [email protected] Revert "[go_router_builder] Migrate to material_ui" (flutter/packages#12962) 2026-09-21 [email protected] [material_ui] Update `material_ui` tests to prevent them from failing when framework `TextStyle` changes (flutter/packages#12728) 2026-09-21 [email protected] [go_router_builder] Migrate to material_ui (flutter/packages#12913) 2026-09-21 [email protected] [material_ui, cupertino_ui] Bump Flutter version from to 3.47 (flutter/packages#12944) 2026-09-21 [email protected] [cupertino_ui] Work around dart2wasm optional parameter inference bug in example checkbox tests (flutter/packages#12961) 2026-09-21 [email protected] [cupertino_ui] Work around dart2wasm optional parameter inference bug in checkbox_test.dart (flutter/packages#12956) 2026-09-21 [email protected] [google_sign_in] PR 3/4 Migrate ViewProvider and GID SDK wrappers from Objective-C to Swift (flutter/packages#12657) 2026-09-21 [email protected] [google_sign_in] PR 2/4 Migrate the plugin class from Objective-C to Swift. (flutter/packages#12655) 2026-09-20 [email protected] [cross_file_darwin] iOS/macOS implementation of `cross_file` (flutter/packages#12910) 2026-09-20 [email protected] [cross_file_web] Web implementation of `cross_file` (flutter/packages#12908) 2026-09-20 [email protected] [material_ui] Migrate M3 `InputChip` template to use new gen_defaults (flutter/packages#12850) 2026-09-20 [email protected] [material_ui] Migrate M3 Checkbox defaults to new gen_defaults (flutter/packages#12816) 2026-09-20 [email protected] [material_ui] Migrate M3 `FilterChip` template to use new gen_defaults (flutter/packages#12849) 2026-09-19 [email protected] [material_ui] Announce PopupMenuButton with a child as a button (flutter/packages#12585) 2026-09-19 [email protected] Roll Flutter (stable) from 9584c67 to 6a19cca (7 revisions) (flutter/packages#12950) 2026-09-18 [email protected] [material_ui] Reduce the `material_ui` non-wasm web test suite (flutter/packages#12763) 2026-09-18 [email protected] Replace `Mac_x64` builders with `Mac_arm64` ones (flutter/packages#12941) 2026-09-18 [email protected] [in_app_purchase_storekit] Use `_$SKPaymentDiscountWrapperToJson` (flutter/packages#12721) 2026-09-18 [email protected] [In_app _purchase] README excerpt examples and changelog (flutter/packages#12739) 2026-09-18 [email protected] [material_ui] Add alternative input method for `RangeSlider` in `NavigationMode.directional` (flutter/packages#12630) 2026-09-18 [email protected] [cross_file_android] Android implementation of `cross_file` (flutter/packages#12909) 2026-09-18 [email protected] [camera_platform_interface] Adds videoOutputPath support to startVideoRecording (flutter/packages#12667) 2026-09-17 [email protected] [cupertino_ui] Migrate a snippet in `CupertinoCheckbox`'s API doc to `{@example}` and add unit tests (flutter/packages#12180) 2026-09-17 [email protected] [material_ui] Default gen_defaults color helper prefix (flutter/packages#12848) ...
This PR is to port flutter#11801 ### Original PR Description Fixes flutter/flutter#184951 Fixes flutter/flutter#188409 This PR is to add medium- and high-contrast M3 ColorScheme baselines. I also added a `double? contrastLevel` to `ThemeData`. By default, `ThemeData()` shows standard M3 ColorScheme. To choose medium/high contrast, use ``` ThemeData( // brightness: Brightness.dark shows dark version of the baselines. contrastLevel: ContrastLevel.medium, // ContrastLevel.high ) ``` This change will not cause breaking changes because the standard-contrast m3 color scheme baseline stays the same. <img width="1181" height="526" alt="Screenshot 2026-07-31 at 4 35 36 PM" src="https://github.com/user-attachments/assets/0515a722-1455-49a0-9c5d-30ffaa844b7f" /> TODO: Add an example or update an existing example to reflect the new feature. ## Pre-Review Checklist
This PR is to port #11801
Original PR Description
Fixes flutter/flutter#184951
Fixes flutter/flutter#188409
This PR is to add medium- and high-contrast M3 ColorScheme baselines. I also added a
double? contrastLeveltoThemeData.By default,
ThemeData()shows standard M3 ColorScheme. To choose medium/high contrast, useThis change will not cause breaking changes because the standard-contrast m3 color scheme baseline stays the same.
TODO:
Add an example or update an existing example to reflect the new feature.
Pre-Review Checklist
[shared_preferences]///).