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
    }
}