如何在Flutter中使用showTimePicker比较两个TimeOfDay?

jaxagkaj  于 2023-01-18  发布在  Flutter
关注(0)|答案(3)|浏览(163)

我的应用程序中有一个showTimePicker,我想比较所选时间和当前真实的时间。
我尝试使用DateTime.now()并将其与所选择的值进行比较,但该值为TimeOfDay,并且DateTime.now()具有年、月、日等。
我想要的场景是,当用户在选择日期后选择一个时间时,我希望我的应用程序检查这个时间是否过期。

polkgigr

polkgigr1#

可以使用以下代码将拾取的TimeOfDay值转换为DateTime对象:

DateTime pickedDate = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day, pickedTime.hour, pickedTime.minute);

然后可以将当前DateTime.now()值与pickedDate值进行比较。

if (pickedDate.isAfter(DateTime.now())) {
  // time is in future
} else if (pickedDate.isBefore(DateTime.now())) {
  // time is overdue
}
zf9nrax1

zf9nrax12#

我写了一个TimeOfDay的扩展,我想你可以在这个扩展上使用func。

import 'package:flutter/material.dart';

extension TimeOfDayExtension on TimeOfDay {
  bool isBefore(TimeOfDay other) {
    return (60 * hour + minute) < (60 * other.hour + other.minute);
  }

  bool theSame(TimeOfDay other) {
    return (60 * hour + minute) == (60 * other.hour + other.minute);
  }

  bool isBeforeNow() {
    return isBefore(TimeOfDay.fromDateTime(DateTime.now()));
  }

  bool theSameNow() {
    return theSame(TimeOfDay.fromDateTime(DateTime.now()));
  }

  bool isBeforeDate(DateTime date) {
    return isBefore(TimeOfDay.fromDateTime(date));
  }

  bool theSameDate(DateTime date) {
    return theSame(TimeOfDay.fromDateTime(date));
  }
}
zlwx9yxi

zlwx9yxi3#

为了比较Flutter中的两个TimeOfDay对象,可以使用TimeOfDay类提供的compareTo方法。此方法比较TimeOfDay对象之间的时间,如果第一个时间早于第二个时间,则返回负整数;如果第一个时间晚于第二个时间,则返回正整数;如果两个时间相等,则返回0。
以下示例说明如何使用compareTo方法比较两个TimeOfDay对象:

TimeOfDay time1 = TimeOfDay.now();
TimeOfDay time2 = TimeOfDay(hour: 14, minute: 30);

int comparison = time1.format(context).compareTo(time2.format(context));
if (comparison < 0) {
  print("Time 1 is earlier than Time 2");
} else if (comparison > 0) {
  print("Time 1 is later than Time 2");
} else {
  print("Time 1 is the same as Time 2");
}

请注意,showTimePicker方法只显示一个对话框来选择时间,它不返回任何值。您应该使用showTimePicker返回的Future中的then方法来获取所选时间。

TimeOfDay selectedTime;
showTimePicker(
  context: context,
  initialTime: TimeOfDay.now(),
).then((value) {
  if (value != null) {
    setState(() {
      selectedTime = value;
    });
  }
});

然后可以使用selectedTime变量与另一个时间进行比较。

相关问题