showMultiPickerBottomSheet<T, V> function

Future<List<T>?> showMultiPickerBottomSheet<T, V>(
  1. BuildContext context, {
  2. required List<T> source,
  3. required ValueMapper<T, String?> labelMapper,
  4. String? title,
  5. List<T>? initialData,
  6. List<V>? initialValue,
  7. ValueMapper<T, V?>? valueMapper,
  8. DataWidgetBuilder<T>? subtitleBuilder,
  9. MultiPickerItemBuilder<T>? itemBuilder,
  10. MultiPickerActionBarBuilder<T>? actionBarBuilder,
  11. MultiPickerSelectedItemBuilder<T>? selectedItemBuilder,
  12. bool? isScrollControlled,
  13. int? maxCount,
  14. ValueMapper<T, bool>? disabledWhen,
  15. bool? showSearchField,
  16. Widget? placeholder,
  17. 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,
  );
}