showMultiPickerBottomSheet<T, V> function
Future<List<T> ?>
showMultiPickerBottomSheet<T, V>(
- BuildContext context, {
- required List<
T> source, - required ValueMapper<
T, String?> labelMapper, - String? title,
- List<
T> ? initialData, - List<
V> ? initialValue, - ValueMapper<
T, V?> ? valueMapper, - DataWidgetBuilder<
T> ? subtitleBuilder, - MultiPickerItemBuilder<
T> ? itemBuilder, - MultiPickerActionBarBuilder<
T> ? actionBarBuilder, - MultiPickerSelectedItemBuilder<
T> ? selectedItemBuilder, - bool? isScrollControlled,
- int? maxCount,
- ValueMapper<
T, bool> ? disabledWhen, - bool? showSearchField,
- Widget? placeholder,
- ListTileThemeData? listTileTheme,
多选选择
点击取消将返回 null,开发者可根据返回值是否为 null 判断用户是否取消选择。
Implementation
Future<List<T>?> showMultiPickerBottomSheet<T, V>(
BuildContext context, {
required List<T> source,
required ValueMapper<T, String?> labelMapper,
String? title,
List<T>? initialData,
List<V>? initialValue,
ValueMapper<T, V?>? valueMapper,
DataWidgetBuilder<T>? subtitleBuilder,
MultiPickerItemBuilder<T>? itemBuilder,
MultiPickerActionBarBuilder<T>? actionBarBuilder,
MultiPickerSelectedItemBuilder<T>? selectedItemBuilder,
bool? isScrollControlled,
int? maxCount,
ValueMapper<T, bool>? disabledWhen,
bool? showSearchField,
Widget? placeholder,
ListTileThemeData? listTileTheme,
}) async {
valueMapper ??= (T data) => data as V;
isScrollControlled ??= true;
List<T> data = TxMultiPickerFormField.initData(
source,
initialData,
initialValue,
valueMapper,
) ??
[];
final Widget content = TxMultiPicker<T, V>(
valueMapper: valueMapper,
labelMapper: labelMapper,
source: source,
onChanged: (val) => data = val ?? [],
subtitleBuilder: subtitleBuilder,
itemBuilder: itemBuilder,
initialData: data,
maxCount: maxCount,
disabledWhen: disabledWhen,
showSearchField: showSearchField,
placeholder: placeholder,
actionBarBuilder: actionBarBuilder,
selectedItemBuilder: selectedItemBuilder,
listTileTheme: listTileTheme,
);
return await showDefaultBottomSheet<List<T>>(
context,
title: title ?? TxLocalizations.of(context).pickerTitle,
contentBuilder: (context) => content,
onConfirm: () => Navigator.pop(context, data),
isScrollControlled: isScrollControlled,
contentPadding: EdgeInsets.zero,
);
}