Skip to content

Commit 0ebd475

Browse files
committed
Clean up
1 parent a4a11b8 commit 0ebd475

5 files changed

Lines changed: 121 additions & 72 deletions

File tree

packages/two_dimensional_scrollables/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
## 0.4.2
66

7-
* Adds support for trailing pinned columns and rows in TableView.
7+
* Fixes an issue where merged cells would unmerge when the first cell was overlaid by a pinned row or column.
88

99
## 0.4.1
1010

packages/two_dimensional_scrollables/lib/src/table_view/table.dart

Lines changed: 99 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,17 @@ class TableView extends TwoDimensionalScrollView {
162162
}) : assert(pinnedRowCount >= 0),
163163
assert(trailingPinnedRowCount >= 0),
164164
assert(rowCount == null || rowCount >= 0),
165-
assert(rowCount == null || rowCount >= pinnedRowCount + trailingPinnedRowCount),
165+
assert(
166+
rowCount == null ||
167+
rowCount >= pinnedRowCount + trailingPinnedRowCount,
168+
),
166169
assert(columnCount == null || columnCount >= 0),
167170
assert(pinnedColumnCount >= 0),
168171
assert(trailingPinnedColumnCount >= 0),
169-
assert(columnCount == null || columnCount >= pinnedColumnCount + trailingPinnedColumnCount),
172+
assert(
173+
columnCount == null ||
174+
columnCount >= pinnedColumnCount + trailingPinnedColumnCount,
175+
),
170176
super(
171177
delegate: TableCellBuilderDelegate(
172178
columnCount: columnCount,
@@ -453,12 +459,12 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
453459

454460
int? get _firstTrailingPinnedRow =>
455461
delegate.trailingPinnedRowCount > 0 && delegate.rowCount != null
456-
? delegate.rowCount! - delegate.trailingPinnedRowCount
457-
: null;
462+
? delegate.rowCount! - delegate.trailingPinnedRowCount
463+
: null;
458464
int? get _firstTrailingPinnedColumn =>
459465
delegate.trailingPinnedColumnCount > 0 && delegate.columnCount != null
460-
? delegate.columnCount! - delegate.trailingPinnedColumnCount
461-
: null;
466+
? delegate.columnCount! - delegate.trailingPinnedColumnCount
467+
: null;
462468

463469
double get _leadingPinnedRowsExtent => delegate.pinnedRowCount > 0
464470
? _rowMetrics[delegate.pinnedRowCount - 1]!.trailingOffset
@@ -510,7 +516,8 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
510516
'from being visible.',
511517
);
512518
} else if (_pinnedColumnsExtent == viewportDimension.width) {
513-
final bool hasUnpinnedColumns = delegate.columnCount == null ||
519+
final bool hasUnpinnedColumns =
520+
delegate.columnCount == null ||
514521
delegate.columnCount! >
515522
delegate.pinnedColumnCount + delegate.trailingPinnedColumnCount;
516523
if (hasUnpinnedColumns) {
@@ -529,7 +536,8 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
529536
'from being visible.',
530537
);
531538
} else if (_pinnedRowsExtent == viewportDimension.height) {
532-
final bool hasUnpinnedRows = delegate.rowCount == null ||
539+
final bool hasUnpinnedRows =
540+
delegate.rowCount == null ||
533541
delegate.rowCount! >
534542
delegate.pinnedRowCount + delegate.trailingPinnedRowCount;
535543
if (hasUnpinnedRows) {
@@ -635,7 +643,9 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
635643
}
636644
// If we are computing up to a specific index, we are getting info for a
637645
// merged cell, do not change the visible cells.
638-
_firstNonPinnedColumn = toColumnIndex == null ? null : _firstNonPinnedColumn;
646+
_firstNonPinnedColumn = toColumnIndex == null
647+
? null
648+
: _firstNonPinnedColumn;
639649
_lastNonPinnedColumn = toColumnIndex == null ? null : _lastNonPinnedColumn;
640650
int column = appendColumns ? _columnMetrics.length : 0;
641651

@@ -658,14 +668,15 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
658668
}
659669

