pickGridValueSet<T> static method
Future<Set<T> ?>
pickGridValueSet<T>(
- List<
T> items, { - Iterable<
T> ? selected, - String? title,
- Widget onItemView(
- T,
- Set<
T>
- Widget? onTitle(
- T
- Widget? onHeader(
- T
- List<
Widget> ? aboveWidgets, - List<
Widget> ? belowWidgets, - int columnCount = 0,
- double itemWidth = 80,
- double? itemHeight,
- double aspectRatio = 1.0,
- double verticalSpacing = 0.0,
- double horizontalSpacing = 0.0,
- EdgeInsets? padding,
- DialogWidth? dialogWidth,
Implementation
static Future<Set<T>?> pickGridValueSet<T>(
List<T> items, {
Iterable<T>? selected,
String? title,
Widget Function(T, Set<T>)? onItemView,
Widget? Function(T)? onTitle,
Widget? Function(T)? onHeader,
Widget? Function(T)? onFooter,
List<Widget>? aboveWidgets,
List<Widget>? belowWidgets,
int columnCount = 0,
double itemWidth = 80,
double? itemHeight,
double aspectRatio = 1.0,
double verticalSpacing = 0.0,
double horizontalSpacing = 0.0,
EdgeInsets? padding,
DialogWidth? dialogWidth,
}) async {
Set<T> resultSet = {};
if (selected != null) resultSet.addAll(selected);
return await showDialogX((b) {
b.init(result: resultSet);
return b.buildGrid(items,
aboveWidgets: aboveWidgets,
belowWidgets: belowWidgets,
columnCount: columnCount,
itemWidth: itemWidth,
itemHeight: itemHeight,
aspectRatio: aspectRatio,
verticalSpacing: verticalSpacing,
horizontalSpacing: horizontalSpacing,
padding: padding, builder: (iic) {
T item = iic.item;
Widget cell;
if (onItemView != null) {
cell = onItemView.call(item, resultSet);
} else {
bool checked = resultSet.contains(item);
cell = GridTile(
header: onHeader?.call(item),
footer: onFooter?.call(item),
child: onTitle?.call(item) ?? item.toString().titleMedium().centered(),
).let((e) {
if (!checked) return e;
return e.coloredBox(b.gridSelectedBackground).clipRoundRect(3);
});
}
return cell.inkWell(onTap: () {
if (resultSet.contains(item)) {
resultSet.remove(item);
} else {
resultSet.add(item);
}
b.updateState();
});
}, title: title, ok: true, cancel: true, dialogWidth: dialogWidth);
});
}