Skip to content

Commit 5c82223

Browse files
committed
v1.0.3
1 parent 225ec11 commit 5c82223

File tree

8 files changed

+102
-62
lines changed

8 files changed

+102
-62
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,8 @@
1515

1616
- resolved name conflicts for `TableColumnWidth`s
1717
- exposed it to used
18+
19+
## 1.0.3
20+
21+
- removed unnecessary properties
22+
- fixed bugs

example/lib/main.dart

Lines changed: 81 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,16 @@ class _MainAppState extends State<MainApp> {
4141
animationDuration: const Duration(microseconds: 0),
4242
header: DxTableHeader(
4343
titleAlignment: Alignment.centerLeft,
44-
backgroundColor: Colors.red,
44+
backgroundColor: Colors.deepPurple,
4545
titles:
4646
TableData.headerTitles.map((e) => _headerElement(e)).toList(),
4747
),
4848
rows: TableData.players.map((e) => dxTableRow(e)).toList(),
4949
dxTableController: dxTableController,
50+
onClick: (index) {
51+
dxTableController.select(index, refreshState: true);
52+
print(index);
53+
},
5054
),
5155
),
5256
),
@@ -56,23 +60,90 @@ class _MainAppState extends State<MainApp> {
5660
DxHeaderElement _headerElement(String title) {
5761
return DxHeaderElement(
5862
align: Alignment.centerLeft,
59-
backgroundColor:
60-
Colors.primaries[Random().nextInt(Colors.primaries.length - 1)],
63+
64+
sortingMechanism: DxTableSortMechanism<String>(
65+
comparator: (a, b) => a.compareTo(b) < 0,
66+
),
67+
// backgroundColor:
68+
// Colors.primaries[Random().nextInt(Colors.primaries.length - 1)],
6169
builder: (context, sortState, index) {
62-
return Text(
63-
title,
64-
style: const TextStyle(
65-
color: Colors.white,
66-
),
70+
return Row(
71+
mainAxisAlignment: MainAxisAlignment.start,
72+
crossAxisAlignment: CrossAxisAlignment.center,
73+
children: [
74+
Text(
75+
title,
76+
style: const TextStyle(
77+
color: Colors.white,
78+
),
79+
),
80+
const SizedBox(width: 5),
81+
_sortStateBasedArrow(sortState, index)
82+
],
6783
);
6884
},
6985
);
7086
}
7187

88+
Widget _sortStateBasedArrow(DxTableSortState sortState, int index) {
89+
switch (sortState) {
90+
case DxTableSortState.unsorted:
91+
return InkWell(
92+
onTap: () => dxTableController.sort(index),
93+
child: const SizedBox(
94+
height: 10,
95+
width: 10,
96+
child: RotatedBox(
97+
quarterTurns: 3,
98+
child: Icon(
99+
Icons.arrow_back_ios,
100+
size: 10,
101+
color: Colors.grey,
102+
),
103+
),
104+
),
105+
);
106+
case DxTableSortState.sorted:
107+
return InkWell(
108+
onTap: () => dxTableController.sort(index),
109+
child: const SizedBox(
110+
height: 10,
111+
width: 10,
112+
child: RotatedBox(
113+
quarterTurns: 3,
114+
child: Icon(
115+
Icons.arrow_back_ios,
116+
color: Colors.white,
117+
size: 10,
118+
),
119+
),
120+
),
121+
);
122+
case DxTableSortState.reversed:
123+
return InkWell(
124+
onTap: () => dxTableController.clearSort(),
125+
child: const SizedBox(
126+
height: 10,
127+
width: 10,
128+
child: RotatedBox(
129+
quarterTurns: 1,
130+
child: Icon(
131+
Icons.arrow_back_ios,
132+
color: Colors.white,
133+
size: 10,
134+
),
135+
),
136+
),
137+
);
138+
}
139+
}
140+
72141
DxTableRow dxTableRow(PlayerDataModel playerDataModel) {
73142
return DxTableRow(
74143
backgroundColor: Colors.white,
75144
hoverColor: Colors.grey,
145+
selectedColor: Colors.grey,
146+
enableSelection: true,
76147
children: [
77148
_rowElement(playerDataModel.id.toString()),
78149
_rowElement(playerDataModel.name),
@@ -87,7 +158,8 @@ class _MainAppState extends State<MainApp> {
87158
}
88159

89160
DxTableRowElement<dynamic> _rowElement(String value) {
90-
return DxTableRowElement(
161+
return DxTableRowElement<String>(
162+
sortElement: value,
91163
builder: (context, isSelected, isHovered, hoverValue, rowIndex) {
92164
return Text(
93165
value,

example/pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ packages:
4747
path: ".."
4848
relative: true
4949
source: path
50-
version: "1.0.2"
50+
version: "1.0.3"
5151
fake_async:
5252
dependency: transitive
5353
description:

lib/src/dx_table.dart

Lines changed: 7 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,7 @@ library dx_table;
33

44
import 'package:dx_table/src/renderer/flutter_table.dart';
55
import 'package:dx_table/src/renderer/rendering.dart';
6-
import 'package:flutter/material.dart'
7-
hide
8-
Table,
9-
TableRow,
10-
DxTableCellVerticalAlignment,
11-
DxTableColumnWidth,
12-
DxIntrinsicColumnWidth;
6+
import 'package:flutter/material.dart' hide Table, TableRow;
137

148
part 'dx_table_controller.dart';
159
part 'dx_table_header.dart';
@@ -30,7 +24,7 @@ class DxTable extends StatefulWidget {
3024
final DxTableController dxTableController;
3125
final DxRowClickCallback? onClick;
3226
final bool enableFilter;
33-
final bool enableSort;
27+
3428
final double? height;
3529
final DxTableColumnWidth tableColumnWidth;
3630
final Map<int, DxTableColumnWidth>? columnWidthMap;
@@ -45,7 +39,6 @@ class DxTable extends StatefulWidget {
4539
this.margin,
4640
this.onClick,
4741
this.enableFilter = false,
48-
this.enableSort = false,
4942
this.height,
5043
this.tableColumnWidth = const DxIntrinsicColumnWidth(flex: null),
5144
this.columnWidthMap,
@@ -88,28 +81,6 @@ class _DxTableState extends State<DxTable> with SingleTickerProviderStateMixin {
8881
setState(() {});
8982
}
9083

91-
// void _renderStickyHeader() {
92-
// OverlayEntry overlayEntry = OverlayEntry(
93-
// builder: (context) {
94-
// return Positioned(
95-
// top: 0,
96-
// child: Row(
97-
// children: widget.dxTableController._columnWidths
98-
// .map((e) => Container(
99-
// height: widget.dxTableController._rowHeight,
100-
// width: e,
101-
// color: Colors.primaries[
102-
// Random().nextInt(Colors.primaries.length - 1)],
103-
// ))
104-
// .toList(),
105-
// ),
106-
// );
107-
// },
108-
// );
109-
110-
// Overlay.of(context).insert(overlayEntry);
111-
// }
112-
11384
@override
11485
void dispose() {
11586
widget.dxTableController.dispose();
@@ -148,9 +119,11 @@ class _DxTableState extends State<DxTable> with SingleTickerProviderStateMixin {
148119
defaultColumnWidth: widget.tableColumnWidth,
149120
columnWidths: widget.columnWidthMap,
150121
children: [
151-
...widget.dxTableController._filteredRows.map(
152-
(e) => e._build,
153-
),
122+
...List<TableRow>.generate(
123+
widget.dxTableController._filteredRows.length,
124+
(index) => widget
125+
.dxTableController._filteredRows[index]
126+
._build(index)),
154127
],
155128
dxTableController: widget.dxTableController,
156129
),

lib/src/dx_table_row.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,17 @@ class DxTableRow {
4343

4444
List<Widget> elementsCache = [];
4545

46-
TableRow get _build {
47-
_generateElementCache();
46+
TableRow _build(int currentRowIndex) {
47+
_generateElementCache(currentRowIndex);
4848
return _renderRow();
4949
}
5050

51-
void _generateElementCache({bool regenerate = false}) {
51+
void _generateElementCache(int currentRowIndex, {bool regenerate = false}) {
5252
if (!regenerate) elementsCache.clear();
5353
for (int idx = 0; idx < children.length; idx++) {
5454
DxTableRowElement ele = children[idx];
5555
if (!regenerate) ele._init(_context, _tc, _index);
56-
elementsCache.add(ele._build);
56+
elementsCache.add(ele._build(currentRowIndex));
5757
}
5858
}
5959

lib/src/dx_table_row_element.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class DxTableRowElement<T> {
3737
this.sortElement,
3838
});
3939

40-
Widget get _build {
40+
Widget _build(int currentIndex) {
4141
return MouseRegion(
4242
cursor: SystemMouseCursors.click,
4343
onEnter: (event) => _tc._startedRowHover(_index),
@@ -56,7 +56,7 @@ class DxTableRowElement<T> {
5656
_index == _tc._selectedIndex,
5757
_index == _tc._activeHoverIndex,
5858
_tc._getValue(_index),
59-
_index,
59+
currentIndex,
6060
),
6161
),
6262
),

lib/src/renderer/flutter_table.dart

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,7 @@ import 'package:dx_table/src/renderer/flutter_table_border.dart';
99
import 'package:dx_table/src/renderer/rendering.dart';
1010
import 'package:flutter/foundation.dart';
1111
// import 'package:flutter/rendering.dart';
12-
import 'package:flutter/widgets.dart'
13-
hide
14-
DxFixedColumnWidth,
15-
DxFlexColumnWidth,
16-
DxFractionColumnWidth,
17-
DxIntrinsicColumnWidth,
18-
DxMaxColumnWidth,
19-
DxMinColumnWidth,
20-
TableBorder,
21-
DxTableCellVerticalAlignment,
22-
DxTableColumnWidth;
12+
import 'package:flutter/widgets.dart' hide TableBorder;
2313

2414
// import 'basic.dart';
2515
// import 'debug.dart';

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: dx_table
22
description: Interactive Flutter table with hover, sort, filter, and sticky header.
3-
version: 1.0.2
3+
version: 1.0.3
44
homepage: https://github.com/codewave-tech/dx_table
55

66
environment:

0 commit comments

Comments
 (0)