Provide a helpful error message when ColorScheme.brightness
doesn't match ThemeData.brightness
(#137611)
fixes [Unexpected behaviour with ColorScheme.fromSeed and Brightness.dark](https://github.com/flutter/flutter/issues/127523)
This commit is contained in:
parent
aa3436db7a
commit
826bb0a809
@ -388,7 +388,12 @@ class ThemeData with Diagnosticable {
|
|||||||
: InkSplash.splashFactory;
|
: InkSplash.splashFactory;
|
||||||
|
|
||||||
// COLOR
|
// COLOR
|
||||||
assert(colorScheme?.brightness == null || brightness == null || colorScheme!.brightness == brightness);
|
assert(
|
||||||
|
colorScheme?.brightness == null || brightness == null || colorScheme!.brightness == brightness,
|
||||||
|
'ThemeData.brightness does not match ColorScheme.brightness. '
|
||||||
|
'Either override ColorScheme.brightness or ThemeData.brightness to '
|
||||||
|
'match the other.'
|
||||||
|
);
|
||||||
assert(colorSchemeSeed == null || colorScheme == null);
|
assert(colorSchemeSeed == null || colorScheme == null);
|
||||||
assert(colorSchemeSeed == null || primarySwatch == null);
|
assert(colorSchemeSeed == null || primarySwatch == null);
|
||||||
assert(colorSchemeSeed == null || primaryColor == null);
|
assert(colorSchemeSeed == null || primaryColor == null);
|
||||||
|
@ -1284,6 +1284,102 @@ void main() {
|
|||||||
// Ensure they are all there.
|
// Ensure they are all there.
|
||||||
expect(propertyNames, expectedPropertyNames);
|
expect(propertyNames, expectedPropertyNames);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testWidgetsWithLeakTracking(
|
||||||
|
'ThemeData.brightness not matching ColorScheme.brightness throws a helpful error message', (WidgetTester tester) async {
|
||||||
|
AssertionError? error;
|
||||||
|
|
||||||
|
// Test `ColorScheme.light()` and `ThemeData.brightness == Brightness.dark`.
|
||||||
|
try {
|
||||||
|
await tester.pumpWidget(
|
||||||
|
MaterialApp(
|
||||||
|
theme: ThemeData(
|
||||||
|
colorScheme: const ColorScheme.light(),
|
||||||
|
brightness: Brightness.dark,
|
||||||
|
),
|
||||||
|
home: const Placeholder(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} on AssertionError catch (e) {
|
||||||
|
error = e;
|
||||||
|
} finally {
|
||||||
|
expect(error, isNotNull);
|
||||||
|
expect(error?.message, contains(
|
||||||
|
'ThemeData.brightness does not match ColorScheme.brightness. '
|
||||||
|
'Either override ColorScheme.brightness or ThemeData.brightness to '
|
||||||
|
'match the other.'
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test `ColorScheme.dark()` and `ThemeData.brightness == Brightness.light`.
|
||||||
|
try {
|
||||||
|
await tester.pumpWidget(
|
||||||
|
MaterialApp(
|
||||||
|
theme: ThemeData(
|
||||||
|
colorScheme: const ColorScheme.dark(),
|
||||||
|
brightness: Brightness.light,
|
||||||
|
),
|
||||||
|
home: const Placeholder(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} on AssertionError catch (e) {
|
||||||
|
error = e;
|
||||||
|
} finally {
|
||||||
|
expect(error, isNotNull);
|
||||||
|
expect(error?.message, contains(
|
||||||
|
'ThemeData.brightness does not match ColorScheme.brightness. '
|
||||||
|
'Either override ColorScheme.brightness or ThemeData.brightness to '
|
||||||
|
'match the other.'
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test `ColorScheme.fromSeed()` and `ThemeData.brightness == Brightness.dark`.
|
||||||
|
try {
|
||||||
|
await tester.pumpWidget(
|
||||||
|
MaterialApp(
|
||||||
|
theme: ThemeData(
|
||||||
|
colorScheme: ColorScheme.fromSeed(seedColor: const Color(0xffff0000)),
|
||||||
|
brightness: Brightness.dark,
|
||||||
|
),
|
||||||
|
home: const Placeholder(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} on AssertionError catch (e) {
|
||||||
|
error = e;
|
||||||
|
} finally {
|
||||||
|
expect(error, isNotNull);
|
||||||
|
expect(error?.message, contains(
|
||||||
|
'ThemeData.brightness does not match ColorScheme.brightness. '
|
||||||
|
'Either override ColorScheme.brightness or ThemeData.brightness to '
|
||||||
|
'match the other.'
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test `ColorScheme.fromSeed()` using `Brightness.dark` and `ThemeData.brightness == Brightness.light`.
|
||||||
|
try {
|
||||||
|
await tester.pumpWidget(
|
||||||
|
MaterialApp(
|
||||||
|
theme: ThemeData(
|
||||||
|
colorScheme: ColorScheme.fromSeed(
|
||||||
|
seedColor: const Color(0xffff0000),
|
||||||
|
brightness: Brightness.dark,
|
||||||
|
),
|
||||||
|
brightness: Brightness.light,
|
||||||
|
),
|
||||||
|
home: const Placeholder(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} on AssertionError catch (e) {
|
||||||
|
error = e;
|
||||||
|
} finally {
|
||||||
|
expect(error, isNotNull);
|
||||||
|
expect(error?.message, contains(
|
||||||
|
'ThemeData.brightness does not match ColorScheme.brightness. '
|
||||||
|
'Either override ColorScheme.brightness or ThemeData.brightness to '
|
||||||
|
'match the other.'
|
||||||
|
));
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@immutable
|
@immutable
|
||||||
|
Loading…
x
Reference in New Issue
Block a user