From 05c489991aea0b459b039c6d0c44422ee42c3f20 Mon Sep 17 00:00:00 2001 From: Emily Pauli Date: Thu, 23 Oct 2025 14:45:16 +0200 Subject: [PATCH] Refactor badge handling across components to use `m3e` colors, remove unused `_SmallDot` widget, and clean up redundant code. --- .../lib/src/icon_button_m3e.dart | 24 +++++++++++++------ packages/icon_button_m3e/pubspec.yaml | 3 ++- .../lib/src/navigation_rail_m3e_widget.dart | 2 -- .../lib/src/rail_badge_m3e.dart | 16 ------------- .../lib/src/rail_tokens_adapter.dart | 6 ++--- .../lib/src/split_button.dart | 2 -- 6 files changed, 21 insertions(+), 32 deletions(-) diff --git a/packages/icon_button_m3e/lib/src/icon_button_m3e.dart b/packages/icon_button_m3e/lib/src/icon_button_m3e.dart index f783bcb..535126c 100644 --- a/packages/icon_button_m3e/lib/src/icon_button_m3e.dart +++ b/packages/icon_button_m3e/lib/src/icon_button_m3e.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:m3e_design/m3e_design.dart'; import 'enums.dart'; @@ -44,6 +45,7 @@ class IconButtonM3E extends StatelessWidget { @override Widget build(BuildContext context) { final scheme = Theme.of(context).colorScheme; + final m3e = context.m3e; final Size visual = size.visual(width); final Size target = size.target(width); @@ -133,19 +135,27 @@ class IconButtonM3E extends StatelessWidget { badge = null; } else if (v is num) { final int c = v.round().clamp(0, 999999); - badge = Badge.count( - count: c, - backgroundColor: scheme.error, - textColor: scheme.onError, - ); + if (c == 0) { + badge = Badge( + smallSize: 8, + backgroundColor: m3e.colors.primary, + textColor: m3e.colors.onPrimary, + ); + } else { + badge = Badge.count( + count: c, + backgroundColor: m3e.colors.primary, + textColor: m3e.colors.onPrimary, + ); + } } else if (v is String) { if (v.isEmpty) { badge = null; } else { badge = Badge( label: Text(v), - backgroundColor: scheme.error, - textColor: scheme.onError, + backgroundColor: m3e.colors.primary, + textColor: m3e.colors.onPrimary, ); } } else { diff --git a/packages/icon_button_m3e/pubspec.yaml b/packages/icon_button_m3e/pubspec.yaml index 1317225..553d32d 100644 --- a/packages/icon_button_m3e/pubspec.yaml +++ b/packages/icon_button_m3e/pubspec.yaml @@ -13,9 +13,10 @@ dependencies: sdk: flutter dev_dependencies: + flutter_lints: ^4.0.0 flutter_test: sdk: flutter - flutter_lints: ^4.0.0 + flutter: uses-material-design: true diff --git a/packages/navigation_rail_m3e/lib/src/navigation_rail_m3e_widget.dart b/packages/navigation_rail_m3e/lib/src/navigation_rail_m3e_widget.dart index b8fa7ef..8faee19 100644 --- a/packages/navigation_rail_m3e/lib/src/navigation_rail_m3e_widget.dart +++ b/packages/navigation_rail_m3e/lib/src/navigation_rail_m3e_widget.dart @@ -135,7 +135,6 @@ class _NavigationRailM3EState extends State void _insertOverlay() { final overlay = Overlay.of(context, rootOverlay: true); - if (overlay == null) return; _modalEntry = OverlayEntry(builder: (ctx) => _buildModalOverlay(ctx)); overlay.insert(_modalEntry!); } @@ -147,7 +146,6 @@ class _NavigationRailM3EState extends State void _insertCollapsedPeekOverlay() { final overlay = Overlay.of(context, rootOverlay: true); - if (overlay == null) return; _collapsedPeekEntry = OverlayEntry(builder: (ctx) => _buildCollapsedPeekOverlay(ctx)); overlay.insert(_collapsedPeekEntry!); diff --git a/packages/navigation_rail_m3e/lib/src/rail_badge_m3e.dart b/packages/navigation_rail_m3e/lib/src/rail_badge_m3e.dart index 0ae3685..7fc866e 100644 --- a/packages/navigation_rail_m3e/lib/src/rail_badge_m3e.dart +++ b/packages/navigation_rail_m3e/lib/src/rail_badge_m3e.dart @@ -65,19 +65,3 @@ class RailBadgeM3E extends StatelessWidget { return v; } } - -class _SmallDot extends StatelessWidget { - const _SmallDot({required this.color}); - final Color color; - @override - Widget build(BuildContext context) { - return Container( - width: 8, - height: 8, - decoration: BoxDecoration( - color: color, - shape: BoxShape.circle, - ), - ); - } -} diff --git a/packages/navigation_rail_m3e/lib/src/rail_tokens_adapter.dart b/packages/navigation_rail_m3e/lib/src/rail_tokens_adapter.dart index 1bfec11..ba08e5e 100644 --- a/packages/navigation_rail_m3e/lib/src/rail_tokens_adapter.dart +++ b/packages/navigation_rail_m3e/lib/src/rail_tokens_adapter.dart @@ -36,11 +36,9 @@ class NavigationRailTokensAdapter { } Color get badgeBackground => - _maybe(() => context.m3e.colors.error) ?? _cs.error; + _maybe(() => context.m3e.colors.primary) ?? _cs.primary; Color get badgeLargeLabel => - _maybe(() => context.m3e.colors.onError) ?? _cs.onError; - Color get badgeSmallDot => - _maybe(() => context.m3e.colors.error) ?? _cs.error; + _maybe(() => context.m3e.colors.onPrimary) ?? _cs.onPrimary; ShapeBorder get indicatorShapeFull { // Full corner per M3E: use the most rounded token, fallback to StadiumBorder. diff --git a/packages/split_button_m3e/lib/src/split_button.dart b/packages/split_button_m3e/lib/src/split_button.dart index 23ce7be..1b8e17c 100644 --- a/packages/split_button_m3e/lib/src/split_button.dart +++ b/packages/split_button_m3e/lib/src/split_button.dart @@ -368,8 +368,6 @@ class _SplitButtonM3EState extends State> { setState(() => _menuOpen = true); // Ensure menu item text/icon colors match the button's foreground (onCont) - final theme = Theme.of(context); - final m3e = context.m3e; final ( Color _cont, Color onCont,