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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:18:01