pickValueSet<T> static method
Future<Set<T>?>
pickValueSet<
T>( - List<T> items, {
- Iterable<T>? selected,
- String? title,
- Widget onItemView(
- T,
- Set<T>
)?,
- Widget? onTitle(
- T
)?,
- Widget? onSubtitle(
- T
)?,
- Widget? onLeading(
- T
)?,
- Widget? onTrailing(
- T
)?,
- List<Widget>? aboveWidgets,
- List<Widget>? belowWidgets,
- 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,
);
});
}