【问题标题】:type 'Null' is not a subtype of type 'bool' in type cast类型“Null”不是类型转换中“bool”类型的子类型
【发布时间】: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

【问题讨论】:

    标签: flutter dart flutter-dependencies dart-pub dart-null-safety


    【解决方案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”经常出现,以至于我们有了一个新的 速记语法。后缀感叹号 (!) 采用表达式 在左侧并将其转换为其底层的不可为空的类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2022-09-24
      • 2021-12-06
      • 2022-01-19
      • 2021-11-28
      相关资源
      最近更新 更多