Munsif Ali
Munsif Ali

Reputation: 5842

type 'Null' is not a subtype of type 'bool' in type cast

I have Created a Map<String,bool>(in which the key are of type String and the values are of type Boolean) in flutter and When I want to use the bool values in if condition it give me error saying "A nullable expression can't be used as a condition. Try checking that the value isn't 'null' before using it as a condition." When I use "as bool" then the error is gone but the program is not executed properly and give me the error in the pic

//this is the code
 Map<String, bool> _userFilters = {
"gluten": false,
"lactose": false,
"vegan": false,
"vegetarian": false,
 };
  List<Meal> filteredMeal = DUMMY_MEALS;
  void saveFilters(Map<String, bool> filteredData) {
    setState(() {
      _userFilters = filteredData;
      filteredMeal = DUMMY_MEALS.where(
        (meal) {
          if (_userFilters['gluten']as bool) { // _userFilter['gluten'] is giving error
            return false;
          }
          if (_userFilters['lactose']as bool) {
            return false;
          }
          if (_userFilters['vegan']as bool) {
            return false;
          }
          if (_userFilters['vegetarian'] as bool) {
            return false;
          }
          return true;
        },
      ).toList();
    });
  }

enter image description here

Upvotes: 0

Views: 5089

Answers (1)

Amirhossein Shahbazi
Amirhossein Shahbazi

Reputation: 1111

No need to cast your map entries to booleans. use an exclamation mark at the end of your variable (e.g, _usedFilters['gluten']!) to treat it as non-nullable.

Rewrite all your conditions like this (if you're sure that the value won't be null):

    if (_userFilters['gluten']!) {
      return false;
    }
    if (_userFilters['lactose']!) {
      return false;
    }
    if (_userFilters['vegan']!) {
      return false;
    }
    if (_userFilters['vegetarian']!) {
      return false;
    }

From Dart.dev:

“Casting away nullability” comes up often enough that we have a new shorthand syntax. A postfix exclamation mark (!) takes the expression on the left and casts it to its underlying non-nullable type.

Upvotes: 0

Related Questions