show static method

void show(
  1. BuildContext context, {
  2. String? title,
  3. List<int>? defaultValue,
  4. String? cancelText,
  5. String? confirmText,
  6. Widget? titleWidget,
  7. Color? headerBackgroundColor,
  8. Color? backgroundColor,
  9. Color? cancelTextColor,
  10. Color? confirmTextColor,
  11. BorderRadiusGeometry? borderRadius,
  12. bool isDefaultShowNow = true,
  13. List<int>? minDate,
  14. List<int>? maxDate,
  15. List<BetterTimePickerColumnType>? columnTypes = const [BetterTimePickerColumnType.hour, BetterTimePickerColumnType.minute, BetterTimePickerColumnType.second],
  16. dynamic formatter(
    1. BetterTimePickerFormatterOption
    )?,
  17. dynamic filter(
    1. BetterTimePickerFilterOption
    )?,
  18. VoidCallback? onCancel,
  19. dynamic onConfirm(
    1. List<BetterPickerItem>
    )?,
  20. dynamic onChange(
    1. List<BetterPickerItem>
    )?,
  21. VoidCallback? onClose,
  22. double? diameterRatio,
  23. double? itemHeight,
  24. Widget? overlayWidget,
})

Implementation

static void show(
  BuildContext context, {
  //标题
  String? title,

  List<int>? defaultValue,

  /// 取消按钮的文本
  String? cancelText,

  /// 确认按钮的文本
  String? confirmText,

  /// 选择器的标题组件
  Widget? titleWidget,

  /// 头部背景颜色
  Color? headerBackgroundColor,

  /// 选择器的背景颜色
  Color? backgroundColor,

  /// 取消按钮的文本颜色
  Color? cancelTextColor,

  /// 确认按钮的文本颜色
  Color? confirmTextColor,

  /// 选择器的圆角半径
  BorderRadiusGeometry? borderRadius,
  //是否默认显示当天时间
  bool isDefaultShowNow = true,
  List<int>? minDate,
  List<int>? maxDate,
  List<BetterTimePickerColumnType>? columnTypes = const [
    BetterTimePickerColumnType.hour,
    BetterTimePickerColumnType.minute,
    BetterTimePickerColumnType.second,
  ],

  /// 格式化选项
  Function(BetterTimePickerFormatterOption)? formatter,
  //过滤选项
  Function(BetterTimePickerFilterOption)? filter,

  /// 取消回调
  VoidCallback? onCancel,

  /// 确认回调
  Function(List<BetterPickerItem>)? onConfirm,

  /// 改变回调
  Function(List<BetterPickerItem>)? onChange,

  /// 关闭回调
  VoidCallback? onClose,

  /// 选择器的直径比例
  double? diameterRatio,

  /// 选择器的高度
  double? itemHeight,

  /// 选择器的覆盖组件
  Widget? overlayWidget,
}) {
  DateTime now = DateTime.now();
  int minHour = 0;
  int minMinute = 0;
  int minSecond = 0;
  int maxHour = 23;
  int maxMinute = 59;
  int maxSecond = 59;
  if (minDate != null) {
    if (minDate.length < 3) {
      throw Exception("minDate length must be 3");
    }
    minHour = minDate[0];
    minMinute = minDate[1];
    minSecond = minDate[2];
  }
  if (maxDate != null) {
    if (maxDate.length < 3) {
      throw Exception("maxDate length must be 3");
    }
    maxHour = maxDate[0];
    maxMinute = maxDate[1];
    maxSecond = maxDate[2];
  }
  // 存储当前选中的值
  int currentHour;
  int currentMinute;
  int currentSecond;

  int hourColumnIndex = columnTypes!.indexWhere(
    (element) => element == BetterTimePickerColumnType.hour,
  );
  int minuteColumnIndex = columnTypes.indexWhere(
    (element) => element == BetterTimePickerColumnType.minute,
  );
  int secondColumnIndex = columnTypes.indexWhere(
    (element) => element == BetterTimePickerColumnType.second,
  );
  if (!isDefaultShowNow) {
    currentHour = minHour;
    currentMinute = minMinute;
    currentSecond = minSecond;
  } else {
    currentHour = now.hour;
    currentMinute = now.minute;
    currentSecond = now.second;
  }
  if (defaultValue != null) {
    if (defaultValue.length < 3) {
      throw Exception("defaultValue length must be 3");
    }
    if (hourColumnIndex != -1) {
      currentHour = defaultValue[hourColumnIndex];
    }
    if (minuteColumnIndex != -1) {
      currentMinute = defaultValue[minuteColumnIndex];
    }
    if (secondColumnIndex != -1) {
      currentSecond = defaultValue[secondColumnIndex];
    }
  }
  List<List<BetterPickerItem>> columns = [];
  if (columnTypes.contains(BetterTimePickerColumnType.hour)) {
    columns.add(
      _generateItems(
        minHour,
        maxHour,
        currentHour,
        BetterTimePickerColumnType.hour,
        formatter,
        filter,
      ),
    );
  }
  if (columnTypes.contains(BetterTimePickerColumnType.minute)) {
    columns.add(
      _generateItems(
        minMinute,
        maxMinute,
        currentMinute,
        BetterTimePickerColumnType.minute,
        formatter,
        filter,
      ),
    );
  }
  if (columnTypes.contains(BetterTimePickerColumnType.second)) {
    columns.add(
      _generateItems(
        minSecond,
        maxSecond,
        currentSecond,
        BetterTimePickerColumnType.second,
        formatter,
        filter,
      ),
    );
  }

  BetterPicker.show(
    context,
    columns: columns,
    title: title,
    cancelText: cancelText,
    confirmText: confirmText,
    titleWidget: titleWidget,
    headerBackgroundColor: headerBackgroundColor,
    backgroundColor: backgroundColor,
    borderRadius: borderRadius,
    cancelTextColor: cancelTextColor,
    confirmTextColor: confirmTextColor,
    onCancel: onCancel,
    onConfirm: onConfirm,
    onClose: onClose,
    diameterRatio: diameterRatio,
    itemHeight: itemHeight,
    overlayWidget: overlayWidget,
    onChange:
        (
          List<BetterPickerItem> selectedValues,
          Function(dynamic columns) updateColumns,
        ) {
          onChange?.call(selectedValues);
        },
  );
}