Add ButtonGroupM3E component with overflow handling and update API to use actions

This commit is contained in:
Emily Pauli 2025-11-12 12:51:29 +01:00
commit 582af894f3
14 changed files with 1463 additions and 255 deletions

View file

@ -1,2 +1,7 @@
## 0.1.2
- Add optional `cornerRadiusOverride` to allow per-corner radii when using square shapes (enables grouped buttons with rounded outer and square inner corners).
- Shape resolution updated to honor `cornerRadiusOverride` for square/pressed-square states; no breaking API changes.
- Internal: minor style resolution refactors, no behavior changes for existing usages.
## 0.1.0
- Changelog initialized.

View file

@ -19,6 +19,7 @@ class ButtonM3E extends StatefulWidget {
this.smallPaddingDeprecated24 = false,
this.enabled = true,
this.statesController,
this.cornerRadiusOverride, // new optional per-corner override for square shapes
});
final VoidCallback? onPressed;
@ -33,6 +34,7 @@ class ButtonM3E extends StatefulWidget {
final bool smallPaddingDeprecated24;
final bool enabled;
final WidgetStatesController? statesController;
final BorderRadius? cornerRadiusOverride;
@override
State<ButtonM3E> createState() => _ButtonM3EState();
@ -165,12 +167,17 @@ class _ButtonM3EState extends State<ButtonM3E> {
final selected = states.contains(WidgetState.selected) || widget.selected;
final pressed = states.contains(WidgetState.pressed);
final BorderRadius squareBaseRadius = widget.cornerRadiusOverride ??
BorderRadius.circular(tokens.squareRadius(widget.size));
final BorderRadius pressedSquareRadius = widget.cornerRadiusOverride ??
BorderRadius.circular(tokens.pressedRadius(widget.size));
OutlinedBorder round = const StadiumBorder();
OutlinedBorder square = RoundedRectangleBorder(
borderRadius: BorderRadius.circular(tokens.squareRadius(widget.size)),
borderRadius: squareBaseRadius,
);
OutlinedBorder pressedSquare = RoundedRectangleBorder(
borderRadius: BorderRadius.circular(tokens.pressedRadius(widget.size)),
borderRadius: pressedSquareRadius,
);
OutlinedBorder base = widget.shape == ButtonM3EShape.round ? round : square;

View file

@ -1,7 +1,6 @@
name: button_m3e
description: Material 3 Expressive Buttons for Flutter with 5 styles, 5 sizes, round/square shapes, and toggle selection.
version: 0.1.1
version: 0.1.2
repository: https://github.com/EmilyMoonstone/material_3_expressive/tree/main/packages/button_m3e
issue_tracker: https://github.com/EmilyMonestone/material_3_expressive/issues