pickGridValueSet<T> static method

Future<Set<T>?> pickGridValueSet<T>(
  1. List<T> items, {
  2. Iterable<T>? selected,
  3. String? title,
  4. Widget onItemView(
    1. T,
    2. Set<T>
    )?,
  5. Widget? onTitle(
    1. T
    )?,
  6. Widget? onHeader(
    1. T
    )?,
  7. Widget? onFooter(
    1. T
    )?,
  8. List<Widget>? aboveWidgets,
  9. List<Widget>? belowWidgets,
  10. int columnCount = 0,
  11. double itemWidth = 80,
  12. double? itemHeight,
  13. double aspectRatio = 1.0,
  14. double verticalSpacing = 0.0,
  15. double horizontalSpacing = 0.0,
  16. EdgeInsets? padding,
  17. 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);
  });
}