搜索插件、代码仓与 APP 分类

flutter_datetime_picker_plus 封面
插件详情v3.0.1

flutter_datetime_picker_plus

适用于 Flutter 的日期时间选择器,您可以在英文、荷兰语和中文中选择日期/时间/日期和时间,并且还可以自定义自己的选择器内容

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
5.3万
喜欢数
171
Pub 分数
140

安装插件

flutter pub add flutter_datetime_picker_plus

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个可自定义的日期和时间选择器,适用于 Flutter,支持以英文、荷兰语和中文选择日期、时间或两者。它提供本地化界面,并允许开发者根据特定应用需求定制选择器内容。兼容 Android、iOS、Web、macOS、Windows 和 Linux,可在所有平台上提供无缝用户体验。该包旨在易于集成,并在 UI 自定义方面具有灵活性。

适合场景

  • 需要选择日期/时间的表单输入
  • 多语言应用程序
  • 可自定义的日期/时间选择器
  • 跨平台日期/时间输入
  • 用户友好的日历界面
  • 本地化应用体验

主要特点

  • 支持日期、时间以及组合选择
  • 支持英文、荷兰语和中文
  • 高度可定制的用户界面
  • 跨平台兼容性
  • 通过 pub.dev 实现轻松集成
  • Localization-ready

适合对象

  • 开发多语言应用程序的开发者
  • 需要灵活日期/时间输入的应用程序
  • 需要平台一致性
  • 希望使用可自定义选择器的团队
  • 以用户体验为中心的表单设计
  • 国际化移动和Web应用

使用建议

  • 非支持语言需要手动设置
  • 自定义可能会增加复杂性
  • 除非扩展,否则仅限预定义区域设置
  • 重度自定义带来的性能影响
  • 可能需要额外的样式以保持外观一致
  • 依赖于 Flutter 版本兼容性

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

Flutter Datetime Picker Plus

Forked from (Pub) flutter_datetime_picker as it had issues with dart 3.0/Flutter 3.10.

This package only works on Flutter >=3.10.0. If you need an older version, please use the original package.

(Pub) flutter_datetime_picker_plus

Documentation

A flutter date time picker inspired by flutter-cupertino-date-picker

you can choose date / time / date&time in multiple languages:

  • Albanian(sq)
  • Arabic(ar)
  • Armenian(hy)
  • Azerbaijani(az)
  • Basque(eu)
  • Bengali(bn)
  • Bosnian(bs)
  • Bulgarian(bg)
  • Catalan(cat)
  • Chinese(zh)
  • Chinese, Traditional(tw)
  • Croatian(hr)
  • Czech(cs)
  • Danish(da)
  • Dutch(nl)
  • English(en)
  • Finnish(fi)
  • French(fr)
  • German(de)
  • Greek(gr, el)
  • Hebrew(he)
  • Hindi(hi)
  • Indonesian(id)
  • Italian(it)
  • Japanese(jp)
  • Kazakh(kk)
  • Khmer(kh)
  • Korean(ko)
  • Mongolian(mn)
  • Norwegian(no)
  • Persian(fa)
  • Polish(pl)
  • Portuguese(pt)
  • Russian(ru)
  • Serbian(sr)
  • Slovak(sk)
  • Slovenian(si, sl)
  • Spanish(es)
  • Swedish(sv)
  • Tamil(ta)
  • Thai(th)
  • Turkish(tr)
  • Ukrainian(uk)
  • Vietnamese(vi)

and you can also custom your own picker content

Date picker Time picker Date Time picker

International:

Date Time picker (Chinese) Date Time picker (America) Date Time picker (Dutch) Date Time picker (Russian)

Demo App

main page

Usage

TextButton(
    onPressed: () {
        DatePicker.showDatePicker(context,
                              showTitleActions: true,
                              minTime: DateTime(2018, 3, 5),
                              maxTime: DateTime(2019, 6, 7), onChanged: (date) {
                            print('change $date');
                          }, onConfirm: (date) {
                            print('confirm $date');
                          }, currentTime: DateTime.now(), locale: LocaleType.zh);
    },
    child: Text(
        'show date time picker (Chinese)',
        style: TextStyle(color: Colors.blue),
    ));

Customize

If you want to customize your own style of date time picker, there is a class called CommonPickerModel, every type of date time picker is extended from this class, you can refer to other picker model (eg. DatePickerModel), and write your custom one, then pass this model to showPicker method, so that your own date time picker will appear, it’s easy, and will perfectly meet your demand

How to customize your own picker model:

class CustomPicker extends CommonPickerModel {
  String digits(int value, int length) {
    return '$value'.padLeft(length, "0");
  }

  CustomPicker({DateTime currentTime, LocaleType locale}) : super(locale: locale) {
    this.currentTime = currentTime ?? DateTime.now();
    this.setLeftIndex(this.currentTime.hour);
    this.setMiddleIndex(this.currentTime.minute);
    this.setRightIndex(this.currentTime.second);
  }

  @override
  String leftStringAtIndex(int index) {
    if (index >= 0 && index < 24) {
      return this.digits(index, 2);
    } else {
      return null;
    }
  }

  @override
  String middleStringAtIndex(int index) {
    if (index >= 0 && index < 60) {
      return this.digits(index, 2);
    } else {
      return null;
    }
  }

  @override
  String rightStringAtIndex(int index) {
    if (index >= 0 && index < 60) {
      return this.digits(index, 2);
    } else {
      return null;
    }
  }

  @override
  String leftDivider() {
    return "|";
  }

  @override
  String rightDivider() {
    return "|";
  }

  @override
  List<int> layoutProportions() {
    return [1, 2, 1];
  }

  @override
  DateTime finalTime() {
    return currentTime.isUtc
        ? DateTime.utc(currentTime.year, currentTime.month, currentTime.day,
            this.currentLeftIndex(), this.currentMiddleIndex(), this.currentRightIndex())
        : DateTime(currentTime.year, currentTime.month, currentTime.day, this.currentLeftIndex(),
            this.currentMiddleIndex(), this.currentRightIndex());
  }
}
Custom title bar

By default every picker shows a Cancel/Done bar above the wheels. Pass a titleActionsBuilder to any DatePicker.show* method to replace it with your own widget. The builder receives onCancel / onConfirm callbacks (which dismiss the picker the same way the default buttons do) and the currently selected DateTime:

DatePicker.showDatePicker(
  context,
  titleActionsBuilder: (context, onCancel, onConfirm, currentTime) {
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: [
        TextButton(onPressed: onCancel, child: const Text('Close')),
        Text('${currentTime.year}-${currentTime.month}-${currentTime.day}'),
        TextButton(onPressed: onConfirm, child: const Text('Pick')),
      ],
    );
  },
);

The bar is laid out within the theme's titleHeight, so keep your widget within that height (or raise titleHeight via a custom DatePickerTheme). The builder is only used when showTitleActions is true (the default).

Getting Started

For help getting started with Flutter, view our online documentation.

For help on editing package code, view the documentation.

所属分类

依赖

依赖清单 2 项

源码仓库

使用此插件的项目