Flutter使用shared_preferences如何获取前缀为特定字符串的所有存储值
解决方案
核心思路是调用SharedPreferences实例的getKeys()方法获取全部已存储的键,再通过前缀匹配过滤后逐个取值即可。
全String类型取值示例(返回值列表)
import 'package:shared_preferences/shared_preferences.dart'; Future<List<String>> getItemsFromPrefs() async { final prefs = await SharedPreferences.getInstance(); // 获取所有已存储的键集合 final allKeys = prefs.getKeys(); // 筛选键名前缀为item_的目标键 final targetKeys = allKeys.where((key) => key.startsWith('item_')); List<String> result = []; for (final key in targetKeys) { // 如果item存储的是其他类型,替换为对应取值方法即可,比如getStringList final value = prefs.getString(key); if (value != null) { result.add(value); } } return result; }
保留键值对示例(返回Map)
如果需要同时保留对应的键名,可按如下方式实现:
Future<Map<String, dynamic>> getItemMapFromPrefs() async { final prefs = await SharedPreferences.getInstance(); final allKeys = prefs.getKeys(); final targetKeys = allKeys.where((key) => key.startsWith('item_')); Map<String, dynamic> result = {}; for (final key in targetKeys) { final value = prefs.get(key); if (value != null) { result[key] = value; } } return result; }
注意事项
startsWith默认区分大小写,若需要忽略大小写匹配,可修改为key.toLowerCase().startsWith('item_')- 若存储的item类型不统一,可先拿到动态值后再做类型判断,避免类型转换异常
- 该操作为内存级操作,即使存储的键数量较多也不会有明显性能损耗
内容的提问来源于stack exchange,提问作者Praveen
相关产品推荐
相关产品推荐

