这个运算符是什么?在Dart吗?

时间:2019-10-13 10:54:40

标签: flutter dart operators

我使用Flutter框架 这部分代码使用操作“?”。但是愚蠢的人了解

 if (state is WeatherLoaded) {
          final weather = state.weather;
          final themeBloc = BlocProvider.of<ThemeBloc>(context);
          themeBloc.dispatch(WeatherChanged(condition: weather.condition));

          _refreshCompleter?.complete();
          _refreshCompleter = Completer();

所有代码this链接

2 个答案:

答案 0 :(得分:0)

检查此链接:Language tour

  

?。

     

有条件的成员访问权限

     

与。类似,但最左边的操作数可以为null;例如:foo?.bar   从表达式foo中选择属性栏,除非foo为null(其中   如果foo?.bar的值为null)

答案 1 :(得分:0)

证明这一点的最好方法是一个简单的例子。
我有一个方法为SomeObject的对象username

我制作了2个实例:

  • aeonObject不是null
  • someOtherObject,即null
class SomeObject {
  String username() => "aeon";
}

void main() {
  final aeonObject = SomeObject();
  print(aeonObject.username());

  SomeObject someOtherObject;
  print(someOtherObject.username());
}

如果我执行此代码段,您将看到以下输出。
该程序将崩溃,因为我们尝试在null引用上执行方法。

  

dart lib / main.dart   lib / main.dart:警告:将此解释为包URI,“ package:sample / main.dart”。

     

aeon

     

未处理的异常:   NoSuchMethodError:方法“用户名”在null上被调用。

     

接收器:null   尝试调用:username()

但是如果我用print?.来调用Conditional member access operator语句。

print(someOtherObject?.username());

我们取而代之。