From 643da4b7a44c4b3349a09a5d3dad0a38cc014ba0 Mon Sep 17 00:00:00 2001 From: Rami <2364772+rami-a@users.noreply.github.com> Date: Tue, 4 Aug 2020 11:32:36 -0400 Subject: [PATCH] Ensure dark theme is used when high contrast dark theme isn't provided (#62668) --- packages/flutter/lib/src/material/app.dart | 6 ++--- packages/flutter/test/material/app_test.dart | 28 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/packages/flutter/lib/src/material/app.dart b/packages/flutter/lib/src/material/app.dart index 96f7641c6a..b1f5db5df1 100644 --- a/packages/flutter/lib/src/material/app.dart +++ b/packages/flutter/lib/src/material/app.dart @@ -655,11 +655,11 @@ class _MaterialAppState extends State { final bool highContrast = MediaQuery.highContrastOf(context); ThemeData theme; - if (useDarkTheme && highContrast) { + if (useDarkTheme && highContrast && widget.highContrastDarkTheme != null) { theme = widget.highContrastDarkTheme; - } else if (useDarkTheme) { + } else if (useDarkTheme && widget.darkTheme != null) { theme = widget.darkTheme; - } else if (highContrast) { + } else if (highContrast && widget.highContrastTheme != null) { theme = widget.highContrastTheme; } theme ??= widget.theme ?? ThemeData.light(); diff --git a/packages/flutter/test/material/app_test.dart b/packages/flutter/test/material/app_test.dart index 7a1ac44dd1..afbe731cf7 100644 --- a/packages/flutter/test/material/app_test.dart +++ b/packages/flutter/test/material/app_test.dart @@ -812,6 +812,34 @@ void main() { tester.binding.window.accessibilityFeaturesTestValue = null; }); + testWidgets('MaterialApp uses dark theme when no high contrast dark theme is provided', (WidgetTester tester) async { + tester.binding.window.platformBrightnessTestValue = Brightness.dark; + tester.binding.window.accessibilityFeaturesTestValue = MockAccessibilityFeature(); + + ThemeData appliedTheme; + + await tester.pumpWidget( + MaterialApp( + theme: ThemeData( + primaryColor: Colors.lightBlue, + ), + darkTheme: ThemeData( + primaryColor: Colors.lightGreen, + ), + home: Builder( + builder: (BuildContext context) { + appliedTheme = Theme.of(context); + return const SizedBox(); + }, + ), + ), + ); + + expect(appliedTheme.primaryColor, Colors.lightGreen); + tester.binding.window.accessibilityFeaturesTestValue = null; + tester.binding.window.platformBrightnessTestValue = null; + }); + testWidgets('MaterialApp switches themes when the Window platformBrightness changes.', (WidgetTester tester) async { // Mock the Window to explicitly report a light platformBrightness. final TestWidgetsFlutterBinding binding = tester.binding;