660670
while (!reachedColumnEnd()) {
661-
final bool isPinned = column < delegate.pinnedColumnCount ||
671+
final bool isPinned =
672+
column < delegate.pinnedColumnCount ||
662673
(delegate.columnCount != null &&
663674
column >=
664675
delegate.columnCount! - delegate.trailingPinnedColumnCount);
665676
final leadingOffset = isPinned
666677
? (column < delegate.pinnedColumnCount
667-
? startOfPinnedColumn
668-
: startOfTrailingPinnedColumn)
678+
? startOfPinnedColumn
679+
: startOfTrailingPinnedColumn)
669680
: startOfRegularColumn;
670681
_Span? span = _columnMetrics.remove(column);
671682
final TableSpan? configuration =
@@ -718,8 +729,8 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
718729
_lastNonPinnedColumn ??= _columnNullTerminatedIndex != null
719730
? _columnNullTerminatedIndex! - 1
720731
: (delegate.columnCount != null
721-
? delegate.columnCount! - delegate.trailingPinnedColumnCount - 1
722-
: null);
732+
? delegate.columnCount! - delegate.trailingPinnedColumnCount - 1
733+
: null);
723734
}
724735
}
725736

@@ -775,13 +786,14 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
775786
}
776787

777788
while (!reachedRowEnd()) {
778-
final bool isPinned = row < delegate.pinnedRowCount ||
789+
final bool isPinned =
790+
row < delegate.pinnedRowCount ||
779791
(delegate.rowCount != null &&
780792
row >= delegate.rowCount! - delegate.trailingPinnedRowCount);
781793
final leadingOffset = isPinned
782794
? (row < delegate.pinnedRowCount
783-
? startOfPinnedRow
784-
: startOfTrailingPinnedRow)
795+
? startOfPinnedRow
796+
: startOfTrailingPinnedRow)
785797
: startOfRegularRow;
786798
_Span? span = _rowMetrics.remove(row);
787799
final TableSpan? configuration =
@@ -835,21 +847,21 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
835847
_lastNonPinnedRow ??= _rowNullTerminatedIndex != null
836848
? _rowNullTerminatedIndex! - 1
837849
: (delegate.rowCount != null
838-
? delegate.rowCount! - delegate.trailingPinnedRowCount - 1
839-
: null);
850+
? delegate.rowCount! - delegate.trailingPinnedRowCount - 1
851+
: null);
840852
}
841853
}
842854

843855
int? get _lastRegularColumnIndex => delegate.columnCount == null
844856
? _columnNullTerminatedIndex != null
845-
? _columnNullTerminatedIndex! - 1
846-
: null
857+
? _columnNullTerminatedIndex! - 1
858+
: null
847859
: delegate.columnCount! - delegate.trailingPinnedColumnCount - 1;
848860

849861
int? get _lastRegularRowIndex => delegate.rowCount == null
850862
? _rowNullTerminatedIndex != null
851-
? _rowNullTerminatedIndex! - 1
852-
: null
863+
? _rowNullTerminatedIndex! - 1
864+
: null
853865
: delegate.rowCount! - delegate.trailingPinnedRowCount - 1;
854866

