dh_picker 选择器控件,支持数字选择,字符串选择,日期选择,自定义选择。 在你的项目pubspec.yaml添加如下依赖

dependencies:
  dh_picker: ^1.0.0

num_picker 数字选择器

数字选择器

max 最大值

min 最小值

interval 间隔值

indexFormat 格式化函数,可以格式化每项

NumberPicker(
    max: 21,
    min: 1,
    interval: 2,
    indexFormat: (value) => "$value+",
    itemExtent: 40,
    onSelectedItemChanged: (value) {
      print('selected  value: $value');
    },
    labelAlignment: Alignment.center,
    label: Text("℃"),
    labelPadding: EdgeInsets.only(left: 50, bottom: 16),
  ),
)

string_picker 字符串选择器

字符串选择器

StringPicker(
    itemExtent: 40,
    data: ['Apple', 'Bob', 'Cat'],
    onSelectedItemChanged: (String value) {
      print('selected  value: $value');
    },
  )

date_picker 日期时间选择器,参考flutter_date_picker

字符串选择器

pickerModel选择器数据模型,已支持下列模型。

  • DatePickerModel 日期(xxxx年xx月xx日)

  • DateTimePickerModel 日期时间(xxxx年xx月xx日 xx时:xx分:xx秒)

  • QuarterPickerModel 日期季度 (xxxx年第一季度)

  • SemiannualPickerModel 日期半年度 (xxxx年上半年)

  • TimePickerModel 时间(xx时:xx分:xx秒)无范围限制。

  • TimeRangePickerModel 时间范围 (xx时:xx分:xx秒)相比TimePickerModel可设置最大最小时间范围。

pickerModel 参数介绍:

currentTime 当前日期时间,未设置使用系统当前时间。

maxTime 最大日期时间

minTime 最小日期时间

formats 日期格式化。数组类型,长度由当前模型特性(内部picker个数)决定。 根据picker类型格式化,例如年通常格式化为: yyyy,季度格式化:QQQQ(第一季度),QQQ(一季度)。年月日补充说明,它们的格式化补0,多语言其它地区不需要单位,根据label来决定是否显示单位(年月日)。

label 标识单位是否显示

weights 内部picker控件权重

dividers 内部picker间隔符

pickerOverlay 选择器上覆盖层,通常用于添加分割线。

每个选择器都可以设置selectionOverlay。设置pickerOverlay 自定义Overlay,pickerOverlay 会在当前Picker上添加Overlay。也可以设置selectionOverlayBuilder为每个内部picker添加Overlay,如果未设置会添加一个默认的Overlay。

注意使用pickerOverlay时,需要设置selectionOverlayBuilder: (int index) => null

showPicker(context, builder: (BuildContext context) {
  return DateTimePickerWidget(
    onConfirm: (DateTime dateTime) {
      selectTime = dateTime;
      print('date time: $dateTime');
    },
    title: "选择日期",
    titleActionTheme: TitleActionTheme(
      decoration: ShapeDecoration(
          color: Colors.white,
          shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.only(
                  topLeft: Radius.circular(10.0),
                  topRight: Radius.circular(10.0)))),
    ),
    onCancel: () {
      print('取消了');
    },
    pickerTheme: PickerTheme(
      height: 180.0,
    ),
    pickerModel: DateTimePickerModel(
      maxTime: DateTime(2022, 12, 1, 5, 6),
      minTime: DateTime(2020, 11, 2, 3, 4),
      currentTime: selectTime,
    ),
    pickerOverlay: Row(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        SizedBox(
          width: 18,
        ),
        Expanded(
            child: DefaultSelectionOverlay(
          borderColor: Colors.red,
        )),
        SizedBox(
          width: 27,
        ),
        Expanded(
            child: DefaultSelectionOverlay(
          borderColor: Colors.red,
        )),
        SizedBox(
          width: 27,
        ),
        Expanded(
            child: DefaultSelectionOverlay(
          borderColor: Colors.red,
        )),
        SizedBox(
          width: 18,
        ),
      ],
    ),
    selectionOverlayBuilder: (int index) => null,
  );
});

Libraries

dh_picker