showMaterialDateRangePicker function
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,
- RouteSettings? routeSettings,
- TextDirection? textDirection,
- 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);
},
);
}