From eef97c0938db4c104e5987e6b8e5f13d98ac2db5 Mon Sep 17 00:00:00 2001 From: Emily Pauli Date: Sat, 25 Oct 2025 17:30:33 +0200 Subject: [PATCH] Revert `m3e_design` version to 0.2.0; add theme accessors to simplify retrieval of M3E theme from `ThemeData`. Update changelog and refactor `BuildContext` extension with new accessor. --- packages/m3e_design/CHANGELOG.md | 3 +++ packages/m3e_design/lib/theme/m3e_theme.dart | 13 +++++++++++++ packages/m3e_design/lib/utils/build_context_x.dart | 4 ++-- packages/m3e_design/pubspec.yaml | 2 +- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/packages/m3e_design/CHANGELOG.md b/packages/m3e_design/CHANGELOG.md index d780806..ac9050a 100644 --- a/packages/m3e_design/CHANGELOG.md +++ b/packages/m3e_design/CHANGELOG.md @@ -1,2 +1,5 @@ +## 0.2.0 +- add accessors for getting the M3E theme from ThemeData via Theme.of(context).m3e + ## 0.1.0 - Changelog initialized. diff --git a/packages/m3e_design/lib/theme/m3e_theme.dart b/packages/m3e_design/lib/theme/m3e_theme.dart index 563aca1..001015d 100644 --- a/packages/m3e_design/lib/theme/m3e_theme.dart +++ b/packages/m3e_design/lib/theme/m3e_theme.dart @@ -97,3 +97,16 @@ class _M3ETypeProxy { TextStyle get headlineSmallEmphasized => (_t.base.headlineSmall ?? _empty).merge(_t.emphasized.headline); } + +// Accessors for getting the M3E theme from ThemeData via Theme.of(context).m3e +extension M3EThemeAccessors on ThemeData { + // Returns the installed M3ETheme; in release builds falls back to defaults + M3ETheme get m3e { + final e = extension(); + assert( + e != null, + 'M3ETheme is not installed on ThemeData. Wrap your app theme with withM3ETheme(...)', + ); + return e ?? M3ETheme.defaults(colorScheme); + } +} diff --git a/packages/m3e_design/lib/utils/build_context_x.dart b/packages/m3e_design/lib/utils/build_context_x.dart index bc00d6c..42fb94b 100644 --- a/packages/m3e_design/lib/utils/build_context_x.dart +++ b/packages/m3e_design/lib/utils/build_context_x.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; + import '../theme/m3e_theme.dart'; extension BuildContextM3EX on BuildContext { - M3ETheme get m3e => - Theme.of(this).extension() ?? M3ETheme.defaults(Theme.of(this).colorScheme); + M3ETheme get m3e => Theme.of(this).m3e; } diff --git a/packages/m3e_design/pubspec.yaml b/packages/m3e_design/pubspec.yaml index 1c5f7e8..6bc7add 100644 --- a/packages/m3e_design/pubspec.yaml +++ b/packages/m3e_design/pubspec.yaml @@ -1,6 +1,6 @@ name: m3e_design description: Material 3 Expressive design language for Flutter (tokens, ThemeExtension, motion). -version: 0.3.0 +version: 0.2.0 repository: https://github.com/EmilyMoonstone/material_3_expressive/tree/main/packages/m3e_design issue_tracker: https://github.com/EmilyMonestone/material_3_expressive/issues