当两个列表具有相同的内容波动时,setState()不起作用

我正在尝试创建一个书签按钮,以将文章保存在列表中。这是我在做什么的一个例子:

https://flutter.dev/docs/development/ui/interactive

目前,我有两个显示两个列表的不同屏幕。每个列表中可以包含相同的文章。我可以在屏幕1列表中的文章上添加书签,并且可以看到同一文章也在屏幕2列表中被添加了书签。现在的问题是,除非在从中添加书签的屏幕上进行操作,否则无法撤消书签。例如,如果我在屏幕1中添加了书签,则可以看到该文章已在屏幕2中添加了书签,但无法撤消在屏幕2中的书签。我只能在屏幕1中撤消该书签,因为该位置已被添加了书签。反之亦然。下面是我用于在两个屏幕上为文章添加书签的代码。

  Widget _bookmark(AllArticlesInfo info) {
    bool isSaved = false;
    for (int i = 0; i < allArticlesInfoSaved.length; i++) {
      if (allArticlesInfoSaved[i].toJson().toString() == info.toJson().toString()) {
        isSaved = true;
        break;
      }
    }
    return InkWell(
      child: Icon(
        isSaved ? Icons.bookmark : Icons.bookmark_border,
        color: isSaved ? Colors.red : null, size: 30,
      ),
      onTap: () {
        setState(() {
          if (isSaved) {
            allArticlesInfoSaved.remove(info);
          } else {
            allArticlesInfoSaved.add(info);
          }
        });
      },
    );
  }
评论