我正在尝试为 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
上签到答案 0 :(得分:1)
如果我说得对,这是您的 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。