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

Flutter无需Firebase等数据库实现本地习题收藏功能的方法

Flutter本地持久化收藏功能实现方案

可行性结论

无需使用Firebase或其他外部数据库,仅靠Flutter生态的本地存储能力即可完全实现需求,针对数百道习题的量级,性能完全够用。

推荐存储方案

优先使用shared_preferences实现,该方案是Flutter官方维护的轻量级本地键值对存储组件,适配全平台,配置成本极低,适合存储习题ID集合这类简单数据。如果后续需要存储更复杂的习题结构化数据,也可以切换为Hive这类轻量级NoSQL本地数据库。

具体实现步骤

  • 引入依赖
    在pubspec.yaml的dependencies节点下添加:
shared_preferences: ^2.2.2

添加后执行flutter pub get完成依赖安装。

  • 封装收藏数据读写工具方法
import 'package:shared_preferences/shared_preferences.dart';

// 存储收藏的习题ID列表
Future<void> saveFavoriteList(List<String> favoriteIds) async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setStringList('exercise_favorites', favoriteIds);
}

// 获取已收藏的习题ID列表
Future<List<String>> getFavoriteList() async {
  final prefs = await SharedPreferences.getInstance();
  return prefs.getStringList('exercise_favorites') ?? [];
}
  • 修改现有页面代码
    首先在State类中定义两个变量:
// 当前习题的唯一ID,示例中为'1-1'
String currentExerciseId = '1-1';
// 当前习题的收藏状态
bool isFavorite = false;

然后在initState生命周期中初始化状态:

@override
void initState() {
  super.initState();
  _loadFavoriteStatus();
}

Future<void> _loadFavoriteStatus() async {
  List<String> favorites = await getFavoriteList();
  setState(() {
    isFavorite = favorites.contains(currentExerciseId);
  });
}

最后替换你标注//here位置的onPressed逻辑:

IconButton(
  icon: Icon(
    isFavorite ? Icons.bookmark : Icons.bookmark_outline,
    color: isFavorite ? Colors.blueAccent : Colors.black,
  ),
  iconSize: 25,
  onPressed: () async {
    List<String> favorites = await getFavoriteList();
    if (isFavorite) {
      // 已收藏则移除
      favorites.remove(currentExerciseId);
    } else {
      // 未收藏则添加
      favorites.add(currentExerciseId);
    }
    await saveFavoriteList(favorites);
    setState(() {
      isFavorite = !isFavorite;
    });
  }
)

补充说明

如果需要在习题选择页展示收藏状态,只需要在该页初始化时调用getFavoriteList()方法获取所有已收藏的ID,遍历习题列表匹配ID即可展示对应收藏标记。

内容的提问来源于stack exchange,提问作者eno2

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:48:04