You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中RobotAnimation收藏状态搜索后丢失问题求助

搜索后收藏状态丢失问题修复

问题根源

  • 点击收藏仅修改了当前animations列表中对象的isFavorite字段,但未将状态同步到defaultFavorites这个持久化的收藏数据源
  • 搜索时会通过getAnimationList重新创建RobotAnimation对象,新对象的收藏状态仅从defaultFavorites读取,之前修改的状态未被保存,导致搜索后丢失

修复方案

1. 同步收藏状态到数据源

点击收藏按钮时,同时更新defaultFavorites列表:

IconButton(
  onPressed: () {
    setState(() {
      final currentAnim = animations[index];
      final animTitle = currentAnim.title;
      if (currentAnim.isFavorite) {
        currentAnim.isFavorite = false;
        defaultFavorites.remove(animTitle);
      } else {
        currentAnim.isFavorite = true;
        defaultFavorites.add(animTitle);
      }
    });
  },
  icon: animations[index].isFavorite
      ? Icon(Icons.favorite, color: Colors.red.shade500)
      : Icon(Icons.favorite_border, color: Colors.grey.shade500),
)

2. 修正无效的收藏筛选方法

原filterFavorites方法没有正确赋值结果,修正如下(如果业务中需要用到):

List<RobotAnimation> filterFavorites() {
  favoriteAnimations = animations.where((anim) => anim.isFavorite).toList();
  return favoriteAnimations;
}

3. (可选)本地持久化收藏状态

若需要APP重启后保留收藏状态,可使用shared_preferences库:

  • 初始化时从本地读取收藏列表到defaultFavorites
  • 修改defaultFavorites时同步保存到本地存储

原理说明

将defaultFavorites作为收藏状态的唯一可信数据源,每次修改收藏都更新该列表。搜索生成新列表时,getAnimationList会依据这个最新的数据源设置isFavorite字段,确保搜索后的列表能正确继承之前的收藏状态。

内容的提问来源于stack exchange,提问作者Sisimośki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 20:25:22