【问题标题】:Proper using of question mark (null safety) in flutter在颤振中正确使用问号(空安全)
【发布时间】:2021-10-22 12:18:20
【问题描述】:

flutter null 安全性是否相等?

    if(widget.mapPickerController != null){
      widget.mapPickerController!.mapMoving = mapMoving;
      widget.mapPickerController!.mapFinishedMoving = mapFinishedMoving;
    }
    widget.mapPickerController?.mapMoving = mapMoving;
    widget.mapPickerController?.mapFinishedMoving = mapFinishedMoving;

【问题讨论】:

    标签: flutter dart dart-null-safety


    【解决方案1】:

    两个版本最终都应该做同样的事情。 When null-safety enabled, ?. short-circuits the rest of the expression,所以如果接收者是null,则表达式的其余部分(包括赋值的右侧)将不会被计算。您可以在以下示例中观察到这一点:

    class Foo {
      int value = 0;
    }
    
    int bar() {
      print('Called bar');
      return 42;
    }
    
    void main() {
      Foo? foo = null;
      foo?.value = bar();
    }
    

    在哪里运行它不会产生错误,并显示bar() 从未被调用过。

    也就是说,使用 ?. 的第二个版本不太清楚(从几个已删除答案中明显的混淆可以看出这一点),因此可能应该避免。

    最好的方法是引入一个局部变量:

    final mapPickerController = widget.mapPickerController;
    if (mapPickerController != null){
      mapPickerController.mapMoving = mapMoving;
      mapPickerController.mapFinishedMoving = mapFinishedMoving;
    }
    

    然后您根本不需要使用 null 断言运算符,因为您只检查一次 null,所以它的效率略高。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 2021-06-26
      相关资源
      最近更新 更多