Skip to content

Commit d880c33

Browse files
authored
Add outlineVariant and scrim colors to ColorScheme (#109071)
1 parent acac615 commit d880c33

File tree

2 files changed

+64
-1
lines changed

2 files changed

+64
-1
lines changed

packages/flutter/lib/src/material/color_scheme.dart

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import 'package:material_color_utilities/material_color_utilities.dart';
99
import 'colors.dart';
1010
import 'theme_data.dart';
1111

12-
/// A set of 25 colors based on the
12+
/// A set of 30 colors based on the
1313
/// [Material spec](https://m3.material.io/styles/color/the-color-system/color-roles)
1414
/// that can be used to configure the color properties of most components.
1515
///
@@ -100,7 +100,9 @@ class ColorScheme with Diagnosticable {
100100
Color? surfaceVariant,
101101
Color? onSurfaceVariant,
102102
Color? outline,
103+
Color? outlineVariant,
103104
Color? shadow,
105+
Color? scrim,
104106
Color? inverseSurface,
105107
Color? onInverseSurface,
106108
Color? inversePrimary,
@@ -139,7 +141,9 @@ class ColorScheme with Diagnosticable {
139141
_surfaceVariant = surfaceVariant,
140142
_onSurfaceVariant = onSurfaceVariant,
141143
_outline = outline,
144+
_outlineVariant = outlineVariant,
142145
_shadow = shadow,
146+
_scrim = scrim,
143147
_inverseSurface = inverseSurface,
144148
_onInverseSurface = onInverseSurface,
145149
_inversePrimary = inversePrimary,
@@ -189,6 +193,7 @@ class ColorScheme with Diagnosticable {
189193
Color? errorContainer,
190194
Color? onErrorContainer,
191195
Color? outline,
196+
Color? outlineVariant,
192197
Color? background,
193198
Color? onBackground,
194199
Color? surface,
@@ -199,6 +204,7 @@ class ColorScheme with Diagnosticable {
199204
Color? onInverseSurface,
200205
Color? inversePrimary,
201206
Color? shadow,
207+
Color? scrim,
202208
Color? surfaceTint,
203209
}) {
204210
final Scheme scheme;
@@ -228,6 +234,7 @@ class ColorScheme with Diagnosticable {
228234
errorContainer: errorContainer ?? Color(scheme.errorContainer),
229235
onErrorContainer: onErrorContainer ?? Color(scheme.onErrorContainer),
230236
outline: outline ?? Color(scheme.outline),
237+
outlineVariant: outlineVariant ?? Color(scheme.outlineVariant),
231238
background: background ?? Color(scheme.background),
232239
onBackground: onBackground ?? Color(scheme.onBackground),
233240
surface: surface ?? Color(scheme.surface),
@@ -238,6 +245,7 @@ class ColorScheme with Diagnosticable {
238245
onInverseSurface: onInverseSurface ?? Color(scheme.inverseOnSurface),
239246
inversePrimary: inversePrimary ?? Color(scheme.inversePrimary),
240247
shadow: shadow ?? Color(scheme.shadow),
248+
scrim: scrim ?? Color(scheme.scrim),
241249
surfaceTint: surfaceTint ?? Color(scheme.primary),
242250
brightness: brightness,
243251
);
@@ -270,7 +278,9 @@ class ColorScheme with Diagnosticable {
270278
Color? surfaceVariant,
271279
Color? onSurfaceVariant,
272280
Color? outline,
281+
Color? outlineVariant,
273282
Color? shadow,
283+
Color? scrim,
274284
Color? inverseSurface,
275285
Color? onInverseSurface,
276286
Color? inversePrimary,
@@ -309,7 +319,9 @@ class ColorScheme with Diagnosticable {
309319
_surfaceVariant = surfaceVariant,
310320
_onSurfaceVariant = onSurfaceVariant,
311321
_outline = outline,
322+
_outlineVariant = outlineVariant,
312323
_shadow = shadow,
324+
_scrim = scrim,
313325
_inverseSurface = inverseSurface,
314326
_onInverseSurface = onInverseSurface,
315327
_inversePrimary = inversePrimary,
@@ -344,7 +356,9 @@ class ColorScheme with Diagnosticable {
344356
Color? surfaceVariant,
345357
Color? onSurfaceVariant,
346358
Color? outline,
359+
Color? outlineVariant,
347360
Color? shadow,
361+
Color? scrim,
348362
Color? inverseSurface,
349363
Color? onInverseSurface,
350364
Color? inversePrimary,
@@ -383,7 +397,9 @@ class ColorScheme with Diagnosticable {
383397
_surfaceVariant = surfaceVariant,
384398
_onSurfaceVariant = onSurfaceVariant,
385399
_outline = outline,
400+
_outlineVariant = outlineVariant,
386401
_shadow = shadow,
402+
_scrim = scrim,
387403
_inverseSurface = inverseSurface,
388404
_onInverseSurface = onInverseSurface,
389405
_inversePrimary = inversePrimary,
@@ -418,7 +434,9 @@ class ColorScheme with Diagnosticable {
418434
Color? surfaceVariant,
419435
Color? onSurfaceVariant,
420436
Color? outline,
437+
Color? outlineVariant,
421438
Color? shadow,
439+
Color? scrim,
422440
Color? inverseSurface,
423441
Color? onInverseSurface,
424442
Color? inversePrimary,
@@ -457,7 +475,9 @@ class ColorScheme with Diagnosticable {
457475
_surfaceVariant = surfaceVariant,
458476
_onSurfaceVariant = onSurfaceVariant,
459477
_outline = outline,
478+
_outlineVariant = outlineVariant,
460479
_shadow = shadow,
480+
_scrim = scrim,
461481
_inverseSurface = inverseSurface,
462482
_onInverseSurface = onInverseSurface,
463483
_inversePrimary = inversePrimary,
@@ -492,7 +512,9 @@ class ColorScheme with Diagnosticable {
492512
Color? surfaceVariant,
493513
Color? onSurfaceVariant,
494514
Color? outline,
515+
Color? outlineVariant,
495516
Color? shadow,
517+
Color? scrim,
496518
Color? inverseSurface,
497519
Color? onInverseSurface,
498520
Color? inversePrimary,
@@ -531,7 +553,9 @@ class ColorScheme with Diagnosticable {
531553
_surfaceVariant = surfaceVariant,
532554
_onSurfaceVariant = onSurfaceVariant,
533555
_outline = outline,
556+
_outlineVariant = outlineVariant,
534557
_shadow = shadow,
558+
_scrim = scrim,
535559
_inverseSurface = inverseSurface,
536560
_onInverseSurface = onInverseSurface,
537561
_inversePrimary = inversePrimary,
@@ -718,10 +742,19 @@ class ColorScheme with Diagnosticable {
718742
/// A utility color that creates boundaries and emphasis to improve usability.
719743
Color get outline => _outline ?? onBackground;
720744

745+
final Color? _outlineVariant;
746+
/// A utility color that creates boundaries for decorative elements when a
747+
/// 3:1 contrast isn’t required, such as for dividers or decorative elements.
748+
Color get outlineVariant => _outlineVariant ?? onBackground;
749+
721750
final Color? _shadow;
722751
/// A color use to paint the drop shadows of elevated components.
723752
Color get shadow => _shadow ?? const Color(0xff000000);
724753

754+
final Color? _scrim;
755+
/// A color use to paint the scrim around of modal components.
756+
Color get scrim => _scrim ?? const Color(0xff000000);
757+
725758
final Color? _inverseSurface;
726759
/// A surface color used for displaying the reverse of what’s seen in the
727760
/// surrounding UI, for example in a SnackBar to bring attention to
@@ -790,7 +823,9 @@ class ColorScheme with Diagnosticable {
790823
Color? surfaceVariant,
791824
Color? onSurfaceVariant,
792825
Color? outline,
826+
Color? outlineVariant,
793827
Color? shadow,
828+
Color? scrim,
794829
Color? inverseSurface,
795830
Color? onInverseSurface,
796831
Color? inversePrimary,
@@ -831,7 +866,9 @@ class ColorScheme with Diagnosticable {
831866
surfaceVariant : surfaceVariant ?? this.surfaceVariant,
832867
onSurfaceVariant : onSurfaceVariant ?? this.onSurfaceVariant,
833868
outline : outline ?? this.outline,
869+
outlineVariant : outlineVariant ?? this.outlineVariant,
834870
shadow : shadow ?? this.shadow,
871+
scrim : scrim ?? this.scrim,
835872
inverseSurface : inverseSurface ?? this.inverseSurface,
836873
onInverseSurface : onInverseSurface ?? this.onInverseSurface,
837874
inversePrimary : inversePrimary ?? this.inversePrimary,
@@ -870,7 +907,9 @@ class ColorScheme with Diagnosticable {
870907
surfaceVariant: Color.lerp(a.surfaceVariant, b.surfaceVariant, t),
871908
onSurfaceVariant: Color.lerp(a.onSurfaceVariant, b.onSurfaceVariant, t),
872909
outline: Color.lerp(a.outline, b.outline, t),
910+
outlineVariant: Color.lerp(a.outlineVariant, b.outlineVariant, t),
873911
shadow: Color.lerp(a.shadow, b.shadow, t),
912+
scrim: Color.lerp(a.scrim, b.scrim, t),
874913
inverseSurface: Color.lerp(a.inverseSurface, b.inverseSurface, t),
875914
onInverseSurface: Color.lerp(a.onInverseSurface, b.onInverseSurface, t),
876915
inversePrimary: Color.lerp(a.inversePrimary, b.inversePrimary, t),
@@ -913,7 +952,9 @@ class ColorScheme with Diagnosticable {
913952
&& other.surfaceVariant == surfaceVariant
914953
&& other.onSurfaceVariant == onSurfaceVariant
915954
&& other.outline == outline
955+
&& other.outlineVariant == outlineVariant
916956
&& other.shadow == shadow
957+
&& other.scrim == scrim
917958
&& other.inverseSurface == inverseSurface
918959
&& other.onInverseSurface == onInverseSurface
919960
&& other.inversePrimary == inversePrimary
@@ -949,7 +990,9 @@ class ColorScheme with Diagnosticable {
949990
surfaceVariant,
950991
onSurfaceVariant,
951992
outline,
993+
outlineVariant,
952994
shadow,
995+
scrim,
953996
inverseSurface,
954997
onInverseSurface,
955998
inversePrimary,
@@ -987,7 +1030,9 @@ class ColorScheme with Diagnosticable {
9871030
properties.add(ColorProperty('surfaceVariant', surfaceVariant, defaultValue: defaultScheme.surfaceVariant));
9881031
properties.add(ColorProperty('onSurfaceVariant', onSurfaceVariant, defaultValue: defaultScheme.onSurfaceVariant));
9891032
properties.add(ColorProperty('outline', outline, defaultValue: defaultScheme.outline));
1033+
properties.add(ColorProperty('outlineVariant', outlineVariant, defaultValue: defaultScheme.outlineVariant));
9901034
properties.add(ColorProperty('shadow', shadow, defaultValue: defaultScheme.shadow));
1035+
properties.add(ColorProperty('scrim', scrim, defaultValue: defaultScheme.scrim));
9911036
properties.add(ColorProperty('inverseSurface', inverseSurface, defaultValue: defaultScheme.inverseSurface));
9921037
properties.add(ColorProperty('onInverseSurface', onInverseSurface, defaultValue: defaultScheme.onInverseSurface));
9931038
properties.add(ColorProperty('inversePrimary', inversePrimary, defaultValue: defaultScheme.inversePrimary));

packages/flutter/test/material/color_scheme_test.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ void main() {
3636
expect(scheme.surfaceVariant, scheme.surface);
3737
expect(scheme.onSurfaceVariant, scheme.onSurface);
3838
expect(scheme.outline, scheme.onBackground);
39+
expect(scheme.outlineVariant, scheme.onBackground);
3940
expect(scheme.shadow, const Color(0xff000000));
41+
expect(scheme.scrim, const Color(0xff000000));
4042
expect(scheme.inverseSurface, scheme.onSurface);
4143
expect(scheme.onInverseSurface, scheme.surface);
4244
expect(scheme.inversePrimary, scheme.onPrimary);
@@ -76,7 +78,9 @@ void main() {
7678
expect(scheme.surfaceVariant, scheme.surface);
7779
expect(scheme.onSurfaceVariant, scheme.onSurface);
7880
expect(scheme.outline, scheme.onBackground);
81+
expect(scheme.outlineVariant, scheme.onBackground);
7982
expect(scheme.shadow, const Color(0xff000000));
83+
expect(scheme.scrim, const Color(0xff000000));
8084
expect(scheme.inverseSurface, scheme.onSurface);
8185
expect(scheme.onInverseSurface, scheme.surface);
8286
expect(scheme.inversePrimary, scheme.onPrimary);
@@ -116,7 +120,9 @@ void main() {
116120
expect(scheme.surfaceVariant, scheme.surface);
117121
expect(scheme.onSurfaceVariant, scheme.onSurface);
118122
expect(scheme.outline, scheme.onBackground);
123+
expect(scheme.outlineVariant, scheme.onBackground);
119124
expect(scheme.shadow, const Color(0xff000000));
125+
expect(scheme.scrim, const Color(0xff000000));
120126
expect(scheme.inverseSurface, scheme.onSurface);
121127
expect(scheme.onInverseSurface, scheme.surface);
122128
expect(scheme.inversePrimary, scheme.onPrimary);
@@ -156,7 +162,9 @@ void main() {
156162
expect(scheme.surfaceVariant, scheme.surface);
157163
expect(scheme.onSurfaceVariant, scheme.onSurface);
158164
expect(scheme.outline, scheme.onBackground);
165+
expect(scheme.outlineVariant, scheme.onBackground);
159166
expect(scheme.shadow, const Color(0xff000000));
167+
expect(scheme.scrim, const Color(0xff000000));
160168
expect(scheme.inverseSurface, scheme.onSurface);
161169
expect(scheme.onInverseSurface, scheme.surface);
162170
expect(scheme.inversePrimary, scheme.onPrimary);
@@ -185,6 +193,7 @@ void main() {
185193
expect(scheme.errorContainer, const Color(0xffffdad6));
186194
expect(scheme.onErrorContainer, const Color(0xff410002));
187195
expect(scheme.outline, const Color(0xff73777f));
196+
expect(scheme.outlineVariant, const Color(0xffc3c7cf));
188197
expect(scheme.background, const Color(0xfffdfcff));
189198
expect(scheme.onBackground, const Color(0xff1a1c1e));
190199
expect(scheme.surface, const Color(0xfffdfcff));
@@ -195,6 +204,7 @@ void main() {
195204
expect(scheme.onInverseSurface, const Color(0xfff1f0f4));
196205
expect(scheme.inversePrimary, const Color(0xff9ecaff));
197206
expect(scheme.shadow, const Color(0xff000000));
207+
expect(scheme.scrim, const Color(0xff000000));
198208
expect(scheme.surfaceTint, const Color(0xff0061a4));
199209
expect(scheme.brightness, Brightness.light);
200210
});
@@ -225,7 +235,9 @@ void main() {
225235
surfaceVariant: const Color(0x00000015),
226236
onSurfaceVariant: const Color(0x00000016),
227237
outline: const Color(0x00000017),
238+
outlineVariant: const Color(0x00000117),
228239
shadow: const Color(0x00000018),
240+
scrim: const Color(0x00000118),
229241
inverseSurface: const Color(0x00000019),
230242
onInverseSurface: const Color(0x0000001A),
231243
inversePrimary: const Color(0x0000001B),
@@ -259,7 +271,9 @@ void main() {
259271
expect(scheme.surfaceVariant, const Color(0x00000015));
260272
expect(scheme.onSurfaceVariant, const Color(0x00000016));
261273
expect(scheme.outline, const Color(0x00000017));
274+
expect(scheme.outlineVariant, const Color(0x00000117));
262275
expect(scheme.shadow, const Color(0x00000018));
276+
expect(scheme.scrim, const Color(0x00000118));
263277
expect(scheme.inverseSurface, const Color(0x00000019));
264278
expect(scheme.onInverseSurface, const Color(0x0000001A));
265279
expect(scheme.inversePrimary, const Color(0x0000001B));
@@ -288,6 +302,7 @@ void main() {
288302
expect(scheme.errorContainer, const Color(0xff93000a));
289303
expect(scheme.onErrorContainer, const Color(0xffffb4ab));
290304
expect(scheme.outline, const Color(0xff8d9199));
305+
expect(scheme.outlineVariant, const Color(0xff43474e));
291306
expect(scheme.background, const Color(0xff1a1c1e));
292307
expect(scheme.onBackground, const Color(0xffe2e2e6));
293308
expect(scheme.surface, const Color(0xff1a1c1e));
@@ -298,6 +313,7 @@ void main() {
298313
expect(scheme.onInverseSurface, const Color(0xff2f3033));
299314
expect(scheme.inversePrimary, const Color(0xff0061a4));
300315
expect(scheme.shadow, const Color(0xff000000));
316+
expect(scheme.scrim, const Color(0xff000000));
301317
expect(scheme.surfaceTint, const Color(0xff9ecaff));
302318
expect(scheme.brightness, Brightness.dark);
303319
});
@@ -327,6 +343,7 @@ void main() {
327343
expect(scheme.errorContainer, baseScheme.errorContainer);
328344
expect(scheme.onErrorContainer, baseScheme.onErrorContainer);
329345
expect(scheme.outline, baseScheme.outline);
346+
expect(scheme.outlineVariant, baseScheme.outlineVariant);
330347
expect(scheme.background, baseScheme.background);
331348
expect(scheme.onBackground, baseScheme.onBackground);
332349
expect(scheme.surface, baseScheme.surface);
@@ -337,6 +354,7 @@ void main() {
337354
expect(scheme.onInverseSurface, baseScheme.onInverseSurface);
338355
expect(scheme.inversePrimary, baseScheme.inversePrimary);
339356
expect(scheme.shadow, baseScheme.shadow);
357+
expect(scheme.scrim, baseScheme.shadow);
340358
expect(scheme.surfaceTint, baseScheme.surfaceTint);
341359
expect(scheme.brightness, baseScheme.brightness);
342360
});

0 commit comments

Comments
 (0)