Commit 3b8c4cb
authored
[two_dimensional_scrollables] trailing pinned row/col for TableView (#11519)
This PR implements the requested feature to allow pinning rows and columns to the trailing edges of the TableView (bottom and right in LTR). Previously, only leading pinning was supported.
This implementation allows for use cases such as a "delete" button pinned to the right of every row, or a summary footer pinned to the bottom of the table.
- Added trailingPinnedRowCount and trailingPinnedColumnCount to TableView.builder, TableView.list, and their associated delegates (TableCellBuilderDelegate, TableCellListDelegate).
- Updated RenderTableViewport to calculate and track extents for trailing pinned spans. The indices for these spans are calculated from the end of the specified rowCount or columnCount.
- Extended layoutChildSequence in RenderTableViewport to handle all 9 regions of the resulting grid (intersections of leading-pinned, regular, and trailing-pinned rows/columns).
- Updated the paint method to correctly clip and layer trailing pinned areas, ensuring they stay at the viewport edges and that regular content scrolls underneath them correctly.
- Adjusted maxScrollExtent calculations to account for both leading and trailing pinned extents, ensuring the scrollable area is correctly sized.
- Updated the table alignment logic to correctly position the entire table (including pinned areas) when it is smaller than the viewport.
Technical Details
- Trailing pinned elements are logically positioned based on the viewport dimension minus their cumulative extent.
- Merged cells are supported within trailing pinned areas, with safety assertions to ensure they do not span across pinned and unpinned boundaries.
- The implementation maintains compatibility with existing leading pinning and supports various combinations of both.
Fixes flutter/flutter#133238
[Design Doc](https://docs.google.com/document/d/1TYqmQFot4TcwiddQdNW6YHeO0F_89nqTYOZOgrULJRw/edit?usp=sharing)
## Pre-Review Checklist
**Note**: The Flutter team is currently trialing the use of [Gemini Code Assist for GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code). Comments from the `gemini-code-assist` bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.
[^1]: Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling.1 parent e212d61 commit 3b8c4cb
7 files changed
Lines changed: 920 additions & 132 deletions
File tree
- packages/two_dimensional_scrollables
- lib/src/table_view
- test/table_view
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
1 | 5 | | |
2 | 6 | | |
3 | 7 | | |
| |||
0 commit comments