类型“Null”不是类型转换中“bool”类型的子类型

Posted

技术标签:

【中文标题】类型“Null”不是类型转换中“bool”类型的子类型【英文标题】:type 'Null' is not a subtype of type 'bool' in type cast 【发布时间】:2021-10-22 18:25:27 【问题描述】:

我在颤振中创建了一个 Map(其中键的类型为 String,值的类型为 Boolean),当我想在 if 条件下使用 bool 值时,它给我错误提示“可空表达式不能用作条件。 在将其用作条件之前,请尝试检查该值是否不是“空”。” 当我使用“as bool”时,错误消失了,但程序没有正确执行,并在图片中显示错误

//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

【问题讨论】:

【参考方案1】:

无需将您的地图条目转换为布尔值。在变量末尾使用感叹号(例如 _usedFilters['gluten']!)将其视为不可为空。

像这样重写所有条件(如果您确定该值不会为空):

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

来自Dart.dev:

“Casting away nullability”经常出现,以至于我们有了一个新的 速记语法。后缀感叹号 (!) 采用表达式 在左侧并将其转换为其底层的不可为空的类型。

【讨论】:

以上是关于类型“Null”不是类型转换中“bool”类型的子类型的主要内容,如果未能解决你的问题,请参考以下文章

未处理的异常:类型“bool”不是类型转换中“String”类型的子类型

类型“null”不是类型转换中“list dynamic”类型的子类型

Flutter 未处理的异常:类型“Null”不是类型转换中“List<dynamic>”类型的子类型

颤振类型错误future <dynamic> 不是future <bool> 类型的子类型

类型'String'不是get方法颤动中类型'Null'的子类型

Firestore / flutterFire / type 'List<dynamic>' 不是类型 'List<bool>' 的子类型