showColumnHeaderContextMenu<T extends DataGridRow> function
void
showColumnHeaderContextMenu<T extends DataGridRow>({
- required BuildContext context,
- required Offset globalPosition,
- required DataGridColumn<
T> column, - required SortState sortState,
- required GroupState groupState,
- required DataGridController<
T> controller,
Shows the header right-click context menu for column at globalPosition:
sort actions (if sortable), group/ungroup (if groupable), pin/unpin, and
hide column.
Implementation
void showColumnHeaderContextMenu<T extends DataGridRow>({
required BuildContext context,
required Offset globalPosition,
required DataGridColumn<T> column,
required SortState sortState,
required GroupState groupState,
required DataGridController<T> controller,
}) {
final overlay = Overlay.of(context).context.findRenderObject() as RenderBox;
final position = RelativeRect.fromRect(
globalPosition & const Size(1, 1),
Offset.zero & overlay.size,
);
final isGrouped = groupState.groupedColumnIds.contains(column.id);
final hasSortItems = column.sortable;
final hasGroupItem = column.groupable;
showMenu<void>(
context: context,
position: position,
items: [
if (hasSortItems) ...[
_SortAscendingMenuItem(columnId: column.id, controller: controller),
_SortDescendingMenuItem(columnId: column.id, controller: controller),
_ClearSortMenuItem(columnId: column.id, controller: controller),
],
if (hasSortItems && hasGroupItem) const PopupMenuDivider(),
if (hasGroupItem)
_GroupByMenuItem(
columnId: column.id,
isGrouped: isGrouped,
controller: controller,
),
if (hasSortItems || hasGroupItem) const PopupMenuDivider(),
_PinColumnMenuItem(
columnId: column.id,
isPinned: column.pinned,
controller: controller,
),
if (column.visible)
_HideColumnMenuItem(columnId: column.id, controller: controller),
],
);
}