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); // 返回不可变列表避免外部直接修改内存数据 } }
使用说明
- 应用启动时先执行初始化:
await ArticleStorageUtil().init(); - 后续全局直接调用单例方法即可:
- 保存ID:
ArticleStorageUtil().saveFav('目标文章ID'); - 判断是否已存储:
bool isStored = ArticleStorageUtil().ifExistInFav('目标文章ID');
- 保存ID:
- 内存数据和本地存储始终保持同步,无需每次读写都操作磁盘,性能更优
内容的提问来源于stack exchange,提问作者jancooth
相关产品推荐
相关产品推荐

