showMaterialDateRangePicker function

Future<NepaliDateTimeRange?> showMaterialDateRangePicker({
  1. required BuildContext context,
  2. NepaliDateTimeRange? initialDateRange,
  3. required NepaliDateTime firstDate,
  4. required NepaliDateTime lastDate,
  5. NepaliDateTime? currentDate,
  6. DatePickerEntryMode initialEntryMode = DatePickerEntryMode.calendar,
  7. String? helpText,
  8. String? cancelText,
  9. String? confirmText,
  10. String? saveText,
  11. String? errorFormatText,
  12. String? errorInvalidText,
  13. String? errorInvalidRangeText,
  14. String? fieldStartHintText,
  15. String? fieldEndHintText,
  16. String? fieldStartLabelText,
  17. String? fieldEndLabelText,
  18. Locale? locale,
  19. bool useRootNavigator = true,
  20. RouteSettings? routeSettings,
  21. TextDirection? textDirection,
  22. TransitionBuilder? builder,
})

Displays a Material-style date range picker dialog. This function shows a dialog that allows the user to select a date range using a Nepali calendar. It supports both calendar and input modes for date selection.

  • context: The build context to display the dialog.
  • initialDateRange: The initially selected date range in the dialog.
  • firstDate: The earliest selectable date.
  • lastDate: The latest selectable date.
  • currentDate: The current date, defaults to today if not provided.

Implementation

Future<NepaliDateTimeRange?> showMaterialDateRangePicker({
  required BuildContext context,
  NepaliDateTimeRange? initialDateRange,
  required NepaliDateTime firstDate,
  required NepaliDateTime lastDate,
  NepaliDateTime? currentDate,
  DatePickerEntryMode initialEntryMode = DatePickerEntryMode.calendar,
  String? helpText,
  String? cancelText,
  String? confirmText,
  String? saveText,
  String? errorFormatText,
  String? errorInvalidText,
  String? errorInvalidRangeText,
  String? fieldStartHintText,
  String? fieldEndHintText,
  String? fieldStartLabelText,
  String? fieldEndLabelText,
  Locale? locale,
  bool useRootNavigator = true,
  RouteSettings? routeSettings,
  TextDirection? textDirection,
  TransitionBuilder? builder,
}) async {
  assert(
      initialDateRange == null ||
          !initialDateRange.start.isAfter(initialDateRange.end),
      'initialDateRange\'s start date must not be after it\'s end date.');
  initialDateRange =
      initialDateRange == null ? null : utils.datesOnly(initialDateRange);
  firstDate = utils.dateOnly(firstDate);
  lastDate = utils.dateOnly(lastDate);
  assert(!lastDate.isBefore(firstDate),
      'lastDate $lastDate must be on or after firstDate $firstDate.');
  assert(
      initialDateRange == null || !initialDateRange.start.isBefore(firstDate),
      'initialDateRange\'s start date must be on or after firstDate $firstDate.');
  assert(initialDateRange == null || !initialDateRange.end.isBefore(firstDate),
      'initialDateRange\'s end date must be on or after firstDate $firstDate.');
  assert(initialDateRange == null || !initialDateRange.start.isAfter(lastDate),
      'initialDateRange\'s start date must be on or before lastDate $lastDate.');
  assert(initialDateRange == null || !initialDateRange.end.isAfter(lastDate),
      'initialDateRange\'s end date must be on or before lastDate $lastDate.');
  currentDate = utils.dateOnly(currentDate ?? NepaliDateTime.now());
  assert(debugCheckHasMaterialLocalizations(context));

  Widget dialog = _DateRangePickerDialog(
    initialDateRange: initialDateRange,
    firstDate: firstDate,
    lastDate: lastDate,
    currentDate: currentDate,
    initialEntryMode: initialEntryMode,
    helpText: helpText,
    cancelText: cancelText,
    confirmText: confirmText,
    saveText: saveText,
    errorFormatText: errorFormatText,
    errorInvalidText: errorInvalidText,
    errorInvalidRangeText: errorInvalidRangeText,
    fieldStartHintText: fieldStartHintText,
    fieldEndHintText: fieldEndHintText,
    fieldStartLabelText: fieldStartLabelText,
    fieldEndLabelText: fieldEndLabelText,
  );

  if (textDirection != null) {
    dialog = Directionality(
      textDirection: textDirection,
      child: dialog,
    );
  }

  if (locale != null) {
    dialog = Localizations.override(
      context: context,
      locale: locale,
      child: dialog,
    );
  }

  return showDialog<NepaliDateTimeRange>(
    context: context,
    useRootNavigator: useRootNavigator,
    routeSettings: routeSettings,
    useSafeArea: false,
    builder: (BuildContext context) {
      return builder == null ? dialog : builder(context, dialog);
    },
  );
}