pickValueSet<T> static method

Future<Set<T>?> pickValueSet<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? onSubtitle(
    1. T
    )?,
  7. Widget? onLeading(
    1. T
    )?,
  8. Widget? onTrailing(
    1. T
    )?,
  9. List<Widget>? aboveWidgets,
  10. List<Widget>? belowWidgets,
  11. DialogWidth? dialogWidth,
})

Implementation

static Future<Set<T>?> pickValueSet<T>(
  List<T> items, {
  Iterable<T>? selected,
  String? title,
  Widget Function(T, Set<T>)? onItemView,
  Widget? Function(T)? onTitle,
  Widget? Function(T)? onSubtitle,
  Widget? Function(T)? onLeading,
  Widget? Function(T)? onTrailing,
  List<Widget>? aboveWidgets,
  List<Widget>? belowWidgets,
  DialogWidth? dialogWidth,
}) async {
  Set<T> resultSet = {};
  if (selected != null) resultSet.addAll(selected);
  return await showDialogX((b) {
    b.init(result: resultSet);
    return b.buildList(
      items,
      builder: (iic) {
        T item = iic.item;
        Widget cell;
        if (onItemView != null) {
          cell = onItemView(item, b.result ?? {}).inkWell(
            onTap: () {
              if (resultSet.contains(item)) {
                resultSet.remove(item);
              } else {
                resultSet.add(item);
              }
              b.updateState();
            },
          );
        } else {
          bool checked = resultSet.contains(item);
          cell = ListTile(
            key: UniqueKey(),
            title: onTitle?.call(item) ?? item.toString().text(),
            subtitle: onSubtitle?.call(item),
            leading: onLeading?.call(item),
            trailing: onTrailing?.call(item) ?? (checked ? Icons.check.icon() : null),
            onTap: () {
              if (resultSet.contains(item)) {
                resultSet.remove(item);
              } else {
                resultSet.add(item);
              }
              b.updateState();
            },
          );
        }
        return cell;
      },
      dialogWidth: dialogWidth,
      title: title,
      ok: true,
      cancel: true,
      aboveWidgets: aboveWidgets,
      belowWidgets: belowWidgets,
    );
  });
}