partitionInline static method
({List<M3EToolbarItem> inline, List<M3EToolbarAction> overflow})
partitionInline({
- required List<
M3EToolbarItem> items, - required int maxInline,
- int? triggerIndex,
Keeps all widgets inline; only excess non-trigger actions overflow.
Returns (inline, overflowActions) preserving relative order in inline.
Implementation
static ({List<M3EToolbarItem> inline, List<M3EToolbarAction> overflow})
partitionInline({
required List<M3EToolbarItem> items,
required int maxInline,
int? triggerIndex,
}) {
if (items.isEmpty) {
return (
inline: const <M3EToolbarItem>[],
overflow: const <M3EToolbarAction>[],
);
}
// Count how many non-trigger icon actions may stay inline.
final reservedTrigger = triggerIndex != null ? 1 : 0;
final int actionBudget = (maxInline - reservedTrigger).clamp(0, maxInline);
final inline = <M3EToolbarItem>[];
final overflow = <M3EToolbarAction>[];
var usedActionSlots = 0;
for (var i = 0; i < items.length; i++) {
final M3EToolbarItem item = items[i];
if (item is M3EToolbarWidget) {
inline.add(item);
continue;
}
final action = item as M3EToolbarAction;
if (action.isExpandTrigger) {
inline.add(action);
continue;
}
if (usedActionSlots < actionBudget) {
inline.add(action);
usedActionSlots++;
} else {
overflow.add(action);
}
}
return (inline: inline, overflow: overflow);
}