关于用于 null 值的 null 检查运算符

Regarding Null Check Operator Used on a Null Value

提问人:Pulkit Aggarwal 提问时间:4/23/2023 最后编辑:Cavin MacwanPulkit Aggarwal 更新时间:4/24/2023 访问量:34

问:

 BlocBuilder<SettingsBloc, SettingsState> _buildOpeningHours() {
    return BlocBuilder<SettingsBloc, SettingsState>(
            builder: (context, state) {
              if (state is SettingsLoading) {
                return const SizedBox();
              }
              if (state is SettingsLoaded){
                return ListView.builder(
                  itemBuilder: (context, index){
                    var openingHours= state.clinic.openingHours![index];
                    return OpeningHoursSettings(
                      openingHours: openingHours,
                      onCheckboxChanged: (value){
                        context.read<SettingsBloc>().add(UpdateOpeningHours(openingHours: openingHours.copyWith(isOpen: openingHours.isOpen)));
                      }, onSliderChanged: (value) {
                        context.read<SettingsBloc>().add(UpdateOpeningHours(openingHours: openingHours.copyWith(openAt:  value.start, closeAt: value.end)));
                      },
                    );
                  },
                  shrinkWrap: true,
                  itemCount: state.clinic.openingHours!.length,
                );
              }else{
                return Text('Something went Wrong');
              }
            }
          );

我很确定问题出在, 这部分itemCount: state.clinic.openingHours!.length

这是它显示的错误

如果我将那行更改为,那么它什么都不显示state.clinic.openingHours?.length??0

但如果我把它改成state.clinic.openingHours?.length??7

它显示相同的错误

flutter nullreferenceexception

评论

1赞 Rahul 4/23/2023
openingHours 为 null。检查为什么它是 null。

答:

0赞 Jonas Badstübner 4/23/2023 #1

如果将版本与版本放在一起,则会在另一行中收到错误:因为 itemBuilder 不会被调用,除非与 0 不同。 由于为 null,因此加法使 be 为 0。当您尝试访问空值中的索引时,您不会收到错误,因为该函数甚至没有执行一次。据我所知,确实最有意义。 ?? 7var openingHours= state.clinic.openingHours![index];itemCountstate.clinic.openingHours ?? 0itemCountitemBuilder ?? 0

我建议查看您运行 Flutter 应用程序的终端/控制台中的调试输出。学习如何读取堆栈跟踪非常有帮助。