时间选择器未在 Flutter 应用程序中返回值

Time picker not returning value in flutter app

我正在使用 flutter_datetime_picker: ^1.5.1 以便能够为预定事件选择日期和时间。

这是我使用的屏幕:

“开始时间”字段是我遇到问题的地方。当我在该字段中单击时,会显示时间选择器。一旦我 select 一次并单击“确定”,文本字段就不会得到 selected 时间。

这是我在 onTap 中的代码:属性:

onTap: () async {
                    TimeOfDay _timePicked = await (showTimePicker(
                        context: context,
                        initialTime: new TimeOfDay.now()) as FutureOr<TimeOfDay>);
                    if (_timePicked != null) {
                      _dt = DateTime(_selectedDate!.year, _selectedDate!.month, _selectedDate!.day, _timePicked.hour, _timePicked.minute);
                      setState(() {
                        eventStartTimeController.text = DateFormat('h:mm a').format(_dt); //_timePicked.format(context);
                        eventProvider.changeeventstarttime(_dt);
                      });
                    }
                  },

调试时,我select编辑了一次后,执行不会在设置的任何断点处停止。这是怎么回事?

我已经升级到 Dart 2,null-safety 所以我不知道这是否与代码有关。

看来错误就在这里

...作为 FutureOr);

试试这个,效果很好

final TimeOfDay _timePicked = await showTimePicker(
  context: context,
  initialTime: TimeOfDay.now(),
);
 if (_timePicked != null) {
  _dt = DateTime(
  _selectedDate.year,
  _selectedDate.month,
  _selectedDate.day,
  _timePicked.hour,
  _timePicked.minute,
 );
 setState(() {
  eventStartTimeController.text = DateFormat('h:mm a')
   .format(_dt); //_timePicked.format(context);
  eventProvider.changeeventstarttime(_dt);
 });
}

您可以将代码更改为此。它会起作用。

TimeOfDay _timePicked = await (showTimePicker(
                    context: context,
                    initialTime: new TimeOfDay.now()) as FutureOr<TimeOfDay>);
                if (_timePicked != null) {
                  _dt = DateTime(_selectedDate!.year, _selectedDate!.month, _selectedDate!.day, _timePicked.hour, _timePicked.minute);
                  setState(() {
                     final localizations = MaterialLocalizations.of(context);
                     final formattedTimeOfDay = localizations.formatTimeOfDay(_timePicked!,alwaysUse24HourFormat: false);
                    eventStartTimeController.text = formattedTimeOfDay;  
                    eventProvider.changeeventstarttime(_dt);
                  });