showItemPickerDialog<T> function
Future<T?>
showItemPickerDialog<T>(
- BuildContext context, {
- required ItemChildDelegate<
T> items, - required ItemPickerBuilder<
T> builder, - ItemPickerLayout layout = const GridItemPickerLayout(),
- T? initialValue,
- BoxConstraints? constraints,
- required Widget title,
- bool? adaptiveOverlay,
Shows an item picker in a modal dialog.
Displays a modal dialog with items arranged according to the specified layout, allowing the user to select one item. The dialog closes when an item is selected.
Parameters:
context(BuildContext, required): The build context.items(ItemChildDelegate<T>, required): Delegate providing items.builder(ItemPickerBuilder<T>, required): Builds each item widget.layout(ItemPickerLayout, default:GridItemPickerLayout()): Layout strategy.initialValue(T?, optional): Initially selected item.constraints(BoxConstraints?, optional): Size constraints for the dialog.title(Widget, required): Dialog title widget.
Returns: A Future<T?> that completes with the selected item or null.
Example:
final icon = await showItemPickerDialog<IconData>(
context,
title: Text('Choose Icon'),
items: ItemList([LucideIcons.house, LucideIcons.star, LucideIcons.settings]),
builder: (context, icon) => Icon(icon),
);
Implementation
Future<T?> showItemPickerDialog<T>(
BuildContext context, {
required ItemChildDelegate<T> items,
required ItemPickerBuilder<T> builder,
ItemPickerLayout layout = const GridItemPickerLayout(),
T? initialValue,
BoxConstraints? constraints,
required Widget title,
bool? adaptiveOverlay,
}) {
return showOverlay<T>(
context,
const DialogConfiguration(),
builder: (context) {
final theme = Theme.of(context);
return ModalBackdrop(
theme: ModalBackdropTheme(borderRadius: theme.borderRadiusXl),
child: ModalContainer(
borderRadius: theme.borderRadiusXl,
padding: EdgeInsets.zero,
child: _InternalItemPicker<T>(
items: items,
builder: builder,
initialValue: initialValue,
layout: layout,
title: title,
constraints: constraints,
onChanged: (value) {
closeOverlay(context, value);
},
),
),
);
},
adaptive: adaptiveOverlay ?? true,
).future;
}