Search code examples
flutterdartvisibilityternary

Flutter: Ternary Condition is not working


I am trying to create a condition for Visibility() widget. I already trying this by two way. Where in 1st way by 2nd condition is working perfectly but first condition isn't working.

Same as in 2nd way my 2nd condition is working perfectly but 1st and 3rd condition isn't working.

I also checked string value and id value it's okay.

Please someone describe me, what is the problem

1st way

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()
                   
                ),

2nd way:

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(),
                ),

You can check in on DartPad


Solution

  • If I get it right here are your 3 condition :

    1. _educationLevelName == "H.S.C or Equivalent" && examinationNameID != 8
    2. _educationLevelName == "S.S.C or Equivalent" && examinationNameID != 3
    3. _educationLevelName == "H.S.C or Equivalent" && examinationNameID != 11

    Which you simplify to :

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

    I think your condition is wrong, this might be better :

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

    Case 1 :

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

    => not displayed because of condition must be "H.S.C or Equivalent" AND id !=(8 AND 11)

    Case 2 :

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

    => displayed

    By the way you can simplify you code (remove the true/false because you are already checking boolean) :

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