From 95d864f235f693d639cd7700870282302a9cf553 Mon Sep 17 00:00:00 2001 From: Lance Johnstone Date: Wed, 31 Jan 2024 23:23:00 +1300 Subject: [PATCH 1/2] Add setting to control the casing of material3 text --- lib/src/platform_provider.dart | 7 +++++++ lib/src/platform_text.dart | 15 +++++++++++++++ lib/src/platform_theme.dart | 5 +++++ 3 files changed, 27 insertions(+) diff --git a/lib/src/platform_provider.dart b/lib/src/platform_provider.dart index fcec4075..e49a1909 100644 --- a/lib/src/platform_provider.dart +++ b/lib/src/platform_provider.dart @@ -152,12 +152,19 @@ class PlatformSettingsData { /// Set to true (wrapped) by default which could be a breaking change. If it is then set this value to false final bool wrapCupertinoAppBarMiddleWithMediaQuery; + /// With Material3 spec defining buttons text as being non ALL CAPS (see https://m3.material.io/components/buttons/overview#388f6096-c34d-4a22-8b1f-11ad69963f7c) + /// If this is set to true then using [PlatformText] with material3 style will default to sentence case and not ALL CAPS. Material 2 will continue to be ALL CAPS + /// If this is set to false then it will default to previous behavour of ALL CAPS. + /// Going forward [PlatformText] will likely be removed when the material3 property on ThemeData is removed and all material widgets will assume material3 style. + final bool matchMaterialCaseForPlatformText; + PlatformSettingsData({ this.iosUsesMaterialWidgets = false, this.iosUseZeroPaddingForAppbarPlatformIcon = false, this.legacyIosUsesMaterialWidgets = false, this.platformStyle = const PlatformStyleData(), this.wrapCupertinoAppBarMiddleWithMediaQuery = true, + this.matchMaterialCaseForPlatformText = true, }); } diff --git a/lib/src/platform_text.dart b/lib/src/platform_text.dart index e9e6e7d1..4c751d64 100644 --- a/lib/src/platform_text.dart +++ b/lib/src/platform_text.dart @@ -6,12 +6,27 @@ import 'dart:ui' as ui show TextHeightBehavior; +import 'package:flutter/material.dart' show Theme; import 'package:flutter/widgets.dart'; import 'platform.dart' show isMaterial; +import 'platform_provider.dart' show PlatformProvider; +import 'platform_theme.dart' show PlatformTheme; String formatData(BuildContext context, String data) { if (isMaterial(context)) { + final providerState = PlatformProvider.of(context); + final matchMaterialCaseForPlatformText = + providerState?.settings.matchMaterialCaseForPlatformText ?? true; + + final m3 = PlatformTheme.of(context)?.isMaterial3 ?? + Theme.of(context).useMaterial3; + + // If it material3 and we want to match the casing as defined for material3 then do not return ALL CAPS + if (m3 && matchMaterialCaseForPlatformText) { + return data; + } + return data.toUpperCase(); } return data; diff --git a/lib/src/platform_theme.dart b/lib/src/platform_theme.dart index 540ae6f6..adbdf6f7 100644 --- a/lib/src/platform_theme.dart +++ b/lib/src/platform_theme.dart @@ -118,6 +118,10 @@ class _PlatformThemeState extends State applyToBothDarkAndLightTheme: applyToBothDarkAndLightTheme); } + bool get isMaterial3 => + (isDark ? _materialDarkTheme : _materialLightTheme)?.useMaterial3 ?? + false; + void _setMaterialThemeType({ required bool? useMaterial3, bool applyToBothDarkAndLightTheme = false, @@ -167,6 +171,7 @@ class PlatformThemeState { set themeMode(ThemeMode? themeMode) => _parent.themeMode = themeMode; bool get isDark => _parent.isDark; + bool get isMaterial3 => _parent.isMaterial3; CupertinoThemeData? get cupertinoLightTheme => _parent._cupertinoLightTheme; CupertinoThemeData? get cupertinoDarkTheme => _parent._cupertinoDarkTheme; From 12b2dc5cd04bc9cf6b21eb3c7ecefafa9354cac0 Mon Sep 17 00:00:00 2001 From: Lance Johnstone Date: Fri, 16 Feb 2024 11:03:39 +1300 Subject: [PATCH 2/2] Update ios project file --- example/ios/Flutter/AppFrameworkInfo.plist | 2 +- example/ios/Runner.xcodeproj/project.pbxproj | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/example/ios/Flutter/AppFrameworkInfo.plist b/example/ios/Flutter/AppFrameworkInfo.plist index 9625e105..7c569640 100644 --- a/example/ios/Flutter/AppFrameworkInfo.plist +++ b/example/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/example/ios/Runner.xcodeproj/project.pbxproj b/example/ios/Runner.xcodeproj/project.pbxproj index 6b8f839a..c9f8f38f 100644 --- a/example/ios/Runner.xcodeproj/project.pbxproj +++ b/example/ios/Runner.xcodeproj/project.pbxproj @@ -275,7 +275,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -349,7 +349,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -398,7 +398,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos;