2

我无法将CupertinoDatePicker' 的minuteInterval:属性设置为 30。它应该是 60 的整数因子,所以 30 应该没问题。但我只能将其设置为 1 或 2,任何其他值都会引发此异常:

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following assertion was thrown building BlocBuilder<BookingBloc, BookingState>(dirty, state: _BlocBuilderBaseState<BookingBloc, BookingState>#c437f):
initial minute is not divisible by minute interval
'package:flutter/src/cupertino/date_picker.dart':
Failed assertion: line 269 pos 7: 'this.initialDateTime.minute % minuteInterval == 0'


Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
  https://github.com/flutter/flutter/issues/new?template=BUG.md

The relevant error-causing widget was: 
  BlocBuilder<BookingBloc, BookingState> file:///Volumes/archivi%20recuperati/Flutter%20apps%20/fixit_cloud_biking/lib/Screens/select_shop_booking_screen.dart:67:14
When the exception was thrown, this was the stack: 
#2      new CupertinoDatePicker (package:flutter/src/cupertino/date_picker.dart:269:7)
#3      _SelectShopBookingScreenState.build.<anonymous closure> (package:fixit_cloud_biking/Screens/select_shop_booking_screen.dart:132:36)
#4      BlocBuilder.build (package:flutter_bloc/src/bloc_builder.dart:90:50)
#5      _BlocBuilderBaseState.build (package:flutter_bloc/src/bloc_builder.dart:162:48)
#6      StatefulElement.build (package:flutter/src/widgets/framework.dart:4334:27)
...
════════════════════════════════════════════════════════════════════════════════════════════════════

是否还有其他设置可以正确设置?

我就是这样设置的。

提前谢谢了。

Expanded(
                          flex: 2,
                          child: Container(
                            padding: EdgeInsets.all(20),
                            color: Colors.transparent,
                            child: CupertinoDatePicker(
                                backgroundColor: Colors.transparent,
                                use24hFormat: true,
                                mode: CupertinoDatePickerMode.dateAndTime,
                                minuteInterval: 30,
                                onDateTimeChanged: (DateTime selected) {
                                  print('selected is $selected');
                                  BlocProvider.of<BookingBloc>(context).add(
                                      FindAvailableShopsForBooking(
                                          bookingStart:
                                              selected.millisecondsSinceEpoch,
                                          duration: widget.duration,
                                          cityDb: widget.cityDb,
                                          regionDb: widget.regionDb,
                                          countryDb: widget.countryDb));
                                }),
                          ),
                        ),
4

2 回答 2

2

在 Github 上进行了几次尝试和沟通后,我们一致认为,如果您设置minuteInterval:除 1 或 2 以外的任何值,断言失败并抛出错误Failed assertion: line 269 pos 7: 'this.initialDateTime.minute % minuteInterval == 0'并没有真正意义,以确保minuteInterval是 60 的整数因子..

我建议60 % minuteInterval == 0'作为一个修复,因为现在它确保minuteInterval是一个整数因子,DateTime.now().minute如果你没有指定任何DateTimeinCupertinoDatePicker initialDateTime:参数。

因此,为了使它像现在一样正常工作,我确实添加了它并使用 DateTime.now() 对其进行了几分钟的初始化,以便0正确地提醒断言0

解决方法:

DateTime initialDate;
  @override
  void initState() {
    super.initState();
    DateTime initial = DateTime.now();
    initialDate =
        DateTime(initial.year, initial.month, initial.day, initial.hour, 0);
  }

然后将其传递给CupertinoDatePicker

新库比蒂诺日期选择器:

CupertinoDatePicker(
                                backgroundColor: Colors.transparent,
                                use24hFormat: true,
                                mode: CupertinoDatePickerMode.dateAndTime,
                                initialDateTime: initialDate,
                                minuteInterval: 30,
                                onDateTimeChanged: (DateTime selected) {
                                  
                                  // do what you need
                                  
                                }),
于 2020-07-10T08:57:22.660 回答
2

您应该更新两个参数:minuteInterval initialDateTime。这是一个间隔 30 分钟的示例:

              SizedBox(
                height: 200,
                child: CupertinoDatePicker(
                  minuteInterval: 30,
                  initialDateTime: DateTime.now().add(
                    Duration(minutes: 30 - DateTime.now().minute % 30),
                  ),
                  mode: CupertinoDatePickerMode.time,
                  use24hFormat: true,
                  onDateTimeChanged: (value) => setState(
                    () {
                      print(value);
                    },
                  ),
                ),
              ),

在此处输入图像描述

于 2021-08-31T16:45:09.953 回答