build method
Implementation
Widget build(BuildContext context) {
final flattenedData = Data.of<_FlattenedTableCell>(context);
final resizedData = Data.maybeOf<_ResizableTableData>(context);
final resizedState = Data.maybeOf<_ResizableTableState>(context);
final currentCell = _HoveredCell(
flattenedData.column,
flattenedData.row,
flattenedData.columnSpan,
flattenedData.rowSpan,
);
var theme = this.theme;
var defaultTheme = flattenedData.tableCellThemeBuilder(context);
final appTheme = Theme.of(context);
return Stack(
fit: StackFit.passthrough,
children: [
ColoredBox(
color: backgroundColor ?? appTheme.colorScheme.background,
child: MouseRegion(
onEnter: (event) {
if (flattenedData.enabled) {
flattenedData.hoveredCellNotifier.value = currentCell;
}
},
onExit: (event) {
if (flattenedData.enabled) {
if (flattenedData.hoveredCellNotifier.value == currentCell) {
flattenedData.hoveredCellNotifier.value = null;
}
}
},
child: ListenableBuilder(
// valueListenable: flattenedData.hoveredCellNotifier,
listenable: Listenable.merge([
flattenedData.hoveredCellNotifier,
flattenedData.dragNotifier,
]),
builder: (context, child) {
var hoveredCell = flattenedData.hoveredCellNotifier.value;
var drag = flattenedData.dragNotifier?.value;
if (drag != null) {
hoveredCell = null;
}
var resolvedStates = {
if (hoveredCell != null &&
((columnHover &&
hoveredCell.intersects(
currentCell, Axis.vertical)) ||
(rowHover &&
hoveredCell.intersects(
currentCell, Axis.horizontal))))
WidgetState.hovered,
if (flattenedData.selected) WidgetState.selected,
if (!flattenedData.enabled) WidgetState.disabled,
};
return Container(
decoration: BoxDecoration(
border: theme?.border?.resolve(resolvedStates) ??
defaultTheme.border?.resolve(resolvedStates),
color: theme?.backgroundColor?.resolve(resolvedStates) ??
defaultTheme.backgroundColor?.resolve(resolvedStates),
),
child: DefaultTextStyle.merge(
style: theme?.textStyle?.resolve(resolvedStates) ??
defaultTheme.textStyle?.resolve(resolvedStates),
child: child!,
),
);
},
child: child,
),
),
),
if (resizedData != null && resizedState != null)
Positioned.fill(
child: _CellResizer(
controller: resizedData.controller,
onHover: resizedState._onHover,
onDrag: resizedState._onDrag,
hoverNotifier: resizedState._hoverNotifier,
dragNotifier: resizedState._dragNotifier,
maxRow: resizedState._maxRow,
theme: resizedState.widget.theme,
maxColumn: resizedState._maxColumn),
)
],
);
}