Flutter 设置CupertinodePicker minuteInterval:引发异常。颤振

Flutter 设置CupertinodePicker minuteInterval:引发异常。颤振,flutter,cupertinopicker,Flutter,Cupertinopicker,我无法将cupertinodepicker的分钟间隔:属性设置为30。 它应该是一个60的整数因子,所以30就可以了。但我只能将其设置为1或2,任何其他值都会引发此异常: ════════ Exception caught by widgets library ═══════════════════════════════════════════════════════ The following assertion was thrown building BlocBuilder<Book

我无法将
cupertinodepicker
分钟间隔:
属性设置为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)
...
════════════════════════════════════════════════════════════════════════════════════════════════════
════════ widgets库捕获到异常═══════════════════════════════════════════════════════
生成BlocBuilder时引发了以下断言(脏,状态:_BlocBuilderBaseState#c437f):
初始分钟不能被分钟间隔整除
“包装:颤振/src/cupertino/date\u picker.dart”:
断言失败:第269行位置7:“this.initialDateTime.minute%minuteInterval==0”
要么断言表明框架本身存在错误,要么我们应该在此错误消息中提供更多信息,以帮助您确定并修复根本原因。
在任何一种情况下,请通过在GitHub上提交bug来报告此断言:
https://github.com/flutter/flutter/issues/new?template=BUG.md
导致错误的相关小部件是:
BlocBuilderfile:///Volumes/archivi%20recuperati/Flutter%20apps%20/fixit_cloud_biking/lib/Screens/select_shop_booking_screen.dart:67:14
引发异常时,这是堆栈:
#2个新的CupertinoDatePicker(包装:颤振/src/cupertino/date_picker.省道:269:7)
#3\u选择ShopBookingScreenstate.build。(套餐:fixit\u cloud\u biking/Screens/select\u shop\u booking\u screen.省道:132:36)
#4 BlocBuilder.build(包:flatter\u bloc/src/bloc\u builder.dart:90:50)
#5\u BlocBuilderBaseState.build(包:flatter\u bloc/src/bloc\u builder.dart:162:48)
#6 StatefulElement.build(包:flatter/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));
                                }),
                          ),
                        ),
扩展(
弹性:2,
子:容器(
填充:边缘设置。全部(20),
颜色:颜色。透明,
孩子:Cupertinodepicker(
背景颜色:颜色。透明,
use24h格式:正确,
模式:CupertinodePickerMode.dateAndTime,
分钟间隔:30,
onDateTimeChanged:(已选择日期时间){
打印(“所选为$selected”);
BlocProvider.of(上下文)。添加(
FindAvailableShopsForBooking(
预订开始:
已选定。毫秒秒新纪元,
持续时间:widget.duration,
cityDb:widget.cityDb,
regionDb:widget.regionDb,
countryDb:widget.countryDb);
}),
),
),

在Github上进行了几次尝试和通信之后,我们同意如果您设置
分钟间隔:
除1或2之外的任何值,并抛出错误
Failed断言:第269行第7位:“this.initialDateTime.minute%minuteInterval==0”
确保
minuteInterval
是一个60的整数因子没有意义

我建议将
60%minuteInterval==0'
作为一个修正,因为现在它确保
minuteInterval
DateTime.now()的整数因子。如果在
cupertinodepicker
中未指定任何
DateTime
初始日期时间:
参数,则分钟

因此,为了使它像现在一样正常工作,我添加了它,并用DateTime.now()初始化它,在
0
处用分钟来正确地提醒断言
0
,如下所示:

解决方法: 然后将其传递给
CupertinodePicker

新的CupertinodePicker:
DateTime initialDate;
  @override
  void initState() {
    super.initState();
    DateTime initial = DateTime.now();
    initialDate =
        DateTime(initial.year, initial.month, initial.day, initial.hour, 0);
  }
CupertinoDatePicker(
                                backgroundColor: Colors.transparent,
                                use24hFormat: true,
                                mode: CupertinoDatePickerMode.dateAndTime,
                                initialDateTime: initialDate,
                                minuteInterval: 30,
                                onDateTimeChanged: (DateTime selected) {
                                  
                                  // do what you need
                                  
                                }),