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

Flutter开发中如何使用GetStorage存储文章ID列表

现有代码问题

  • 内存维护的myFavoriteList未在初始化时同步本地存储的已有数据,应用冷启动后新增ID会覆盖本地原有列表
  • 空安全处理逻辑顺序错误:直接对box.read('favoriteArticles')的返回值调用cast,返回为null时会触发空指针异常
  • 未做ID去重,同一ID重复调用保存方法会在列表中生成冗余条目
  • ifExistInFav方法不需要异步声明,GetStorage读写默认是同步操作

最优实现方案

直接封装单例工具类,避免内存和本地数据不一致问题,代码如下:

import 'package:get_storage/get_storage.dart';

class ArticleStorageUtil {
  // 单例实现
  static final ArticleStorageUtil _instance = ArticleStorageUtil._internal();
  factory ArticleStorageUtil() => _instance;
  ArticleStorageUtil._internal();

  final _box = GetStorage();
  final String _favKey = 'favoriteArticles';
  late List<String> _favList;

  // 初始化时加载本地数据到内存,应用启动入口调用一次即可
  Future<void> init() async {
    await GetStorage.init();
    List? localList = _box.read(_favKey);
    _favList = localList?.cast<String>() ?? [];
  }

  // 保存ID,自动去重
  void saveFav(String id) {
    if (!_favList.contains(id)) {
      _favList.add(id);
      _box.write(_favKey, _favList);
    }
  }

  // 判断ID是否存在
  bool ifExistInFav(String id) {
    return _favList.contains(id);
  }

  // 扩展功能:删除指定ID
  void removeFav(String id) {
    _favList.remove(id);
    _box.write(_favKey, _favList);
  }

  // 获取所有收藏ID列表
  List<String> getAllFav() {
    return List.unmodifiable(_favList); // 返回不可变列表避免外部直接修改内存数据
  }
}

使用说明

  1. 应用启动时先执行初始化:await ArticleStorageUtil().init();
  2. 后续全局直接调用单例方法即可:
    • 保存ID:ArticleStorageUtil().saveFav('目标文章ID');
    • 判断是否已存储:bool isStored = ArticleStorageUtil().ifExistInFav('目标文章ID');
  3. 内存数据和本地存储始终保持同步,无需每次读写都操作磁盘,性能更优

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:24:04