MhItemsViewColumnDef<T> constructor
MhItemsViewColumnDef<T> ({
- required String id,
- String? header,
- Widget buildColumnHeader()?,
- double? columnWidth,
- CdItemsViewColumnTypes? columnType,
- Widget buildDisplay(
- BuildContext context,
- T item,
- MhItemsViewDisplayInfo displayInfo
- Object? getDisplayValue(
- T
- Alignment alignment = Alignment.center,
- EdgeInsetsGeometry? padding,
- Widget buildEdit(
- T
- Object? getEditValue(
- T
- void setEditValue(
- T,
- Object?
- bool allowEdit(
- T item
- bool allowSorting = false,
- Object getSortValue(
- T item
Implementation
MhItemsViewColumnDef({
required this.id,
String? header,
Widget Function(BuildContext, MhItemsViewState<T>)? buildColumnHeader,
double? columnWidth,
CdItemsViewColumnTypes? columnType,
Widget Function(
BuildContext context, T item, MhItemsViewDisplayInfo displayInfo)?
buildDisplay,
Object? Function(T)? getDisplayValue,
this.alignment = Alignment.center,
this.padding,
Widget Function(T)? buildEdit,
Object? Function(T)? getEditValue,
void Function(T, Object?)? setEditValue,
this.allowEdit,
this.allowSorting = false,
this.getSortValue,
}) {
//Type
if (columnType == null) {
this.columnType = CdItemsViewColumnTypes.string;
} else {
this.columnType = columnType;
}
//Column Header
if (buildColumnHeader != null) {
_buildColumnHeader = buildColumnHeader;
} else {
switch (this.columnType) {
case CdItemsViewColumnTypes.select:
_buildColumnHeader = (context, state) {
if (state.settings.selectionSettings.selectionMode ==
MhItemsViewSelectionModes.multiple) {
return Padding(
padding: const EdgeInsets.only(left: 5),
child: Checkbox(
value: areAllSelected?.call(),
tristate: true,
onChanged: (bool? value) {
setAllSelected?.call(value == true);
},
),
);
}
return const SizedBox();
};
break;
case CdItemsViewColumnTypes.reorder:
_buildColumnHeader = (context, state) {
return const SizedBox();
};
break;
default:
_header = header ?? "";
_buildColumnHeader = (context, state) {
var textColor = state.theme.headerTextColor;
return Center(
child: MhTitleMedium(
text: _header,
textColor: textColor,
paddingTop: 0,
paddingBottom: 0));
};
break;
}
}
//Value
if (buildDisplay != null) {
_buildValue = buildDisplay;
} else {
switch (columnType) {
case CdItemsViewColumnTypes.select:
_buildValue = (context, item, rowIsSelected) => Center(
child: Checkbox(
value: isSelected?.call(item),
onChanged: (bool? value) {
setSelected?.call(item, value == true);
},
),
);
break;
case CdItemsViewColumnTypes.reorder:
_buildValue = (context, item, displayInfo) {
var state = context.read<MhItemsViewState<T>>();
var allowDrag = state.settings.dragDropSettings.allowReorder ||
state.settings.dragDropSettings.allowDrag;
if (allowDrag &&
state.settings.dragDropSettings.dragDropMode ==
MhItemsViewDragDropModes.reorderColumnOnly) {
return state.widget._controller.widgetState!.buildDraggable(
item,
state,
displayInfo.vicinity,
context,
const Center(
child:
Opacity(opacity: 0.3, child: Icon(Icons.reorder))));
}
return const Center(
child: Opacity(opacity: 0.3, child: Icon(Icons.reorder)));
};
break;
case CdItemsViewColumnTypes.bool:
_buildValue = (context, item, rowIsSelected) => Center(
child: Checkbox(
value: getDisplayValueBool(item),
onChanged: (bool? value) {
setEditValue?.call(item, value);
},
));
break;
default:
_buildValue = (context, item, displayInfo) {
var state = context.read<MhItemsViewState<T>>();
return Align(
alignment: alignment,
child: MhBodyMedium(
text: getDisplayValue?.call(item)?.toString() ?? "",
textColor: displayInfo.rowIsSelected
? state.theme.selectionTextColor
: state.theme.textColor,
topPadding: 0,
bottomPadding: 0,
));
};
break;
}
}
_getEditValue = getEditValue ?? (item) => item.toString();
_setEditValue = setEditValue;
_getDisplayValue = getDisplayValue ?? (item) => item.toString();
//Settings
if (columnWidth != null) {
this._columnWidth = columnWidth;
this.virtualColumnWidth = columnWidth;
} else {
this._columnWidthAuto = true;
}
// Prepare for Sorting
if (!showSortIconOnHover) {
_showSortIcon = true;
}
_sortDef = MhItemsViewSortDef<T>(
getSortValue: _getSortValue,
columnDef: this,
sortDirection: MhItemsViewSortDirections.none);
}