Skip to content

Commit f736035

Browse files
gspencergoogvictorsanni
authored andcommitted
Fix ColorScheme example and tests (flutter#150018)
## Description This fixes the `ColorScheme` example to actually work. The test had wrapped the app in an additional `MaterialApp`, which allowed the tests to work, but the real problem was using a `context` that was outside the `MaterialApp` to open the bottom sheet, which caused an exception when you actually try to run it interactively. This fixes the example and the test. ## Tests - Fixed the test to not artificially add a second `MaterialApp`.
1 parent 6c85a4e commit f736035

File tree

2 files changed

+65
-37
lines changed

2 files changed

+65
-37
lines changed

examples/api/lib/material/color_scheme/color_scheme.0.dart

+61-33
Original file line numberDiff line numberDiff line change
@@ -40,26 +40,17 @@ class _ColorSchemeExampleState extends State<ColorSchemeExample> {
4040
seedColor: selectedColor,
4141
brightness: selectedBrightness,
4242
contrastLevel: selectedContrast,
43-
)
43+
),
4444
),
4545
home: Scaffold(
4646
appBar: AppBar(
4747
title: const Text('ColorScheme'),
4848
actions: <Widget>[
49-
IconButton(
50-
icon: const Icon(Icons.settings),
51-
onPressed: () {
52-
showModalBottomSheet<void>(
53-
barrierColor: Colors.transparent,
54-
context: context,
55-
builder: (BuildContext context) => Settings(
56-
selectedColor: selectedColor,
57-
selectedBrightness: selectedBrightness,
58-
selectedContrast: selectedContrast,
59-
updateTheme: updateTheme
60-
)
61-
);
62-
},
49+
SettingsButton(
50+
selectedColor: selectedColor,
51+
selectedBrightness: selectedBrightness,
52+
selectedContrast: selectedContrast,
53+
updateTheme: updateTheme,
6354
),
6455
],
6556
),
@@ -118,7 +109,8 @@ class _SettingsState extends State<Settings> {
118109
@override
119110
Widget build(BuildContext context) {
120111
return Theme(
121-
data: Theme.of(context).copyWith(colorScheme: ColorScheme.fromSeed(
112+
data: Theme.of(context).copyWith(
113+
colorScheme: ColorScheme.fromSeed(
122114
seedColor: selectedColor,
123115
contrastLevel: selectedContrast,
124116
brightness: selectedBrightness,
@@ -139,31 +131,31 @@ class _SettingsState extends State<Settings> {
139131
setState(() {
140132
selectedBrightness = value ? Brightness.light : Brightness.dark;
141133
});
142-
widget.updateTheme.call(selectedBrightness, selectedColor, selectedContrast);
134+
widget.updateTheme(selectedBrightness, selectedColor, selectedContrast);
143135
},
144136
)
145137
],
146138
),
147-
Wrap(
148-
crossAxisAlignment: WrapCrossAlignment.center,
149-
children: <Widget>[
150-
const Text('Seed color: '),
151-
...List<Widget>.generate(ColorSeed.values.length, (int index) {
139+
Wrap(crossAxisAlignment: WrapCrossAlignment.center, children: <Widget>[
140+
const Text('Seed color: '),
141+
...List<Widget>.generate(
142+
ColorSeed.values.length,
143+
(int index) {
152144
final Color itemColor = ColorSeed.values[index].color;
153145
return IconButton(
154146
icon: selectedColor == ColorSeed.values[index].color
155-
? Icon(Icons.circle, color: itemColor)
156-
: Icon(Icons.circle_outlined, color: itemColor),
147+
? Icon(Icons.circle, color: itemColor)
148+
: Icon(Icons.circle_outlined, color: itemColor),
157149
onPressed: () {
158150
setState(() {
159151
selectedColor = itemColor;
160152
});
161-
widget.updateTheme.call(selectedBrightness, selectedColor, selectedContrast);
153+
widget.updateTheme(selectedBrightness, selectedColor, selectedContrast);
162154
},
163155
);
164-
}),
165-
]
166-
),
156+
},
157+
),
158+
]),
167159
Row(
168160
children: <Widget>[
169161
const Text('Contrast level: '),
@@ -177,7 +169,7 @@ class _SettingsState extends State<Settings> {
177169
setState(() {
178170
selectedContrast = value;
179171
});
180-
widget.updateTheme.call(selectedBrightness, selectedColor, selectedContrast);
172+
widget.updateTheme(selectedBrightness, selectedColor, selectedContrast);
181173
},
182174
),
183175
),
@@ -230,7 +222,7 @@ class ColorSchemeVariantColumn extends StatelessWidget {
230222
),
231223
),
232224
],
233-
)
225+
),
234226
);
235227
}
236228
}
@@ -418,11 +410,47 @@ enum ColorSeed {
418410
orange('Orange', Colors.orange),
419411
deepOrange('Deep Orange', Colors.deepOrange),
420412
pink('Pink', Colors.pink),
421-
brightBlue('Bright Blue', Color(0xFF0000FF)),
422-
brightGreen('Bright Green', Color(0xFF00FF00)),
423-
brightRed('Bright Red', Color(0xFFFF0000));
413+
brightBlue('Bright Blue', Color(0xFF0000FF)),
414+
brightGreen('Bright Green', Color(0xFF00FF00)),
415+
brightRed('Bright Red', Color(0xFFFF0000));
424416

425417
const ColorSeed(this.label, this.color);
426418
final String label;
427419
final Color color;
428420
}
421+
422+
class SettingsButton extends StatelessWidget {
423+
const SettingsButton({
424+
super.key,
425+
required this.updateTheme,
426+
required this.selectedBrightness,
427+
required this.selectedContrast,
428+
required this.selectedColor,
429+
});
430+
431+
final Brightness selectedBrightness;
432+
final double selectedContrast;
433+
final Color selectedColor;
434+
435+
final void Function(Brightness, Color, double) updateTheme;
436+
437+
@override
438+
Widget build(BuildContext context) {
439+
return IconButton(
440+
icon: const Icon(Icons.settings),
441+
onPressed: () {
442+
showModalBottomSheet<void>(
443+
barrierColor: Colors.transparent,
444+
context: context,
445+
builder: (BuildContext context) {
446+
return Settings(
447+
selectedColor: selectedColor,
448+
selectedBrightness: selectedBrightness,
449+
selectedContrast: selectedContrast,
450+
updateTheme: updateTheme);
451+
},
452+
);
453+
},
454+
);
455+
}
456+
}

