Skip to content

Commit 6018b17

Browse files
Material Engcopybara-github
authored andcommitted
Deprecate Scheme in dart.
PiperOrigin-RevId: 584345609
1 parent 7cde6f9 commit 6018b17

File tree

3 files changed

+171
-96
lines changed

3 files changed

+171
-96
lines changed

dart/lib/scheme/scheme.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ import 'package:material_color_utilities/palettes/core_palette.dart';
1818

1919
/// Prefer [ColorScheme]. This class is the same concept as Flutter's
2020
/// ColorScheme class, inlined to ensure parity across languages.
21+
@Deprecated('The `Scheme` class is deprecated in favor of `DynamicScheme`.\n'
22+
'Please see https://github.com/material-foundation/material-color-utilities/blob/main/make_schemes.md'
23+
'for migration guidance.')
2124
class Scheme {
2225
final int primary;
2326
final int onPrimary;

dart/test/scheme_test.dart

Lines changed: 113 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -12,46 +12,69 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
import 'package:material_color_utilities/scheme/scheme.dart';
15+
import 'package:material_color_utilities/hct/hct.dart';
16+
import 'package:material_color_utilities/scheme/scheme_content.dart';
17+
import 'package:material_color_utilities/scheme/scheme_tonal_spot.dart';
1618
import 'package:test/test.dart';
1719

1820
import './utils/color_matcher.dart';
1921

2022
void main() {
2123
test('blue light scheme', () {
22-
final scheme = Scheme.light(0xff0000ff);
23-
expect(scheme.primary, isColor(0xff343dff));
24+
final scheme = SchemeTonalSpot(
25+
sourceColorHct: Hct.fromInt(0xff0000ff),
26+
isDark: false,
27+
contrastLevel: 0.0,
28+
);
29+
expect(scheme.primary, isColor(0xff555992));
2430
});
2531

2632
test('blue dark scheme', () {
27-
final scheme = Scheme.dark(0xff0000ff);
33+
final scheme = SchemeTonalSpot(
34+
sourceColorHct: Hct.fromInt(0xff0000ff),
35+
isDark: true,
36+
contrastLevel: 0.0,
37+
);
2838
expect(scheme.primary, isColor(0xffbec2ff));
2939
});
3040

3141
test('3rd party light scheme', () async {
32-
final scheme = Scheme.light(0xff6750a4);
33-
expect(scheme.primary, isColor(0xff6750a4));
42+
final scheme = SchemeTonalSpot(
43+
sourceColorHct: Hct.fromInt(0xff6750a4),
44+
isDark: false,
45+
contrastLevel: 0.0,
46+
);
47+
48+
expect(scheme.primary, isColor(0xff65558f));
3449
expect(scheme.secondary, isColor(0xff625b71));
3550
expect(scheme.tertiary, isColor(0xff7e5260));
36-
expect(scheme.surface, isColor(0xfffffbff));
37-
expect(scheme.onSurface, isColor(0xff1c1b1e));
51+
expect(scheme.surface, isColor(0xfffdf7ff));
52+
expect(scheme.onSurface, isColor(0xff1d1b20));
3853
});
3954

4055
test('3rd party dark scheme', () async {
41-
final scheme = Scheme.dark(0xff6750a4);
42-
expect(scheme.primary, isColor(0xffcfbcff));
56+
final scheme = SchemeTonalSpot(
57+
sourceColorHct: Hct.fromInt(0xff6750a4),
58+
isDark: true,
59+
contrastLevel: 0.0,
60+
);
61+
expect(scheme.primary, isColor(0xffcfbdfe));
4362
expect(scheme.secondary, isColor(0xffcbc2db));
4463
expect(scheme.tertiary, isColor(0xffefb8c8));
45-
expect(scheme.surface, isColor(0xff1c1b1e));
46-
expect(scheme.onSurface, isColor(0xffe6e1e6));
64+
expect(scheme.surface, isColor(0xff141218));
65+
expect(scheme.onSurface, isColor(0xffe6e0e9));
4766
});
4867

4968
test('light scheme from high chroma color', () async {
50-
final scheme = Scheme.light(0xfffa2bec);
51-
expect(scheme.primary, isColor(0xffab00a2));
69+
final scheme = SchemeTonalSpot(
70+
sourceColorHct: Hct.fromInt(0xfffa2bec),
71+
isDark: false,
72+
contrastLevel: 0.0,
73+
);
74+
expect(scheme.primary, isColor(0xff814c77));
5275
expect(scheme.onPrimary, isColor(0xffffffff));
5376
expect(scheme.primaryContainer, isColor(0xffffd7f3));
54-
expect(scheme.onPrimaryContainer, isColor(0xff390035));
77+
expect(scheme.onPrimaryContainer, isColor(0xff340830));
5578
expect(scheme.secondary, isColor(0xff6e5868));
5679
expect(scheme.onSecondary, isColor(0xffffffff));
5780
expect(scheme.secondaryContainer, isColor(0xfff8daee));
@@ -64,26 +87,30 @@ void main() {
6487
expect(scheme.onError, isColor(0xffffffff));
6588
expect(scheme.errorContainer, isColor(0xffffdad6));
6689
expect(scheme.onErrorContainer, isColor(0xff410002));
67-
expect(scheme.background, isColor(0xfffffbff));
68-
expect(scheme.onBackground, isColor(0xff1f1a1d));
69-
expect(scheme.surface, isColor(0xfffffbff));
70-
expect(scheme.onSurface, isColor(0xff1f1a1d));
90+
expect(scheme.background, isColor(0xfffff7f9));
91+
expect(scheme.onBackground, isColor(0xff201a1e));
92+
expect(scheme.surface, isColor(0xfffff7f9));
93+
expect(scheme.onSurface, isColor(0xff201a1e));
7194
expect(scheme.surfaceVariant, isColor(0xffeedee7));
7295
expect(scheme.onSurfaceVariant, isColor(0xff4e444b));
7396
expect(scheme.outline, isColor(0xff80747b));
7497
expect(scheme.outlineVariant, isColor(0xffd2c2cb));
7598
expect(scheme.shadow, isColor(0xff000000));
7699
expect(scheme.scrim, isColor(0xff000000));
77-
expect(scheme.inverseSurface, isColor(0xff342f32));
78-
expect(scheme.inverseOnSurface, isColor(0xfff8eef2));
79-
expect(scheme.inversePrimary, isColor(0xffffabee));
100+
expect(scheme.inverseSurface, isColor(0xff362e33));
101+
expect(scheme.inverseOnSurface, isColor(0xfffaedf3));
102+
expect(scheme.inversePrimary, isColor(0xfff3b2e4));
80103
});
81104

82105
test('dark scheme from high chroma color', () async {
83-
final scheme = Scheme.dark(0xfffa2bec);
84-
expect(scheme.primary, isColor(0xffffabee));
85-
expect(scheme.onPrimary, isColor(0xff5c0057));
86-
expect(scheme.primaryContainer, isColor(0xff83007b));
106+
final scheme = SchemeTonalSpot(
107+
sourceColorHct: Hct.fromInt(0xfffa2bec),
108+
isDark: true,
109+
contrastLevel: 0.0,
110+
);
111+
expect(scheme.primary, isColor(0xfff3b2e4));
112+
expect(scheme.onPrimary, isColor(0xff4d1f47));
113+
expect(scheme.primaryContainer, isColor(0xff67355e));
87114
expect(scheme.onPrimaryContainer, isColor(0xffffd7f3));
88115
expect(scheme.secondary, isColor(0xffdbbed1));
89116
expect(scheme.onSecondary, isColor(0xff3e2a39));
@@ -96,85 +123,95 @@ void main() {
96123
expect(scheme.error, isColor(0xffffb4ab));
97124
expect(scheme.onError, isColor(0xff690005));
98125
expect(scheme.errorContainer, isColor(0xff93000a));
99-
expect(scheme.onErrorContainer, isColor(0xffffb4ab));
100-
expect(scheme.background, isColor(0xff1f1a1d));
101-
expect(scheme.onBackground, isColor(0xffeae0e4));
102-
expect(scheme.surface, isColor(0xff1f1a1d));
103-
expect(scheme.onSurface, isColor(0xffeae0e4));
126+
expect(scheme.onErrorContainer, isColor(0xffffdad6));
127+
expect(scheme.background, isColor(0xff181216));
128+
expect(scheme.onBackground, isColor(0xffecdfe5));
129+
expect(scheme.surface, isColor(0xff181216));
130+
expect(scheme.onSurface, isColor(0xffecdfe5));
104131
expect(scheme.surfaceVariant, isColor(0xff4e444b));
105132
expect(scheme.onSurfaceVariant, isColor(0xffd2c2cb));
106133
expect(scheme.outline, isColor(0xff9a8d95));
107134
expect(scheme.outlineVariant, isColor(0xff4e444b));
108135
expect(scheme.shadow, isColor(0xff000000));
109136
expect(scheme.scrim, isColor(0xff000000));
110-
expect(scheme.inverseSurface, isColor(0xffeae0e4));
111-
expect(scheme.inverseOnSurface, isColor(0xff342f32));
112-
expect(scheme.inversePrimary, isColor(0xffab00a2));
137+
expect(scheme.inverseSurface, isColor(0xffecdfe5));
138+
expect(scheme.inverseOnSurface, isColor(0xff362e33));
139+
expect(scheme.inversePrimary, isColor(0xff814c77));
113140
});
114141

115142
test('light content scheme from high chroma color', () async {
116-
final scheme = Scheme.lightContent(0xfffa2bec);
117-
expect(scheme.primary, isColor(0xffab00a2));
143+
final scheme = SchemeContent(
144+
sourceColorHct: Hct.fromInt(0xfffa2bec),
145+
isDark: false,
146+
contrastLevel: 0.0,
147+
);
148+
149+
expect(scheme.primary, isColor(0xff92008b));
118150
expect(scheme.onPrimary, isColor(0xffffffff));
119-
expect(scheme.primaryContainer, isColor(0xffffd7f3));
120-
expect(scheme.onPrimaryContainer, isColor(0xff390035));
121-
expect(scheme.secondary, isColor(0xff7f4e75));
151+
expect(scheme.primaryContainer, isColor(0xffd100c6));
152+
expect(scheme.onPrimaryContainer, isColor(0xffffffff));
153+
expect(scheme.secondary, isColor(0xff9e2d93));
122154
expect(scheme.onSecondary, isColor(0xffffffff));
123-
expect(scheme.secondaryContainer, isColor(0xffffd7f3));
124-
expect(scheme.onSecondaryContainer, isColor(0xff330b2f));
125-
expect(scheme.tertiary, isColor(0xff9c4323));
155+
expect(scheme.secondaryContainer, isColor(0xffff83ec));
156+
expect(scheme.onSecondaryContainer, isColor(0xff4a0045));
157+
expect(scheme.tertiary, isColor(0xffa30326));
126158
expect(scheme.onTertiary, isColor(0xffffffff));
127-
expect(scheme.tertiaryContainer, isColor(0xffffdbd0));
128-
expect(scheme.onTertiaryContainer, isColor(0xff390c00));
159+
expect(scheme.tertiaryContainer, isColor(0xffd83546));
160+
expect(scheme.onTertiaryContainer, isColor(0xffffffff));
129161
expect(scheme.error, isColor(0xffba1a1a));
130162
expect(scheme.onError, isColor(0xffffffff));
131163
expect(scheme.errorContainer, isColor(0xffffdad6));
132164
expect(scheme.onErrorContainer, isColor(0xff410002));
133-
expect(scheme.background, isColor(0xfffffbff));
134-
expect(scheme.onBackground, isColor(0xff1f1a1d));
135-
expect(scheme.surface, isColor(0xfffffbff));
136-
expect(scheme.onSurface, isColor(0xff1f1a1d));
137-
expect(scheme.surfaceVariant, isColor(0xffeedee7));
138-
expect(scheme.onSurfaceVariant, isColor(0xff4e444b));
139-
expect(scheme.outline, isColor(0xff80747b));
140-
expect(scheme.outlineVariant, isColor(0xffd2c2cb));
165+
expect(scheme.background, isColor(0xfffff7f9));
166+
expect(scheme.onBackground, isColor(0xff251722));
167+
expect(scheme.surface, isColor(0xfffff7f9));
168+
expect(scheme.onSurface, isColor(0xff251722));
169+
expect(scheme.surfaceVariant, isColor(0xfff9daee));
170+
expect(scheme.onSurfaceVariant, isColor(0xff564050));
171+
expect(scheme.outline, isColor(0xff897081));
172+
expect(scheme.outlineVariant, isColor(0xffdcbed2));
141173
expect(scheme.shadow, isColor(0xff000000));
142174
expect(scheme.scrim, isColor(0xff000000));
143-
expect(scheme.inverseSurface, isColor(0xff342f32));
144-
expect(scheme.inverseOnSurface, isColor(0xfff8eef2));
175+
expect(scheme.inverseSurface, isColor(0xff3b2c37));
176+
expect(scheme.inverseOnSurface, isColor(0xffffebf6));
145177
expect(scheme.inversePrimary, isColor(0xffffabee));
146178
});
147179

148180
test('dark content scheme from high chroma color', () async {
149-
final scheme = Scheme.darkContent(0xfffa2bec);
181+
final scheme = SchemeContent(
182+
sourceColorHct: Hct.fromInt(0xfffa2bec),
183+
isDark: true,
184+
contrastLevel: 0.0,
185+
);
186+
150187
expect(scheme.primary, isColor(0xffffabee));
151188
expect(scheme.onPrimary, isColor(0xff5c0057));
152-
expect(scheme.primaryContainer, isColor(0xff83007b));
153-
expect(scheme.onPrimaryContainer, isColor(0xffffd7f3));
154-
expect(scheme.secondary, isColor(0xfff0b4e1));
155-
expect(scheme.onSecondary, isColor(0xff4b2145));
156-
expect(scheme.secondaryContainer, isColor(0xff64375c));
157-
expect(scheme.onSecondaryContainer, isColor(0xffffd7f3));
158-
expect(scheme.tertiary, isColor(0xffffb59c));
159-
expect(scheme.onTertiary, isColor(0xff5c1900));
160-
expect(scheme.tertiaryContainer, isColor(0xff7d2c0d));
161-
expect(scheme.onTertiaryContainer, isColor(0xffffdbd0));
189+
expect(scheme.primaryContainer, isColor(0xfffa2bec));
190+
expect(scheme.onPrimaryContainer, isColor(0xff000000));
191+
expect(scheme.secondary, isColor(0xffffabee));
192+
expect(scheme.onSecondary, isColor(0xff5c0057));
193+
expect(scheme.secondaryContainer, isColor(0xff840f7c));
194+
expect(scheme.onSecondaryContainer, isColor(0xffffd9f3));
195+
expect(scheme.tertiary, isColor(0xffffb3b2));
196+
expect(scheme.onTertiary, isColor(0xff680014));
197+
expect(scheme.tertiaryContainer, isColor(0xffff525f));
198+
expect(scheme.onTertiaryContainer, isColor(0xff000000));
162199
expect(scheme.error, isColor(0xffffb4ab));
163200
expect(scheme.onError, isColor(0xff690005));
164201
expect(scheme.errorContainer, isColor(0xff93000a));
165-
expect(scheme.onErrorContainer, isColor(0xffffb4ab));
166-
expect(scheme.background, isColor(0xff1f1a1d));
167-
expect(scheme.onBackground, isColor(0xffeae0e4));
168-
expect(scheme.surface, isColor(0xff1f1a1d));
169-
expect(scheme.onSurface, isColor(0xffeae0e4));
170-
expect(scheme.surfaceVariant, isColor(0xff4e444b));
171-
expect(scheme.onSurfaceVariant, isColor(0xffd2c2cb));
172-
expect(scheme.outline, isColor(0xff9a8d95));
173-
expect(scheme.outlineVariant, isColor(0xff4e444b));
202+
expect(scheme.onErrorContainer, isColor(0xffffdad6));
203+
expect(scheme.background, isColor(0xff1c0f19));
204+
expect(scheme.onBackground, isColor(0xfff4dceb));
205+
expect(scheme.surface, isColor(0xff1c0f19));
206+
expect(scheme.onSurface, isColor(0xfff4dceb));
207+
expect(scheme.surfaceVariant, isColor(0xff564050));
208+
expect(scheme.onSurfaceVariant, isColor(0xffdcbed2));
209+
expect(scheme.outline, isColor(0xffa4899b));
210+
expect(scheme.outlineVariant, isColor(0xff564050));
174211
expect(scheme.shadow, isColor(0xff000000));
175212
expect(scheme.scrim, isColor(0xff000000));
176-
expect(scheme.inverseSurface, isColor(0xffeae0e4));
177-
expect(scheme.inverseOnSurface, isColor(0xff342f32));
213+
expect(scheme.inverseSurface, isColor(0xfff4dceb));
214+
expect(scheme.inverseOnSurface, isColor(0xff3b2c37));
178215
expect(scheme.inversePrimary, isColor(0xffab00a2));
179216
});
180217
}

make_schemes.md

Lines changed: 55 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -49,46 +49,74 @@ contrast levels. The functionality of `Scheme` is fully replicated by
4949

5050
| Instead of … | Use … |
5151
| ---------------------------- | ----------------------------------- |
52-
| `Scheme.light(color)` | `SchemeTonalSpot(sourceColorHct: Hct.fromInt(color), isDark: false, contrastLevel: 0.0)` |
53-
| `Scheme.dark(color)` | `SchemeTonalSpot(sourceColorHct: Hct.fromInt(color), isDark: true, contrastLevel: 0.0)` |
54-
| `Scheme.lightContent(color)` | `SchemeContent(sourceColorHct: Hct.fromInt(color), isDark: false, contrastLevel: 0.0)` |
55-
| `Scheme.darkContent(color)` | `SchemeContent(sourceColorHct: Hct.fromInt(color), isDark: true, contrastLevel: 0.0)` |
52+
| `Scheme.light(color)` | `SchemeTonalSpot(sourceColorHct: |
53+
: : Hct.fromInt(color), isDark\: false, :
54+
: : contrastLevel\: 0.0)` :
55+
| `Scheme.dark(color)` | `SchemeTonalSpot(sourceColorHct: |
56+
: : Hct.fromInt(color), isDark\: true, :
57+
: : contrastLevel\: 0.0)` :
58+
| `Scheme.lightContent(color)` | `SchemeContent(sourceColorHct: |
59+
: : Hct.fromInt(color), isDark\: false, :
60+
: : contrastLevel\: 0.0)` :
61+
| `Scheme.darkContent(color)` | `SchemeContent(sourceColorHct: |
62+
: : Hct.fromInt(color), isDark\: true, :
63+
: : contrastLevel\: 0.0)` :
5664

5765
###### Java
5866

5967
| Instead of … | Use … |
6068
| ---------------------------- | --------------------------------------------- |
61-
| `Scheme.light(color)` | `new SchemeTonalSpot(Hct.fromInt(color), false, 0.0)` |
62-
| `Scheme.dark(color)` | `new SchemeTonalSpot(Hct.fromInt(color), true, 0.0)` |
63-
| `Scheme.lightContent(color)` | `new SchemeContent(Hct.fromInt(color), false, 0.0)` |
64-
| `Scheme.darkContent(color)` | `new SchemeContent(Hct.fromInt(color), true, 0.0)` |
69+
| `Scheme.light(color)` | `new SchemeTonalSpot(Hct.fromInt(color), |
70+
: : false, 0.0)` :
71+
| `Scheme.dark(color)` | `new SchemeTonalSpot(Hct.fromInt(color), |
72+
: : true, 0.0)` :
73+
| `Scheme.lightContent(color)` | `new SchemeContent(Hct.fromInt(color), false, |
74+
: : 0.0)` :
75+
| `Scheme.darkContent(color)` | `new SchemeContent(Hct.fromInt(color), true, |
76+
: : 0.0)` :
6577

6678
###### TypeScript
6779

6880
| Instead of … | Use … |
6981
| ---------------------------- | --------------------------------------------- |
70-
| `Scheme.light(color)` | `new SchemeTonalSpot(Hct.fromInt(color), false, 0.0)` |
71-
| `Scheme.dark(color)` | `new SchemeTonalSpot(Hct.fromInt(color), true, 0.0)` |
72-
| `Scheme.lightContent(color)` | `new SchemeContent(Hct.fromInt(color), false, 0.0)` |
73-
| `Scheme.darkContent(color)` | `new SchemeContent(Hct.fromInt(color), true, 0.0)` |
82+
| `Scheme.light(color)` | `new SchemeTonalSpot(Hct.fromInt(color), |
83+
: : false, 0.0)` :
84+
| `Scheme.dark(color)` | `new SchemeTonalSpot(Hct.fromInt(color), |
85+
: : true, 0.0)` :
86+
| `Scheme.lightContent(color)` | `new SchemeContent(Hct.fromInt(color), false, |
87+
: : 0.0)` :
88+
| `Scheme.darkContent(color)` | `new SchemeContent(Hct.fromInt(color), true, |
89+
: : 0.0)` :
7490

7591
###### C++
7692

7793
| Instead of … | Use … |
7894
| ---------------------------------------- | --------------------------------- |
79-
| `MaterialLightColorScheme(color)` | `SchemeTonalSpot(Hct(color), false, 0.0)` |
80-
| `MaterialDarkColorScheme(color)` | `SchemeTonalSpot(Hct(color), true, 0.0)` |
81-
| `MaterialLightContentColorScheme(color)` | `SchemeContent(Hct(color), false, 0.0)` |
82-
| `MaterialDarkContentColorScheme(color)` | `SchemeContent(Hct(color), true, 0.0)` |
95+
| `MaterialLightColorScheme(color)` | `SchemeTonalSpot(Hct(color), |
96+
: : false, 0.0)` :
97+
| `MaterialDarkColorScheme(color)` | `SchemeTonalSpot(Hct(color), |
98+
: : true, 0.0)` :
99+
| `MaterialLightContentColorScheme(color)` | `SchemeContent(Hct(color), false, |
100+
: : 0.0)` :
101+
| `MaterialDarkContentColorScheme(color)` | `SchemeContent(Hct(color), true, |
102+
: : 0.0)` :
83103

84104
###### Swift
85105

86106
| Instead of … | Use … |
87107
| ---------------------------- | ----------------------------------- |
88-
| `Scheme.light(color)` | `SchemeTonalSpot(sourceColorHct: Hct.fromInt(color), isDark: false, contrastLevel: 0.0)` |
89-
| `Scheme.dark(color)` | `SchemeTonalSpot(sourceColorHct: Hct.fromInt(color), isDark: true, contrastLevel: 0.0)` |
90-
| `Scheme.lightContent(color)` | `SchemeContent(sourceColorHct: Hct.fromInt(color), isDark: false, contrastLevel: 0.0)` |
91-
| `Scheme.darkContent(color)` | `SchemeContent(sourceColorHct: Hct.fromInt(color), isDark: true, contrastLevel: 0.0)` |
108+
| `Scheme.light(color)` | `SchemeTonalSpot(sourceColorHct: |
109+
: : Hct.fromInt(color), isDark\: false, :
110+
: : contrastLevel\: 0.0)` :
111+
| `Scheme.dark(color)` | `SchemeTonalSpot(sourceColorHct: |
112+
: : Hct.fromInt(color), isDark\: true, :
113+
: : contrastLevel\: 0.0)` :
114+
| `Scheme.lightContent(color)` | `SchemeContent(sourceColorHct: |
115+
: : Hct.fromInt(color), isDark\: false, :
116+
: : contrastLevel\: 0.0)` :
117+
| `Scheme.darkContent(color)` | `SchemeContent(sourceColorHct: |
118+
: : Hct.fromInt(color), isDark\: true, :
119+
: : contrastLevel\: 0.0)` :
92120

93121
</section>
94122

@@ -276,6 +304,13 @@ color from a given `scheme`.
276304

277305
###### Dart
278306

307+
```dart
308+
final argb = scheme.primary;
309+
final hct = scheme.getHct(MaterialDynamicColors.primary);
310+
```
311+
312+
Alternatively:
313+
279314
```dart
280315
final argb = MaterialDynamicColors.primary.getArgb(scheme);
281316
final hct = MaterialDynamicColors.primary.getHct(scheme);

0 commit comments

Comments
 (0)