From 14a9c23020dec72ca044bb4aa989d254bab890c5 Mon Sep 17 00:00:00 2001 From: Mahan Date: Mon, 27 Feb 2023 22:34:46 +0000 Subject: [PATCH] Separate theme logic (#117818) Separate theme logic --- packages/flutter/lib/src/material/app.dart | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/flutter/lib/src/material/app.dart b/packages/flutter/lib/src/material/app.dart index ce49ccde87..d29764e8e4 100644 --- a/packages/flutter/lib/src/material/app.dart +++ b/packages/flutter/lib/src/material/app.dart @@ -910,15 +910,14 @@ class _MaterialAppState extends State { ); } - Widget _materialBuilder(BuildContext context, Widget? child) { + ThemeData _themeBuilder(BuildContext context) { + ThemeData? theme; // Resolve which theme to use based on brightness and high contrast. final ThemeMode mode = widget.themeMode ?? ThemeMode.system; final Brightness platformBrightness = MediaQuery.platformBrightnessOf(context); final bool useDarkTheme = mode == ThemeMode.dark || (mode == ThemeMode.system && platformBrightness == ui.Brightness.dark); final bool highContrast = MediaQuery.highContrastOf(context); - ThemeData? theme; - if (useDarkTheme && highContrast && widget.highContrastDarkTheme != null) { theme = widget.highContrastDarkTheme; } else if (useDarkTheme && widget.darkTheme != null) { @@ -927,6 +926,11 @@ class _MaterialAppState extends State { theme = widget.highContrastTheme; } theme ??= widget.theme ?? ThemeData.light(); + return theme; + } + + Widget _materialBuilder(BuildContext context, Widget? child) { + final ThemeData theme = _themeBuilder(context); final Color effectiveSelectionColor = theme.textSelectionTheme.selectionColor ?? theme.colorScheme.primary.withOpacity(0.40); final Color effectiveCursorColor = theme.textSelectionTheme.cursorColor ?? theme.colorScheme.primary;