examples/api/test/material/color_scheme/color_scheme.0_test.dart

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ import 'package:flutter_test/flutter_test.dart';
99
void main() {
1010
testWidgets('ColorScheme Smoke Test', (WidgetTester tester) async {
1111
await tester.pumpWidget(
12-
const MaterialApp(home: example.ColorSchemeExample()
13-
),
12+
const example.ColorSchemeExample(),
1413
);
1514
expect(find.text('tonalSpot (Default)'), findsOneWidget);
1615

@@ -19,7 +18,7 @@ void main() {
1918

2019
testWidgets('Change color seed', (WidgetTester tester) async {
2120
await tester.pumpWidget(
22-
const MaterialApp(home: example.ColorSchemeExample()),
21+
const example.ColorSchemeExample(),
2322
);
2423

2524
ColoredBox coloredBox() {
@@ -31,8 +30,9 @@ void main() {
3130
);
3231
}
3332
expect(coloredBox().color, const Color(0xff65558f));
34-
await tester.tap(find.byIcon(Icons.settings));
33+
await tester.tap(find.byType(example.SettingsButton));
3534
await tester.pumpAndSettle();
35+
expect(find.text('Settings'), findsOneWidget);
3636
await tester.tap(find.byType(IconButton).at(6));
3737
await tester.pumpAndSettle();
3838

0 commit comments

Comments
 (0)