flet-datatable2 0.1.0.dev1__py3-none-any.whl → 0.2.0.dev45__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of flet-datatable2 might be problematic. Click here for more details.
- flet_datatable2/__init__.py +4 -5
- flet_datatable2/datacolumn2.py +18 -164
- flet_datatable2/datarow2.py +45 -207
- flet_datatable2/datatable2.py +108 -834
- flet_datatable2/types.py +18 -0
- flet_datatable2-0.2.0.dev45.dist-info/METADATA +63 -0
- flet_datatable2-0.2.0.dev45.dist-info/RECORD +20 -0
- {flet_datatable2-0.1.0.dev1.dist-info → flet_datatable2-0.2.0.dev45.dist-info}/WHEEL +1 -1
- flet_datatable2-0.2.0.dev45.dist-info/licenses/LICENSE +201 -0
- flutter/flet_datatable2/lib/flet_datatable2.dart +3 -1
- flutter/flet_datatable2/lib/src/datatable2.dart +162 -276
- flutter/flet_datatable2/lib/src/extension.dart +16 -0
- flutter/flet_datatable2/lib/src/utils/datatable.dart +11 -0
- flutter/flet_datatable2/pubspec.lock +93 -68
- flutter/flet_datatable2/pubspec.yaml +8 -3
- flet_datatable2-0.1.0.dev1.dist-info/METADATA +0 -38
- flet_datatable2-0.1.0.dev1.dist-info/RECORD +0 -17
- flutter/flet_datatable2/lib/src/create_control.dart +0 -22
- {flet_datatable2-0.1.0.dev1.dist-info → flet_datatable2-0.2.0.dev45.dist-info}/top_level.txt +0 -0
|
@@ -1,32 +1,23 @@
|
|
|
1
|
-
import 'dart:convert';
|
|
2
|
-
|
|
3
|
-
import 'package:collection/collection.dart';
|
|
4
1
|
import 'package:data_table_2/data_table_2.dart';
|
|
5
2
|
import 'package:flet/flet.dart' as ft;
|
|
6
3
|
import 'package:flet/flet.dart';
|
|
7
4
|
import 'package:flutter/material.dart';
|
|
8
5
|
|
|
6
|
+
import 'utils/datatable.dart';
|
|
7
|
+
|
|
9
8
|
class DataTable2Control extends StatefulWidget {
|
|
10
|
-
final Control? parent;
|
|
11
9
|
final Control control;
|
|
12
|
-
final List<Control> children;
|
|
13
|
-
final bool parentDisabled;
|
|
14
|
-
final FletControlBackend backend;
|
|
15
10
|
|
|
16
|
-
const DataTable2Control(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
required this.children,
|
|
21
|
-
required this.parentDisabled,
|
|
22
|
-
required this.backend});
|
|
11
|
+
const DataTable2Control({
|
|
12
|
+
super.key,
|
|
13
|
+
required this.control,
|
|
14
|
+
});
|
|
23
15
|
|
|
24
16
|
@override
|
|
25
17
|
State<DataTable2Control> createState() => _DataTable2ControlState();
|
|
26
18
|
}
|
|
27
19
|
|
|
28
|
-
class _DataTable2ControlState extends State<DataTable2Control>
|
|
29
|
-
with FletStoreMixin {
|
|
20
|
+
class _DataTable2ControlState extends State<DataTable2Control> {
|
|
30
21
|
//final ScrollController _horizontalController = ScrollController();
|
|
31
22
|
//final ScrollController _controller = ScrollController();
|
|
32
23
|
|
|
@@ -39,271 +30,166 @@ class _DataTable2ControlState extends State<DataTable2Control>
|
|
|
39
30
|
|
|
40
31
|
@override
|
|
41
32
|
Widget build(BuildContext context) {
|
|
42
|
-
debugPrint("
|
|
33
|
+
debugPrint("DataTable2Control build: ${widget.control.id}");
|
|
43
34
|
|
|
44
|
-
|
|
35
|
+
var bgColor = widget.control.getString("bgcolor");
|
|
36
|
+
var border = widget.control.getBorder("border", Theme.of(context));
|
|
37
|
+
var borderRadius = widget.control.getBorderRadius("border_radius");
|
|
38
|
+
var gradient = widget.control.getGradient("gradient", Theme.of(context));
|
|
39
|
+
var horizontalLines =
|
|
40
|
+
widget.control.getBorderSide("horizontal_lines", Theme.of(context));
|
|
41
|
+
var verticalLines =
|
|
42
|
+
widget.control.getBorderSide("vertical_lines", Theme.of(context));
|
|
43
|
+
var defaultDecoration =
|
|
44
|
+
Theme.of(context).dataTableTheme.decoration ?? const BoxDecoration();
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
46
|
+
BoxDecoration? decoration;
|
|
47
|
+
if (bgColor != null ||
|
|
48
|
+
border != null ||
|
|
49
|
+
borderRadius != null ||
|
|
50
|
+
gradient != null) {
|
|
51
|
+
decoration = (defaultDecoration as BoxDecoration).copyWith(
|
|
52
|
+
color: parseColor(bgColor, Theme.of(context)),
|
|
53
|
+
border: border,
|
|
54
|
+
borderRadius: borderRadius,
|
|
55
|
+
gradient: gradient);
|
|
53
56
|
}
|
|
54
57
|
|
|
55
|
-
var
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
: null
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
widget.control
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
widget.control.attrString("headingCheckboxTheme") != null
|
|
134
|
-
? json.decode(
|
|
135
|
-
widget.control.attrString("headingCheckboxTheme")!)
|
|
136
|
-
: null),
|
|
137
|
-
datarowCheckboxTheme: parseCheckboxTheme(
|
|
138
|
-
Theme.of(context),
|
|
139
|
-
widget.control.attrString("dataRowCheckboxTheme") != null
|
|
140
|
-
? json.decode(
|
|
141
|
-
widget.control.attrString("dataRowCheckboxTheme")!)
|
|
142
|
-
: null),
|
|
143
|
-
showHeadingCheckBox:
|
|
144
|
-
widget.control.attrBool("showHeadingCheckbox", true)!,
|
|
145
|
-
columnSpacing: widget.control.attrDouble("columnSpacing"),
|
|
146
|
-
dataRowColor: parseWidgetStateColor(
|
|
147
|
-
Theme.of(context), widget.control, "dataRowColor"),
|
|
148
|
-
dataRowHeight: widget.control.attrDouble("dataRowHeight"),
|
|
149
|
-
//dataRowMinHeight: widget.control.attrDouble("dataRowMinHeight"),
|
|
150
|
-
//dataRowMaxHeight: widget.control.attrDouble("dataRowMaxHeight"),
|
|
151
|
-
dataTextStyle: parseTextStyle(
|
|
152
|
-
Theme.of(context), widget.control, "dataTextStyle"),
|
|
153
|
-
headingRowColor: parseWidgetStateColor(
|
|
154
|
-
Theme.of(context), widget.control, "headingRowColor"),
|
|
155
|
-
headingRowHeight: widget.control.attrDouble("headingRowHeight"),
|
|
156
|
-
headingTextStyle: parseTextStyle(
|
|
157
|
-
Theme.of(context), widget.control, "headingTextStyle"),
|
|
158
|
-
headingRowDecoration: parseBoxDecoration(Theme.of(context),
|
|
159
|
-
widget.control, "headingRowDecoration", pageArgs),
|
|
160
|
-
dividerThickness: widget.control.attrDouble("dividerThickness"),
|
|
161
|
-
horizontalMargin: widget.control.attrDouble("horizontalMargin"),
|
|
162
|
-
showBottomBorder:
|
|
163
|
-
widget.control.attrBool("showBottomBorder", false)!,
|
|
164
|
-
showCheckboxColumn:
|
|
165
|
-
widget.control.attrBool("showCheckboxColumn", false)!,
|
|
166
|
-
sortAscending: widget.control.attrBool("sortAscending", false)!,
|
|
167
|
-
sortColumnIndex: widget.control.attrInt("sortColumnIndex"),
|
|
168
|
-
onSelectAll: widget.control.attrBool("onSelectAll", false)!
|
|
169
|
-
? (selected) {
|
|
170
|
-
widget.backend.triggerControlEvent(
|
|
171
|
-
widget.control.id,
|
|
172
|
-
"select_all",
|
|
173
|
-
selected != null ? selected.toString() : "");
|
|
174
|
-
}
|
|
58
|
+
var datatable2 = DataTable2(
|
|
59
|
+
// scrollController: _controller,
|
|
60
|
+
// horizontalScrollController: _horizontalController,
|
|
61
|
+
decoration: decoration,
|
|
62
|
+
border: (horizontalLines != null || verticalLines != null)
|
|
63
|
+
? TableBorder(
|
|
64
|
+
horizontalInside: horizontalLines ?? BorderSide.none,
|
|
65
|
+
verticalInside: verticalLines ?? BorderSide.none)
|
|
66
|
+
: null,
|
|
67
|
+
clipBehavior: widget.control.getClipBehavior("clip_behavior", Clip.none)!,
|
|
68
|
+
checkboxHorizontalMargin:
|
|
69
|
+
widget.control.getDouble("checkbox_horizontal_margin"),
|
|
70
|
+
columnSpacing: widget.control.getDouble("column_spacing"),
|
|
71
|
+
minWidth: widget.control.getDouble("min_width"),
|
|
72
|
+
bottomMargin: widget.control.getDouble("bottom_margin"),
|
|
73
|
+
empty: widget.control.buildWidget("empty"),
|
|
74
|
+
isHorizontalScrollBarVisible:
|
|
75
|
+
widget.control.getBool("visible_horizontal_scroll_bar"),
|
|
76
|
+
isVerticalScrollBarVisible:
|
|
77
|
+
widget.control.getBool("visible_vertical_scroll_bar"),
|
|
78
|
+
fixedLeftColumns: widget.control.getInt("fixed_left_columns", 0)!,
|
|
79
|
+
fixedTopRows: widget.control.getInt("fixed_top_rows", 1)!,
|
|
80
|
+
fixedColumnsColor:
|
|
81
|
+
widget.control.getColor("fixed_columns_color", context),
|
|
82
|
+
fixedCornerColor: widget.control.getColor("fixed_corner_color", context),
|
|
83
|
+
smRatio: widget.control.getDouble("sm_ratio", 0.67)!,
|
|
84
|
+
lmRatio: widget.control.getDouble("lm_ratio", 1.2)!,
|
|
85
|
+
sortArrowIcon:
|
|
86
|
+
widget.control.getIcon("sort_arrow_icon") ?? Icons.arrow_upward,
|
|
87
|
+
sortArrowAnimationDuration: widget.control.getDuration(
|
|
88
|
+
"sort_arrow_animation_duration", Duration(microseconds: 150))!,
|
|
89
|
+
checkboxAlignment:
|
|
90
|
+
widget.control.getAlignment("checkboxAlignment", Alignment.center)!,
|
|
91
|
+
headingCheckboxTheme: widget.control
|
|
92
|
+
.getCheckboxTheme("heading_checkbox_theme", Theme.of(context)),
|
|
93
|
+
datarowCheckboxTheme: widget.control
|
|
94
|
+
.getCheckboxTheme("data_row_checkbox_theme", Theme.of(context)),
|
|
95
|
+
showHeadingCheckBox:
|
|
96
|
+
widget.control.getBool("show_heading_checkbox", true)!,
|
|
97
|
+
dataRowColor: widget.control
|
|
98
|
+
.getWidgetStateColor("data_row_color", Theme.of(context)),
|
|
99
|
+
dataRowHeight: widget.control.getDouble("data_row_height"),
|
|
100
|
+
sortArrowIconColor:
|
|
101
|
+
widget.control.getColor("sort_arrow_icon_color", context),
|
|
102
|
+
dataTextStyle:
|
|
103
|
+
widget.control.getTextStyle("data_text_style", Theme.of(context)),
|
|
104
|
+
headingRowColor: widget.control
|
|
105
|
+
.getWidgetStateColor("heading_row_color", Theme.of(context)),
|
|
106
|
+
headingRowHeight: widget.control.getDouble("heading_row_height"),
|
|
107
|
+
headingTextStyle:
|
|
108
|
+
widget.control.getTextStyle("heading_text_style", Theme.of(context)),
|
|
109
|
+
headingRowDecoration:
|
|
110
|
+
widget.control.getBoxDecoration("heading_row_decoration", context),
|
|
111
|
+
dividerThickness: widget.control.getDouble("divider_thickness"),
|
|
112
|
+
horizontalMargin: widget.control.getDouble("horizontal_margin"),
|
|
113
|
+
showBottomBorder: widget.control.getBool("show_bottom_border", false)!,
|
|
114
|
+
showCheckboxColumn:
|
|
115
|
+
widget.control.getBool("show_checkbox_column", false)!,
|
|
116
|
+
sortAscending: widget.control.getBool("sort_ascending", false)!,
|
|
117
|
+
sortColumnIndex: widget.control.getInt("sort_column_index"),
|
|
118
|
+
onSelectAll: widget.control.getBool("on_select_all", false)!
|
|
119
|
+
? (bool? selected) =>
|
|
120
|
+
widget.control.triggerEvent("select_all", selected)
|
|
121
|
+
: null,
|
|
122
|
+
columns: widget.control.children("columns").map((column) {
|
|
123
|
+
column.notifyParent = true;
|
|
124
|
+
var tooltip =
|
|
125
|
+
parseTooltip(column.get("tooltip"), context, const Placeholder());
|
|
126
|
+
return DataColumn2(
|
|
127
|
+
size: parseColumnSize(column.getString("size"), ColumnSize.S)!,
|
|
128
|
+
fixedWidth: column.getDouble("fixed_width"),
|
|
129
|
+
numeric: column.getBool("numeric", false)!,
|
|
130
|
+
tooltip: tooltip?.message,
|
|
131
|
+
headingRowAlignment:
|
|
132
|
+
column.getMainAxisAlignment("heading_row_alignment"),
|
|
133
|
+
onSort: column.getBool("on_sort", false)!
|
|
134
|
+
? (columnIndex, ascending) => column
|
|
135
|
+
.triggerEvent("sort", {"ci": columnIndex, "asc": ascending})
|
|
175
136
|
: null,
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
? () {
|
|
232
|
-
widget.backend.triggerControlEvent(
|
|
233
|
-
row.control.id, "double_tap");
|
|
234
|
-
}
|
|
235
|
-
: null,
|
|
236
|
-
onTap: row.control.attrBool("onTap", false)!
|
|
237
|
-
? () {
|
|
238
|
-
widget.backend
|
|
239
|
-
.triggerControlEvent(row.control.id, "tap");
|
|
240
|
-
}
|
|
241
|
-
: null,
|
|
242
|
-
onSecondaryTap: row.control.attrBool("onSecondaryTap", false)!
|
|
243
|
-
? () {
|
|
244
|
-
widget.backend.triggerControlEvent(
|
|
245
|
-
row.control.id, "secondary_tap");
|
|
246
|
-
}
|
|
247
|
-
: null,
|
|
248
|
-
onSecondaryTapDown:
|
|
249
|
-
row.control.attrBool("onSecondaryTapDown", false)!
|
|
250
|
-
? (details) {
|
|
251
|
-
widget.backend.triggerControlEvent(
|
|
252
|
-
row.control.id, "secondary_tap_down");
|
|
253
|
-
}
|
|
254
|
-
: null,
|
|
255
|
-
cells: row.children
|
|
256
|
-
.where((c) => c.type == "datacell" && c.isVisible)
|
|
257
|
-
.map((cell) => DataCell(
|
|
258
|
-
ft.createControl(row.control, cell.childIds.first,
|
|
259
|
-
row.control.isDisabled || tableDisabled),
|
|
260
|
-
placeholder: cell.attrBool("placeholder", false)!,
|
|
261
|
-
showEditIcon: cell.attrBool("showEditIcon", false)!,
|
|
262
|
-
onDoubleTap: cell.attrBool("onDoubleTap", false)!
|
|
263
|
-
? () {
|
|
264
|
-
widget.backend.triggerControlEvent(
|
|
265
|
-
cell.id, "double_tap");
|
|
266
|
-
}
|
|
267
|
-
: null,
|
|
268
|
-
onLongPress: cell.attrBool("onLongPress", false)!
|
|
269
|
-
? () {
|
|
270
|
-
widget.backend.triggerControlEvent(
|
|
271
|
-
cell.id, "long_press");
|
|
272
|
-
}
|
|
273
|
-
: null,
|
|
274
|
-
onTap: cell.attrBool("onTap", false)!
|
|
275
|
-
? () {
|
|
276
|
-
widget.backend
|
|
277
|
-
.triggerControlEvent(cell.id, "tap");
|
|
278
|
-
}
|
|
279
|
-
: null,
|
|
280
|
-
onTapCancel: cell.attrBool("onTapCancel", false)!
|
|
281
|
-
? () {
|
|
282
|
-
widget.backend.triggerControlEvent(
|
|
283
|
-
cell.id, "tap_cancel");
|
|
284
|
-
}
|
|
285
|
-
: null,
|
|
286
|
-
onTapDown: cell.attrBool("onTapDown", false)!
|
|
287
|
-
? (details) {
|
|
288
|
-
widget.backend.triggerControlEvent(
|
|
289
|
-
cell.id,
|
|
290
|
-
"tap_down",
|
|
291
|
-
json.encode({
|
|
292
|
-
"kind": details.kind?.name,
|
|
293
|
-
"lx": details.localPosition.dx,
|
|
294
|
-
"ly": details.localPosition.dy,
|
|
295
|
-
"gx": details.globalPosition.dx,
|
|
296
|
-
"gy": details.globalPosition.dy,
|
|
297
|
-
}));
|
|
298
|
-
}
|
|
299
|
-
: null,
|
|
300
|
-
))
|
|
301
|
-
.toList());
|
|
302
|
-
}).toList());
|
|
303
|
-
});
|
|
304
|
-
});
|
|
137
|
+
label: column.buildTextOrWidget("label")!);
|
|
138
|
+
}).toList(),
|
|
139
|
+
rows: widget.control.children("rows").map((row) {
|
|
140
|
+
row.notifyParent = true;
|
|
141
|
+
return DataRow2(
|
|
142
|
+
key: ValueKey(row.id),
|
|
143
|
+
selected: row.getBool("selected", false)!,
|
|
144
|
+
color: row.getWidgetStateColor("color", Theme.of(context)),
|
|
145
|
+
specificRowHeight: row.getDouble("specific_row_height"),
|
|
146
|
+
decoration: row.getBoxDecoration("decoration", context),
|
|
147
|
+
onSelectChanged: row.getBool("on_select_change", false)!
|
|
148
|
+
? (selected) => row.triggerEvent("select_change", selected)
|
|
149
|
+
: null,
|
|
150
|
+
onLongPress: row.getBool("on_long_press", false)!
|
|
151
|
+
? () => row.triggerEvent("long_press")
|
|
152
|
+
: null,
|
|
153
|
+
onDoubleTap: row.getBool("on_double_tap", false)!
|
|
154
|
+
? () => row.triggerEvent("double_tap")
|
|
155
|
+
: null,
|
|
156
|
+
onTap: row.getBool("on_tap", false)!
|
|
157
|
+
? () => row.triggerEvent("tap")
|
|
158
|
+
: null,
|
|
159
|
+
onSecondaryTap: row.getBool("on_secondary_tap", false)!
|
|
160
|
+
? () => row.triggerEvent("secondary_tap")
|
|
161
|
+
: null,
|
|
162
|
+
onSecondaryTapDown: row.getBool("on_secondary_tap_down", false)!
|
|
163
|
+
? (details) =>
|
|
164
|
+
row.triggerEvent("secondary_tap_down", details.toMap())
|
|
165
|
+
: null,
|
|
166
|
+
cells: row.children("cells").map((cell) {
|
|
167
|
+
cell.notifyParent = true;
|
|
168
|
+
return DataCell(
|
|
169
|
+
cell.buildWidget("content")!,
|
|
170
|
+
placeholder: cell.getBool("placeholder", false)!,
|
|
171
|
+
showEditIcon: cell.getBool("show_edit_icon", false)!,
|
|
172
|
+
onDoubleTap: cell.getBool("on_double_tap", false)!
|
|
173
|
+
? () => cell.triggerEvent("double_tap")
|
|
174
|
+
: null,
|
|
175
|
+
onLongPress: cell.getBool("on_long_press", false)!
|
|
176
|
+
? () => cell.triggerEvent("long_press")
|
|
177
|
+
: null,
|
|
178
|
+
onTap: cell.getBool("on_tap", false)!
|
|
179
|
+
? () => cell.triggerEvent("tap")
|
|
180
|
+
: null,
|
|
181
|
+
onTapCancel: cell.getBool("on_tap_cancel", false)!
|
|
182
|
+
? () => cell.triggerEvent("tap_cancel")
|
|
183
|
+
: null,
|
|
184
|
+
onTapDown: cell.getBool("on_tap_down", false)!
|
|
185
|
+
? (details) => cell.triggerEvent("tap_down", details.toMap())
|
|
186
|
+
: null,
|
|
187
|
+
);
|
|
188
|
+
}).toList(),
|
|
189
|
+
);
|
|
190
|
+
}).toList(),
|
|
191
|
+
);
|
|
305
192
|
|
|
306
|
-
return
|
|
307
|
-
context, datatable, widget.parent, widget.control);
|
|
193
|
+
return ConstrainedControl(control: widget.control, child: datatable2);
|
|
308
194
|
}
|
|
309
195
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import 'package:flet/flet.dart';
|
|
2
|
+
import 'package:flutter/widgets.dart';
|
|
3
|
+
|
|
4
|
+
import 'datatable2.dart';
|
|
5
|
+
|
|
6
|
+
class Extension extends FletExtension {
|
|
7
|
+
@override
|
|
8
|
+
Widget? createWidget(Key? key, Control control) {
|
|
9
|
+
switch (control.type) {
|
|
10
|
+
case "DataTable2":
|
|
11
|
+
return DataTable2Control(key: key, control: control);
|
|
12
|
+
default:
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import 'package:collection/collection.dart';
|
|
2
|
+
import 'package:data_table_2/data_table_2.dart';
|
|
3
|
+
|
|
4
|
+
ColumnSize? parseColumnSize(String? size, [ColumnSize? defValue]) {
|
|
5
|
+
if (size == null) {
|
|
6
|
+
return defValue;
|
|
7
|
+
}
|
|
8
|
+
return ColumnSize.values.firstWhereOrNull(
|
|
9
|
+
(e) => e.name.toLowerCase() == size.toLowerCase()) ??
|
|
10
|
+
defValue;
|
|
11
|
+
}
|