首页 > 解决方案 > 如何根据 Flutter 中的条件从其他两个列表中正确生成列表

问题描述

我正在尝试根据其他两个列表生成一个名为 selectedBooks 的列表:

这是第一个列表:

    List<Book> availableBooks = [
       Book(
        id: 1,
        isActive: false,
        name: "Tipo 1"
       ),
       Book(
        id: 2,
        isActive: false,
        name: "Tipo 2"
       ),
       Book(
        id: 3,
        isActive: false,
        name: "Tipo 3"
       ),
       Book(
        id: 4,
        isActive: false,
        name: "Tipo 4"
       ),
    ]

这是第二个列表:

    List<Book> allowedBooks = [
       Book(
        id: 1,
        isActive: true,
        name: "Tipo 1"
       ),
       Book(
        id: 3,
        isActive: true,
        name: "Tipo 3"
       ),
    ]

这是我要生成的列表:

       selectedBooks = availableBooks
          .map((book) =>
              allowedBooks.contains(book.id)
                  ? Book(
                      id: book.id,
                      isActive: true,
                      name: book.name)
                  : Book(
                      id: book.id,
                      isActive: false,
                      name: book.name))
          .toList();

由于 allowedBooks 确实包含 id 1 和 3,我希望 selectedBooks 是:

    List<Book> selectedBooks = [
       Book(
        id: 1,
        isActive: true,
        name: "Tipo 1"
       ),
       Book(
        id: 2,
        isActive: false,
        name: "Tipo 2"
       ),
       Book(
        id: 3,
        isActive: true,
        name: "Tipo 3"
       ),
       Book(
        id: 4,
        isActive: false,
        name: "Tipo 4"
       ),
    ]

但是,这不起作用,因为 selectedBooks 最终将所有 book.isActive 设置为 false。

我认为在包括以下条件的情况下某些东西没有按预期工作:

selectedBooks = availableBooks
          .map((book) =>
              allowedBooks.contains(book.id) ? ...

有什么线索吗?非常感谢。

标签: listflutter

解决方案


而不是allowedBooks.contains(book.id)你应该使用allowedBooks.any((allowedBook) => allowedBook.id == book.id)


推荐阅读