当我使用 map 函数时,类型 '(dynamic) => dynamic' 不是 'test' 类型 '(dynamic) => bool' 的子类型

type '(dynamic) => dynamic' is not a subtype of type '(dynamic) => bool' of 'test' when I use map function

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

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

现在我需要过滤地图 List<dynamic> 项中的项。

我用这段代码过滤:

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' is not a subtype of type '(dynamic) => bool' of 'test'

其中方法return是一个列表,所以不需要使用toList(),使用时需要指定return类型的map方法。

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

我用这段代码解决了:

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 函数似乎没有 return 布尔值。

我相信这也会起作用,但仍然不确定为什么 return 不是 bool

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