Search code examples
flutterdartdart-null-safety

Equivalent of if let and guard let of Swift in Dart


Just started Flutter with native iOS background, so I just have a quick question about Dart beta null safety.

So in Swift, because they have the idea of null safety from the beginning just like Kotlin, there are 2 features that I really like about the language is if let and guard let. These 2 make working with optional values so much easier. I'm not sure if the beta version of Dart has anything like that.

Thanks


Solution

  • I'm not an expert on Swift, but Dart will use null checks to automatically promote types, and I think that mostly does the job of if let and guard let.

    For example:

    String? x = possiblyReturnsNull();
    if (x != null) {
      // All code within this block treats `x` as non-nullable.
    }
    
    // All code outside the block continues to treat `x` as nullable.
    

    Note that promotion won't be performed on non-local variables or for instance variables that aren't both final and private, so for those you would need to explicitly introduce a local reference.

    As of Dart 3, you can use a null-check pattern to do the same without introducing that local variable to the outer scope:

    if (possiblyReturnsNull() case var x?) {
      // All code within this block treats `x` as non-nullable.
    }
    
    // `x` does not exist.