chooseDateTime static method

Future<DateTime?> chooseDateTime({
  1. required BuildContext context,
  2. String? initialDate,
})

Implementation

static Future<DateTime?> chooseDateTime({
  required BuildContext context,
  String? initialDate,
}) async {
  /// chọn ngày
  DateTime? picked = await showDatePicker(
    firstDate: DateTime(DateTime.now().year - 1),
    context: context,
    initialDate: DateTimeUtils.initialCalendarDate(initialDate),
    lastDate: DateTimeUtils.maxDatePicker(),
    fieldHintText: DateTimeFormat.shortDate.toLowerCase(),
  );

  /// trả về null nếu không chọn ngày
  if (picked == null) return null;

  /// context có thể đã unmount trong lúc chờ showDatePicker (người dùng
  /// rời màn hình...), nên phải kiểm tra lại trước khi dùng tiếp
  if (!context.mounted) return null;

  /// chọn thời gian
  var selectedDate = DateTimeUtils.dateWithCurrentTime(picked);
  TimeOfDay? selectedTime = await showTimePicker(
    context: context,
    initialTime: TimeOfDay.fromDateTime(selectedDate),
  );

  var dateInput = DateTime(
    selectedDate.year,
    selectedDate.month,
    selectedDate.day,
    selectedTime?.hour ?? selectedDate.hour,
    selectedTime?.minute ?? selectedDate.minute,
    selectedDate.second,
  );
  return dateInput;
}