Skip to content

Commit

Permalink
Add alignment to menu buttons
Browse files Browse the repository at this point in the history
  • Loading branch information
CodeDoctorDE committed Oct 26, 2024
1 parent dd66f63 commit fb0c337
Showing 1 changed file with 43 additions and 25 deletions.
68 changes: 43 additions & 25 deletions packages/material_leap/lib/src/widgets/menu.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,23 @@ Widget _offsetCalculator(
BuildContext context,
Widget Function(Offset? Function() offset) builder, {
bool calculateLocalOffset = true,
AlignmentGeometry? alignment = Alignment.topRight,
}) {
if (!calculateLocalOffset) {
return builder(() => null);
}
return Builder(builder: (currentContext) {
return builder(() {
final RenderBox renderBox = context.findRenderObject() as RenderBox;
return renderBox.globalToLocal(Offset.zero,
final offset = renderBox.globalToLocal(Offset.zero,
ancestor: currentContext.findRenderObject());
if (alignment != null) {
final size = renderBox.size;
final alignmentOffset = alignment.resolve(Directionality.of(context));
return offset + alignmentOffset.alongSize(size);
} else {
return offset;
}
});
});
}
Expand All @@ -31,20 +39,23 @@ MenuAnchorChildBuilder defaultMenuButton({
bool selectedOnOpen = true,
String? tooltip,
bool calculateLocalOffset = false,
AlignmentGeometry? alignment = Alignment.topRight,
}) =>
(context, controller, child) => _offsetCalculator(
context,
(offset) => IconButton(
icon: iconBuilder?.call(context, controller, child) ??
icon ??
const PhosphorIcon(PhosphorIconsLight.dotsThreeVertical),
tooltip: tooltip,
isSelected:
(selectedOnOpen && controller.isOpen) ? true : isSelected,
onPressed:
enabled ? () => controller.toggle(position: offset()) : null,
),
calculateLocalOffset: calculateLocalOffset);
context,
(offset) => IconButton(
icon: iconBuilder?.call(context, controller, child) ??
icon ??
const PhosphorIcon(PhosphorIconsLight.dotsThreeVertical),
tooltip: tooltip,
isSelected:
(selectedOnOpen && controller.isOpen) ? true : isSelected,
onPressed:
enabled ? () => controller.toggle(position: offset()) : null,
),
calculateLocalOffset: calculateLocalOffset,
alignment: alignment,
);

MenuAnchorChildBuilder defaultFilledMenuButton({
Widget? icon,
Expand All @@ -54,20 +65,23 @@ MenuAnchorChildBuilder defaultFilledMenuButton({
bool selectedOnOpen = true,
String? tooltip,
bool calculateLocalOffset = false,
AlignmentGeometry? alignment = Alignment.topRight,
}) =>
(context, controller, child) => _offsetCalculator(
context,
(offset) => IconButton.filled(
icon: iconBuilder?.call(context, controller, child) ??
icon ??
const PhosphorIcon(PhosphorIconsLight.dotsThreeVertical),
tooltip: tooltip,
isSelected:
(selectedOnOpen && controller.isOpen) ? true : isSelected,
onPressed:
enabled ? () => controller.toggle(position: offset()) : null,
),
calculateLocalOffset: calculateLocalOffset);
context,
(offset) => IconButton.filled(
icon: iconBuilder?.call(context, controller, child) ??
icon ??
const PhosphorIcon(PhosphorIconsLight.dotsThreeVertical),
tooltip: tooltip,
isSelected:
(selectedOnOpen && controller.isOpen) ? true : isSelected,
onPressed:
enabled ? () => controller.toggle(position: offset()) : null,
),
calculateLocalOffset: calculateLocalOffset,
alignment: alignment,
);

MenuAnchorChildBuilder defaultFilledTonalMenuButton({
Widget? icon,
Expand All @@ -77,6 +91,7 @@ MenuAnchorChildBuilder defaultFilledTonalMenuButton({
bool selectedOnOpen = true,
String? tooltip,
bool calculateLocalOffset = false,
AlignmentGeometry? alignment = Alignment.topRight,
}) =>
(context, controller, child) => _offsetCalculator(
context,
Expand All @@ -91,6 +106,7 @@ MenuAnchorChildBuilder defaultFilledTonalMenuButton({
enabled ? () => controller.toggle(position: offset()) : null,
),
calculateLocalOffset: calculateLocalOffset,
alignment: alignment,
);

MenuAnchorChildBuilder defaultOutlinedMenuButton({
Expand All @@ -101,6 +117,7 @@ MenuAnchorChildBuilder defaultOutlinedMenuButton({
bool selectedOnOpen = true,
String? tooltip,
bool calculateLocalOffset = false,
AlignmentGeometry? alignment = Alignment.topRight,
}) =>
(context, controller, child) => _offsetCalculator(
context,
Expand All @@ -115,4 +132,5 @@ MenuAnchorChildBuilder defaultOutlinedMenuButton({
enabled ? () => controller.toggle(position: offset()) : null,
),
calculateLocalOffset: calculateLocalOffset,
alignment: alignment,
);

0 comments on commit fb0c337

Please sign in to comment.