reservedLabeledSelectionExtent static method
double?
reservedLabeledSelectionExtent({
- required List<
M3EToolbarItem> inline, - required Axis axis,
- required double iconVisualExtent,
- required double iconSlotExtent,
- required TextStyle labelStyle,
- required TextScaler textScaler,
- required double gap,
- required double labelGap,
- bool includeOverflowSlot = false,
Fixed pill width for labeled selection when the outer pill should not grow/shrink: widest (icon+label) action + icon-only neighbors + gaps.
Returns null when reservation does not apply (no labeled actions, or inline widgets that cannot be measured cheaply).
iconSlotExtent must be the laid-out icon-only width
(max(visual, target)), matching the icon button outer size.
For Axis.horizontal this is the full row main-axis extent. For Axis.vertical it is the column cross-axis width (widest expanded action) — labels expand horizontally even in a vertical toolbar.
Implementation
static double? reservedLabeledSelectionExtent({
required List<M3EToolbarItem> inline,
required Axis axis,
required double iconVisualExtent,
required double iconSlotExtent,
required TextStyle labelStyle,
required TextScaler textScaler,
required double gap,
required double labelGap,
bool includeOverflowSlot = false,
}) {
final metrics = _labeledSelectionMetrics(
inline: inline,
iconVisualExtent: iconVisualExtent,
iconSlotExtent: iconSlotExtent,
labelStyle: labelStyle,
textScaler: textScaler,
labelGap: labelGap,
);
if (metrics == null) {
return null;
}
final slotCount = metrics.slotCount + (includeOverflowSlot ? 1 : 0);
if (metrics.labeledCount == 0 || slotCount == 0) {
return null;
}
if (axis == Axis.vertical) {
return metrics.maxExpanded;
}
return metrics.maxExpanded +
(slotCount - 1) * iconSlotExtent +
(slotCount - 1) * gap;
}