showCascadePicker<D, V> function

Future<D?> showCascadePicker<D, V>({
  1. required BuildContext context,
  2. required List<D> datasource,
  3. required ValueMapper<D, String?> labelMapper,
  4. required ValueMapper<D, V?>? valueMapper,
  5. required ValueMapper<D, List<D>?> childrenMapper,
  6. V? initialValue,
  7. D? initialData,
  8. SelectableWidgetBuilder<D>? itemBuilder,
  9. IndexedDataWidgetBuilder<D?>? tabItemBuilder,
  10. ListTileThemeData? listTheme,
  11. String? placeholder,
  12. bool? isParentNodeSelectable,
  13. String? title,
})

弹出级联选择器

Implementation

Future<D?> showCascadePicker<D, V>({
  required BuildContext context,
  required List<D> datasource,
  required ValueMapper<D, String?> labelMapper,
  required ValueMapper<D, V?>? valueMapper,
  required ValueMapper<D, List<D>?> childrenMapper,
  V? initialValue,
  D? initialData,
  SelectableWidgetBuilder<D>? itemBuilder,
  IndexedDataWidgetBuilder<D?>? tabItemBuilder,
  ListTileThemeData? listTheme,
  String? placeholder,
  bool? isParentNodeSelectable,
  String? title,
}) async {
  D? result = datasource.getInitialData<V>(
    initialValue: initialValue,
    initialData: initialData,
    valueMapper: valueMapper,
  );
  return showDefaultBottomSheet<D>(
    context,
    title: title ?? '请选择',
    contentBuilder: (context) {
      return TxCascadePicker<D, V>(
        datasource: datasource,
        labelMapper: labelMapper,
        valueMapper: valueMapper,
        childrenMapper: childrenMapper,
        initialData: initialData,
        itemBuilder: itemBuilder,
        tabItemBuilder: tabItemBuilder,
        listTheme: listTheme,
        placeholder: placeholder,
        isParentNodeSelectable: isParentNodeSelectable,
        onChanged: (val) {
          if (isParentNodeSelectable == true) {
            result = val;
          } else {
            Navigator.pop(context, val);
          }
        },
      );
    },
    showConfirmButton: isParentNodeSelectable == true,
    onConfirm: () => Navigator.pop(context, result),
    actionsPosition: ActionsPosition.footer,
  );
}