Skip to content

Musma/OmniDateTimePicker

This branch is 3 commits ahead of, 37 commits behind alanchan-dev/OmniDateTimePicker:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

afb0632 · Jan 19, 2024

History

78 Commits
Dec 31, 2021
Apr 21, 2023
Jan 19, 2024
Jan 19, 2024
Feb 23, 2023
Feb 22, 2023
Dec 12, 2021
Dec 12, 2021
Sep 8, 2023
Feb 23, 2023
Sep 8, 2023
Dec 12, 2021
Sep 8, 2023

Repository files navigation

Omni DateTime Picker

pub package

A DateTime picker that lets user select a date and the time, with start & end as a range.

Support my passion

"Buy Me A Coffee"

Material 3 support

Material 3 is currently supported, set useMaterial3 is true in your app's Theme.

Changes in version 1.0.0

  • Breaking: Styling fields (colors, text style), Theme widget can be used to have a more consistent design
  • Breaking: borderRadius now requires a BorderRadiusGeometry instead of double for more control over the look. (borderRadius won't have effect if useMaterial3 is true)
  • Add: Preserve state when switching tabs using OmniDateTimeRangePicker
  • Add: Constraints can now be passed to limit the size, else a preferred default value will be used
  • Add: Expose selectableDayPredicate to let user disable certain day
  • Add: transitionBuilder & transitionDuration field to customize animation of dialog
  • Fix: AM PM offset not aligned correctly in mobile

Refer to example for usage.

Screenshots

Omni DateTime Range Picker - Material 3 Light

Omni DateTime Range Picker - Material 3 Dark

Getting started

Add this to your package's pubspec.yaml file and run flutter pub get:

dependencies:
  omni_datetime_picker: ^1.0.9

Now in your Dart code, you can use:

import 'package:omni_datetime_picker/omni_datetime_picker.dart';

Usage

Simple usage:

OmniDateTimePicker

DateTime? dateTime = await showOmniDateTimePicker(context: context);

OmniDateTimeRangePicker

List<DateTime>? dateTimeList = await showOmniDateTimeRangePicker(context: context);

Custom properties:

OmniDateTimePicker

DateTime? dateTime = await showOmniDateTimePicker(
                    context: context,
                    initialDate: DateTime.now(),
                    firstDate:
                        DateTime(1600).subtract(const Duration(days: 3652)),
                    lastDate: DateTime.now().add(
                      const Duration(days: 3652),
                    ),
                    is24HourMode: false,
                    isShowSeconds: false,
                    minutesInterval: 1,
                    secondsInterval: 1,
                    borderRadius: const BorderRadius.all(Radius.circular(16)),
                    constraints: const BoxConstraints(
                      maxWidth: 350,
                      maxHeight: 650,
                    ),
                    transitionBuilder: (context, anim1, anim2, child) {
                      return FadeTransition(
                        opacity: anim1.drive(
                          Tween(
                            begin: 0,
                            end: 1,
                          ),
                        ),
                        child: child,
                      );
                    },
                    transitionDuration: const Duration(milliseconds: 200),
                    barrierDismissible: true,
                    selectableDayPredicate: (dateTime) {
                      // Disable 25th Feb 2023
                      if (dateTime == DateTime(2023, 2, 25)) {
                        return false;
                      } else {
                        return true;
                      }
                    },
                  );

OmniDateTimeRangePicker

List<DateTime>? dateTimeList =
                      await showOmniDateTimeRangePicker(
                    context: context,
                    startInitialDate: DateTime.now(),
                    startFirstDate:
                        DateTime(1600).subtract(const Duration(days: 3652)),
                    startLastDate: DateTime.now().add(
                      const Duration(days: 3652),
                    ),
                    endInitialDate: DateTime.now(),
                    endFirstDate:
                        DateTime(1600).subtract(const Duration(days: 3652)),
                    endLastDate: DateTime.now().add(
                      const Duration(days: 3652),
                    ),
                    is24HourMode: false,
                    isShowSeconds: false,
                    minutesInterval: 1,
                    secondsInterval: 1,
                    borderRadius: const BorderRadius.all(Radius.circular(16)),
                    constraints: const BoxConstraints(
                      maxWidth: 350,
                      maxHeight: 650,
                    ),
                    transitionBuilder: (context, anim1, anim2, child) {
                      return FadeTransition(
                        opacity: anim1.drive(
                          Tween(
                            begin: 0,
                            end: 1,
                          ),
                        ),
                        child: child,
                      );
                    },
                    transitionDuration: const Duration(milliseconds: 200),
                    barrierDismissible: true,
                    selectableDayPredicate: (dateTime) {
                      // Disable 25th Feb 2023
                      if (dateTime == DateTime(2023, 2, 25)) {
                        return false;
                      } else {
                        return true;
                      }
                    },
                  );

The returned value of showOmniDateTimeRangePicker() will be a List with two DateTime:

[startDateTime, endDateTime].

About

A Flutter DateTime picker package.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Dart 99.9%
  • Kotlin 0.1%