Dart compare int null 安全问题:不能无条件调用运算符,因为接收者可以是 'null'
Dart compare int null safety issue : operator can't be unconditionally invoked because the receiver can be 'null'
我有一个 class State
的对象,它包含一个名为 playList 的可空列表和一个可空播放器对象。
当我尝试写这个 if 语句时
if(state.playList?.length > 0 && state.player?.currentIndex? >0)
我遇到了这个错误
The operator '>' can't be unconditionally invoked because the receiver
can be 'null'
我通过写两个嵌套的 if 语句解决了这个问题
if(state.playList != null && state.player?.currentIndex !=null)
{
if(state.playList!.length > 0 && state.player!.currentIndex! >0 )
{
//some code
}
}
如何更好地重写上面的代码?
一种方法是
if((state.playList?.length ?? 0) > 0
&& (state.player?.currentIndex ?? 0) > 0)
但是,如果您以后要使用这些值,则需要将它们放在局部变量中,否则您将不得不添加无数 !
,就像您在第二个示例中遇到的那样。
作为稍后如何通过使用将在检查后“提升”为不可空类型的局部变量来“摆脱”可空性的示例:
final playList = state.playList;
final currentIndex = state.player?.currentIndex;
if(playList != null && currentIndex != null)
{
if(playList.length > 0 && currentIndex > 0)
{
//some code
}
}
我有一个 class State
的对象,它包含一个名为 playList 的可空列表和一个可空播放器对象。
当我尝试写这个 if 语句时
if(state.playList?.length > 0 && state.player?.currentIndex? >0)
我遇到了这个错误
The operator '>' can't be unconditionally invoked because the receiver can be 'null'
我通过写两个嵌套的 if 语句解决了这个问题
if(state.playList != null && state.player?.currentIndex !=null)
{
if(state.playList!.length > 0 && state.player!.currentIndex! >0 )
{
//some code
}
}
如何更好地重写上面的代码?
一种方法是
if((state.playList?.length ?? 0) > 0
&& (state.player?.currentIndex ?? 0) > 0)
但是,如果您以后要使用这些值,则需要将它们放在局部变量中,否则您将不得不添加无数 !
,就像您在第二个示例中遇到的那样。
作为稍后如何通过使用将在检查后“提升”为不可空类型的局部变量来“摆脱”可空性的示例:
final playList = state.playList;
final currentIndex = state.player?.currentIndex;
if(playList != null && currentIndex != null)
{
if(playList.length > 0 && currentIndex > 0)
{
//some code
}
}