showColumnHeaderContextMenu<T extends DataGridRow> function

void showColumnHeaderContextMenu<T extends DataGridRow>({
  1. required BuildContext context,
  2. required Offset globalPosition,
  3. required DataGridColumn<T> column,
  4. required SortState sortState,
  5. required GroupState groupState,
  6. 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),
    ],
  );
}