855867
void _updateScrollBounds() {
@@ -1076,24 +1088,24 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
10761088

10771089
final double trailingPinnedColumnOffset = _firstTrailingPinnedColumn != null
10781090
? -(viewportDimension.width - _trailingPinnedColumnsExtent) -
1079-
_hAlignmentOffset
1091+
_hAlignmentOffset
10801092
: 0.0;
10811093
final double trailingPinnedRowOffset = _firstTrailingPinnedRow != null
10821094
? -(viewportDimension.height - _trailingPinnedRowsExtent) -
1083-
_vAlignmentOffset
1095+
_vAlignmentOffset
10841096
: 0.0;
10851097

10861098
final double? offsetIntoColumn = _firstNonPinnedColumn != null
10871099
? horizontalOffset.pixels -
1088-
_columnMetrics[_firstNonPinnedColumn]!.leadingOffset -
1089-
_leadingPinnedColumnsExtent -
1090-
_hAlignmentOffset
1100+
_columnMetrics[_firstNonPinnedColumn]!.leadingOffset -
1101+
_leadingPinnedColumnsExtent -
1102+
_hAlignmentOffset
10911103
: null;
10921104
final double? offsetIntoRow = _firstNonPinnedRow != null
10931105
? verticalOffset.pixels -
1094-
_rowMetrics[_firstNonPinnedRow]!.leadingOffset -
1095-
_leadingPinnedRowsExtent -
1096-
_vAlignmentOffset
1106+
_rowMetrics[_firstNonPinnedRow]!.leadingOffset -
1107+
_leadingPinnedRowsExtent -
1108+
_vAlignmentOffset
10971109
: null;
10981110

10991111
// Row Category L (Leading Pinned)
@@ -1113,7 +1125,9 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
11131125
_layoutCells(
11141126
start: TableVicinity(column: _firstNonPinnedColumn!, row: 0),
11151127
end: TableVicinity(
1116-
column: _lastNonPinnedColumn!, row: _lastPinnedRow!),
1128+
column: _lastNonPinnedColumn!,
1129+
row: _lastPinnedRow!,
1130+
),
11171131
offset: Offset(offsetIntoColumn!, -_vAlignmentOffset),
11181132
);
11191133
}
@@ -1122,7 +1136,9 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
11221136
_layoutCells(
11231137
start: TableVicinity(column: _firstTrailingPinnedColumn!, row: 0),
11241138
end: TableVicinity(
1125-
column: delegate.columnCount! - 1, row: _lastPinnedRow!),
1139+
column: delegate.columnCount! - 1,
1140+
row: _lastPinnedRow!,
1141+
),
11261142
offset: Offset(trailingPinnedColumnOffset, -_vAlignmentOffset),
11271143
);
11281144
}
@@ -1137,7 +1153,9 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
11371153
_layoutCells(
11381154
start: TableVicinity(column: 0, row: _firstNonPinnedRow!),
11391155
end: TableVicinity(
1140-
column: _lastPinnedColumn!, row: _lastNonPinnedRow!),
1156+
column: _lastPinnedColumn!,
1157+
row: _lastNonPinnedRow!,
1158+
),
11411159
offset: Offset(-_hAlignmentOffset, offsetIntoRow!),
11421160
);
11431161
}
@@ -1147,19 +1165,27 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
11471165
assert(offsetIntoColumn != null);
11481166
_layoutCells(
11491167
start: TableVicinity(
1150-
column: _firstNonPinnedColumn!, row: _firstNonPinnedRow!),
1168+
column: _firstNonPinnedColumn!,
1169+
row: _firstNonPinnedRow!,
1170+
),
11511171
end: TableVicinity(
1152-
column: _lastNonPinnedColumn!, row: _lastNonPinnedRow!),
1172+
column: _lastNonPinnedColumn!,
1173+
row: _lastNonPinnedRow!,
1174+
),
11531175
offset: Offset(offsetIntoColumn!, offsetIntoRow!),
11541176
);
11551177
}
11561178
// (N, T)
11571179
if (_firstTrailingPinnedColumn != null) {
11581180
_layoutCells(
11591181
start: TableVicinity(
1160-
column: _firstTrailingPinnedColumn!, row: _firstNonPinnedRow!),
1182+
column: _firstTrailingPinnedColumn!,
1183+
row: _firstNonPinnedRow!,
1184+
),
11611185
end: TableVicinity(
1162-
column: delegate.columnCount! - 1, row: _lastNonPinnedRow!),
1186+
column: delegate.columnCount! - 1,
1187+
row: _lastNonPinnedRow!,
1188+
),
11631189
offset: Offset(trailingPinnedColumnOffset, offsetIntoRow!),
11641190
);
11651191
}
@@ -1172,7 +1198,9 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
11721198
_layoutCells(
11731199
start: TableVicinity(column: 0, row: _firstTrailingPinnedRow!),
11741200
end: TableVicinity(
1175-
column: _lastPinnedColumn!, row: delegate.rowCount! - 1),
1201+
column: _lastPinnedColumn!,
1202+
row: delegate.rowCount! - 1,
1203+
),
11761204
offset: Offset(-_hAlignmentOffset, trailingPinnedRowOffset),
11771205
);
11781206
}
@@ -1182,25 +1210,31 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
11821210
assert(offsetIntoColumn != null);
11831211
_layoutCells(
11841212
start: TableVicinity(
1185-
column: _firstNonPinnedColumn!, row: _firstTrailingPinnedRow!),
1213+
column: _firstNonPinnedColumn!,
1214+
row: _firstTrailingPinnedRow!,
1215+
),
11861216
end: TableVicinity(
1187-
column: _lastNonPinnedColumn!, row: delegate.rowCount! - 1),
1217+
column: _lastNonPinnedColumn!,
1218+
row: delegate.rowCount! - 1,
1219+
),
11881220
offset: Offset(offsetIntoColumn!, trailingPinnedRowOffset),
11891221
);
11901222
}
11911223
// (T, T)
11921224
if (_firstTrailingPinnedColumn != null) {
11931225
_layoutCells(
11941226
start: TableVicinity(
1195-
column: _firstTrailingPinnedColumn!,
1196-
row: _firstTrailingPinnedRow!),
1227+
column: _firstTrailingPinnedColumn!,
1228+
row: _firstTrailingPinnedRow!,
1229+
),
11971230
end: TableVicinity(
1198-
column: delegate.columnCount! - 1, row: delegate.rowCount! - 1),
1231+
column: delegate.columnCount! - 1,
1232+
row: delegate.rowCount! - 1,
1233+
),
11991234
offset: Offset(trailingPinnedColumnOffset, trailingPinnedRowOffset),
12001235
);
12011236
}
12021237
}
1203-
12041238
}
12051239

