颤振:三元条件不起作用

时间:2021-03-16 11:44:55

标签: flutter dart visibility ternary

我正在尝试为 Visibility() 小部件创建条件。我已经通过两种方式尝试了这一点。 1st way 中的第 2 个条件完美运行,但第一个条件不起作用。

与第二种方式相同,我的第二个条件运行良好,但第一个和第三个条件不起作用。

我还检查了字符串值和 id 值,没问题。

请有人描述一下我有什么问题

<块引用>

第一种方式

Visibility(
                  visible: (_educationLevelName == "H.S.C or Equivalent" &&
                              (examinationNameID != 8 || //1st condition
                                  examinationNameID != 11)) ||
                          (_educationLevelName == "S.S.C or Equivalent" &&
                              examinationNameID != 3) //2nd condition
                      ? true
                      : false,
                  child: Container()
                   
                ),
<块引用>

第二种方式:

Visibility(
                  visible: (_educationLevelName == "H.S.C or Equivalent" &&
                              examinationNameID !=
                                  8) || //<<================== //1st condition
                          (_educationLevelName == "S.S.C or Equivalent" &&
                              examinationNameID !=
                                  3) || //<<================== //2nd condition

                          (_educationLevelName == "H.S.C or Equivalent" &&
                              examinationNameID !=
                                  11) //<<================== //3rd condition
                      ? true
                      : false,
                  child: Container(),
                ),

您可以在DartPad

上签到

4 个答案:

答案 0 :(得分:1)

如果我说得对,这是您的 3 个条件:

  1. _educationLevelName == "H.S.C 或同等学历" && ExamNameID != 8
  2. _educationLevelName == "S.S.C 或等效"&&examinationNameID != 3
  3. _educationLevelName ==“H.S.C 或同等学历”&&examinationNameID != 11

你简化为:

  1. _educationLevelName == "H.S.C or Equivalent" && (examinationNameID != 8 || ExamNameID != 11)
  2. _educationLevelName == "S.S.C 或等效"&&examinationNameID != 3

我认为你的条件是错误的,这可能会更好:

  1. _educationLevelName == "H.S.C or Equivalent" && (examinationNameID != 8 && ExamNameID != 11)
  2. _educationLevelName == "S.S.C 或等效"&&examinationNameID != 3

案例 1:

  String _educationLevelName = "H.S.C or Equivalent";
  int examinationNameID = 8;

=> 未显示,因为条件必须是“H.S.C 或等效”AND id !=(8 AND 11)

案例 2:

  String _educationLevelName = "H.S.C or Equivalent";
  int examinationNameID = 3;

=> 显示

顺便说一下,您可以简化代码(删除真/假,因为您已经在检查布尔值):

Visibility(
                  visible: (_educationLevelName == "H.S.C or Equivalent" &&
                              (examinationNameID != 8 && examinationNameID != 11)) 
                          || (_educationLevelName == "S.S.C or Equivalent" && examinationNameID != 3),
                  child: Container()
                   
                ),

答案 1 :(得分:1)

可以这样写,方便理解

  String lvl = 'hsc';
  int year = 8;

  bool isValidForHsc = lvl == 'hsc' && ![8, 11].contains(year);
  bool isValidForSsc = lvl == 'ssc' && year != 3;
  
  print('$lvl - $year');
  print('isValidForHsc - $isValidForHsc');
  print('isValidForSsc - $isValidForSsc');

否则,你可以这样组合逻辑

  bool isValid = (lvl == 'hsc' && ![8, 11].contains(year)) || (lvl == 'ssc' && year != 3);

答案 2 :(得分:0)

我建议您创建一个布尔函数或 getter 来计算所有条件,然后您可以使用:

if(condition)
Container(
 child: .....
)

condition ? Container(child: ...) : Container()

第二个容器是空的。

答案 3 :(得分:0)

我查看了您的三元数据,我认为您在 @ReactMethod public void setScrollView(Object view) { Log.i("MyModule", "Android Code: setScrollView()"); } 中使用了 || 而不是 &&。如果我正确理解了您的条件,那么如果 educationLevelName == "H.S.C or Equivalent" && (examinationNameID != 8 || examinationNameID != 11) 不是 8 或 11,那么您应该使用 examinationNameID 运算符。

这是我对您的代码所做的一个小重构,用于分离您的条件并修复它:

&&

我还进行了一些单元测试来检查预期的返回值,您可以try it on DartPad