Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter Dart-如何使用NullAware运算符简化IF条件_Flutter_Dart - Fatal编程技术网

Flutter Dart-如何使用NullAware运算符简化IF条件

Flutter Dart-如何使用NullAware运算符简化IF条件,flutter,dart,Flutter,Dart,有没有办法简化这个条件从句: if (_username != null &&_username.isNotEmpty && _pass != null && _pass.isNotEmpty){ connectionBloc.dispatch(GetUserInfoEventImpl(_username, _pass)); } 使用空感知操作符 我试过: if (_username?.isNotEmpty?? false

有没有办法简化这个条件从句:

if (_username != null &&_username.isNotEmpty  && _pass != null && _pass.isNotEmpty){
      connectionBloc.dispatch(GetUserInfoEventImpl(_username, _pass));
    }
使用空感知操作符

我试过:

if (_username?.isNotEmpty?? false && _pass?.isNotEmpty?? false){
      connectionBloc.dispatch(GetUserInfoEventImpl(_username, _pass));
    }

但我认为有一个问题,因为Android Studio说无法达到右边的条件,这是不对的。

你可以这样做

     String test = null;
  bool v = _stringIsNotEmptyOrNull(test);
  print("Boolean value is $v");
  test = "";
  bool v1 = _stringIsNotEmptyOrNull(test);
  print("Boolean value is $v1");
  test = "test";
  bool v2 = _stringIsNotEmptyOrNull(test);
  print("Boolean value is $v2");
检查功能可以写成

bool _stringIsNotEmptyOrNull(String value) {
return value?.isNotEmpty ?? false;
}


对于空感知访问,您必须显式地将结果与true或false进行比较:

  if (_username?.isNotEmpty == true && _pass?.isNotEmpty == true) {
    ...
  }
对于您的变体,代码中缺少括号,因为
Null合并运算符
的优先级最低:

  if ((_username?.isNotEmpty ?? false) && (_pass?.isNotEmpty ?? false)) {
    ...
  }

对于第一个函数名,在cameCase中使用命名,而函数名比其中的代码长-丑陋,useless@Eugene你怎么知道这个函数是没有用的,如果你知道的比我多,我会用第二种形式<代码>==true比较总是让人觉得可疑,在可能为空的情况下,第一种形式需要我更长的时间来推理。这些情况下的
==true
方法还有一个不寻常的特性,即它不等同于
!=false
。此外,在更一般的意义上,如果你处理的是一个可能为空的
bool
if(someBool==true)
看起来像是可以简化为
if(someBool)
,而
if(someBool??false)
让读者明白
someBool
是可以为空的。
  if ((_username?.isNotEmpty ?? false) && (_pass?.isNotEmpty ?? false)) {
    ...
  }