12061240
bool _debugCheckMergeBounds({
@@ -1241,7 +1275,8 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
12411275
'$lowerSpanOrientation ${pinnedSpanCount - 1}.',
12421276
);
12431277
}
1244-
if (spanCount != null && spanMergeEnd >= spanCount - trailingPinnedSpanCount) {
1278+
if (spanCount != null &&
1279+
spanMergeEnd >= spanCount - trailingPinnedSpanCount) {
12451280
// Merged cells cannot span trailing pinned and unpinned cells.
12461281
assert(
12471282
spanMergeStart >= spanCount - trailingPinnedSpanCount,
@@ -1348,12 +1383,14 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
13481383
rowIsPinned,
13491384
)) {
13501385
// Both row and column are pinned at this cell, or just pinned row.
1351-
(true, true) || (false, true) => firstRow >= (_firstTrailingPinnedRow ?? double.maxFinite.toInt())
1352-
? viewportDimension.height - _trailingPinnedRowsExtent
1353-
: 0.0,
1386+
(true, true) || (false, true) =>
1387+
firstRow >=
1388+
(_firstTrailingPinnedRow ?? double.maxFinite.toInt())
1389+
? viewportDimension.height - _trailingPinnedRowsExtent
1390+
: 0.0,
13541391
// Cell is within a pinned column, or no pinned area at all.
1355-
(true, false) ||
1356-
(false, false) => _leadingPinnedRowsExtent - verticalOffset.pixels,
1392+
(true, false) || (false, false) =>
1393+
_leadingPinnedRowsExtent - verticalOffset.pixels,
13571394
};
13581395
mergedRowOffset =
13591396
baseRowOffset +
@@ -1392,12 +1429,14 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
13921429
columnIsPinned,
13931430
)) {
13941431
// Both row and column are pinned at this cell, or just pinned column.
1395-
(true, true) || (false, true) => firstColumn >= (_firstTrailingPinnedColumn ?? double.maxFinite.toInt())
1396-
? viewportDimension.width - _trailingPinnedColumnsExtent
1397-
: 0.0,
1432+
(true, true) || (false, true) =>
1433+
firstColumn >=
1434+
(_firstTrailingPinnedColumn ?? double.maxFinite.toInt())
1435+
? viewportDimension.width - _trailingPinnedColumnsExtent
1436+
: 0.0,
13981437
// Cell is within a pinned row, or no pinned area at all.
1399-
(true, false) ||
1400-
(false, false) => _leadingPinnedColumnsExtent - horizontalOffset.pixels,
1438+
(true, false) || (false, false) =>
1439+
_leadingPinnedColumnsExtent - horizontalOffset.pixels,
14011440
};
14021441
mergedColumnOffset =
14031442
baseColumnOffset +
@@ -1481,8 +1520,6 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
14811520
LayerHandle<ClipRectLayer>();
14821521
final LayerHandle<ClipRectLayer> _clipCellsHandle =
14831522
LayerHandle<ClipRectLayer>();
1484-
final LayerHandle<ClipRectLayer> _clipIntersectionsHandle =
1485-
LayerHandle<ClipRectLayer>();
14861523

14871524
@override
14881525
void paint(PaintingContext context, Offset offset) {
@@ -1617,8 +1654,10 @@ class RenderTableViewport extends RenderTwoDimensionalViewport {
16171654
_paintCells(
16181655
context: context,
16191656
offset: offset,
1620-
leadingVicinity:
1621-
TableVicinity(column: _firstNonPinnedColumn!, row: 0),
1657+
leadingVicinity: TableVicinity(
1658+
column: _firstNonPinnedColumn!,
1659+
row: 0,
1660+
),
16221661
trailingVicinity: TableVicinity(
16231662
column: _lastNonPinnedColumn!,
16241663
row: _lastPinnedRow!,

0 commit comments

Comments
 (0)