4

我有一个带有 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());
    });
}

但我得到了这个主题的错误

类型“(动态)=>动态”不是“测试”类型“(动态)=>布尔”的子类型

4

3 回答 3

6

我用这段代码解决了:

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

于 2019-12-15T15:08:29.040 回答
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());
    });
}
于 2020-07-06T08:42:12.570 回答
0

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

  filter(_items) {
    return _items.map<String, List<bool>>((day, items) {
      return MapEntry(
        day, items.where((i) => i.stringProperty.contains(widget.filter)),
      );
    });
  }
于 2019-12-15T12:52:21.763 回答