Skip to content

[two_dimensional_scrollables] TableView trailing pinned spans are laid out twice #185842

@Piinks

Description

@Piinks

Description

In TableView, when trailingPinnedColumnCount or trailingPinnedRowCount is greater than 0, the spans designated as trailing pinned are being incorrectly included in the range of "regular" (non-pinned) spans. This results in these cells being built and laid out twice during every layout pass.

Steps to Reproduce

  1. Create a TableView with a large number of rows/columns.
  2. Set trailingPinnedColumnCount: 1.
  3. Observe (e.g., via logs in cellBuilder) that cells in the last column are built twice.

Expected Results

Each TableVicinity should be built and laid out exactly once per layout pass. Trailing pinned spans should be excluded from the "non-pinned" range.

Actual Results

Trailing pinned spans are included in the non-pinned range because the range is capped by the total metrics length rather than the index of the first trailing pinned span.

Root Cause

In RenderTableViewport._updateFirstAndLastVisibleCell (lib/src/table_view/table.dart), the _lastNonPinnedColumn and _lastNonPinnedRow indices are defaulted to the end of the metrics maps (metrics.length - 1) instead of being capped by _lastRegularColumnIndex and _lastRegularRowIndex.

Proposed Fix

Update the capping logic to use the pre-calculated regular span indices (_lastRegularColumnIndex / _lastRegularRowIndex).

Metadata

Metadata

Assignees

Labels

P2Important issues not at the top of the work listframeworkflutter/packages/flutter repository. See also f: labels.p: two_dimensional_scrollablesIssues pertaining to the two_dimensional_scrollables packagepackageflutter/packages repository. See also p: labels.team-frameworkOwned by Framework teamtriaged-frameworkTriaged by Framework team

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions