pickValue<T> method

Future<T?> pickValue<T>(
  1. List<T> items, {
  2. T? selected,
  3. String? title,
  4. Widget onItemView(
    1. 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. EdgeInsets? padding,
  12. bool separated = true,
  13. bool cancel = false,
  14. bool ok = false,
})

Implementation

Future<T?> pickValue<T>(
  List<T> items, {
  T? selected,
  String? title,
  Widget Function(T)? onItemView,
  Widget? Function(T)? onTitle,
  Widget? Function(T)? onSubtitle,
  Widget? Function(T)? onLeading,
  Widget? Function(T)? onTrailing,
  List<Widget>? aboveWidgets,
  List<Widget>? belowWidgets,
  EdgeInsets? padding,
  bool separated = true,
  bool cancel = false,
  bool ok = false,
}) async {
  return showColumn(
    isContentScrollable: true,
    title: title,
    cancel: cancel,
    ok: ok,
    aboveWidgets: aboveWidgets,
    belowWidgets: belowWidgets,
    padding: EdgeInsets.all(0),
    onContent: (uc) {
      if (!uc.hasResult) uc.setResult(selected);
      return XListView(
        items: items,
        shrinkWrap: true,
        padding: padding,
        separator: separated,
        itemView: (cii) {
          var item = cii.item;
          if (onItemView != null) return onItemView(item);
          return ListTile(
            title: onTitle?.call(item) ?? item.toString().titleMedium(),
            subtitle: onSubtitle?.call(item),
            leading: onLeading?.call(item),
            trailing: onTrailing?.call(item) ?? (uc.getResult() == item ? Icons.check.icon() : null),
            onTap: () {
              uc.setResult(item);
              if (ok) {
                uc.updateState();
              } else {
                uc.pop(item);
              }
            },
          );
        },
      );
    },
  );
}