Skip to main content

Columns

Most FDC grid columns are field-bound declarations. The fieldName must resolve to a compatible field in the dataset schema.

const FdcTextColumn<dynamic>(
id: 'companyColumn',
fieldName: 'company',
label: 'Company',
width: 240,
minWidth: 140,
maxWidth: 420,
)

Stable column identity

Use id when a column must preserve runtime layout state across rebuilds or be targeted by FdcGridController commands.

final controller = FdcGridController();

FdcGrid(
controller: controller,
dataSet: customers,
columns: const [
FdcTextColumn<dynamic>(
id: 'cityColumn',
fieldName: 'city',
),
],
)

Later:

controller.focusColumn('cityColumn');
controller.hideColumn('cityColumn');
controller.showColumn('cityColumn');

Common column controls

All standard field-bound columns share common configuration such as:

  • label, hint, visible, and enabled
  • readOnly, tabStop, and focusOrder
  • width, minWidth, maxWidth, and autoSizeMode
  • allowSort, filterConfig, and allowResize
  • horizontalAlignment
  • pin
  • summary
  • onValueChanging, onValueChanged, and onLookup

Column sizing and resizing

Column width is constrained by minWidth and maxWidth, while width provides the configured width:

const FdcTextColumn<dynamic>(
fieldName: 'company',
width: 240,
minWidth: 140,
maxWidth: 420,
allowResize: true,
)

Interactive resize is controlled at both grid and column level. The grid must allow column resize and the target column must not disable it:

FdcGrid(
dataSet: customers,
options: const FdcGridOptions(
allowColumnResize: true,
),
columns: const [
FdcTextColumn<dynamic>(
fieldName: 'company',
allowResize: true,
),
],
)

autoSizeMode controls whether a column participates in viewport width distribution. It is a layout behavior, not content measurement:

ModeBehavior
FdcGridColumnAutoSizeMode.noneKeeps the configured width except for explicit or manual resize.
FdcGridColumnAutoSizeMode.viewportLets the column absorb scrollable viewport width deltas.

Pinned columns do not participate in the scrollable viewport auto-size pass. Use stable minWidth and maxWidth constraints when a viewport-sized column must remain within a practical range.

Column pinning

const FdcTextColumn<dynamic>(
fieldName: 'company',
pin: FdcGridColumnPin.start,
)

Interactive pinning is opt-in. Enable it globally when users should be able to pin and unpin columns from grid menus:

FdcGrid(
dataSet: customers,
pinning: const FdcGridColumnPinning(enabled: true),
)

Programmatic initial pinning through FdcGridColumn.pin remains available independently of interactive pinning.

Duplicate field bindings

Multiple columns may bind to the same field. Give them distinct id values when each column needs independent layout state.