【问题标题】:type '(dynamic) => dynamic' is not a subtype of type '(dynamic) => bool' of 'test' when I use map function当我使用映射函数时,类型“(动态)=>动态”不是“测试”类型“(动态)=>布尔”的子类型
【发布时间】:2019-12-15 11:31:53
【问题描述】:

我有一个带有 LinkedHashMap 成员的 StatefulWidget 小部件,如下所示:

LinkedHashMap _items = new LinkedHashMap<String, List<dynamic>>();

现在我需要过滤 Map 的 List&lt;dynamic&gt; 项目中的项目。

我用这段代码过滤:

function filter(_items) {
    return _items.map((day, items) {
        return new MapEntry(day, items.where((i) {
          return i.stringProperty.contains(widget.filter);
        }).toList());
    });
}

但我得到了主题的错误

type '(dynamic) => dynamic' 不是 'test' 的类型 '(dynamic) => bool' 的子类型

【问题讨论】:

  • Dart 版本 2.7.2 的类似问题,三元运算符技巧解决了它。我什至没有使用像 contains 这样的函数,而是直接布尔测试 (a&gt;0)。也许某处有一些错误或回归。顺便说一句,test 是根据language reference 传递给where 的回调。

标签: flutter dart widget statefulwidget


【解决方案1】:

我用这段代码解决了:

function filter(_items) {
    return _items.map((day, items) {
        return new MapEntry(day, items.where((i) {
          return i.stringProperty.contains(widget.filter) ? true : false;
        }).toList());
    });
}

contains 函数似乎没有返回 bool 值。

【讨论】:

  • contains 确实返回一个布尔值。有其他东西在干扰。
  • @RandalSchwartz 有效的解决方案很清楚,问题是 contains 函数的返回值。我找不到干扰的东西。
  • 我用类似的方法解决了这个问题。使用 "? true : false" 或 "as bool" 作为包含。虽然,很好奇为什么它不接受 contains 方法的结果。正如文档所说,它应该返回一个布尔值 - api.flutter.dev/flutter/dart-core/Iterable/contains.html
【解决方案2】:

我相信这也可以,但仍然不确定为什么它不返回布尔值

function filter(_items) {
    return _items.map((day, items) {
        return new MapEntry(day, items.where((i) {
          return (i.stringProperty.contains(widget.filter)) as bool;
        }).toList());
    });
}

【讨论】:

    【解决方案3】:

    Where方法返回一个列表,所以不需要使用toList(),使用时需要指定map方法的返回类型。

      filter(_items) {
        return _items.map<String, List<bool>>((day, items) {
          return MapEntry(
            day, items.where((i) => i.stringProperty.contains(widget.filter)),
          );
        });
      }
    

    【讨论】:

    • 我不应该返回&lt;String, List&lt;dynamic&gt;&gt;而不是&lt;String, List&lt;bool&gt;&gt;吗?
    • 无论如何我都尝试了booldynamic,但我仍然得到错误。我什至无法理解这个错误发生在哪里
    猜你喜欢
    • 1970-01-01
    • 2021-09-29
    • 2020-07-29
    • 2022-11-22
    • 2021-12-24
    • 2017-12-23
    • 2020-03-20
    • 1970-01-01
    • 2021-01-04
    相关资源
    最近更新 更多