在Flutter中使用flutter_secure_storage存储字符串列表是否可行?
Flutter Secure Storage 存储List方案说明
需求可行性说明
flutter_secure_storage 官方仅支持存储String类型的键值对,原生不支持直接写入、读取List
类型,你想要的直接调用 storage.read返回List的效果无法通过原生API直接实现,但可以通过简单的封装实现完全等效的调用体验。
推荐实现方案
方案1:手动序列化/反序列化(适合少量使用场景)
核心逻辑是利用JSON序列化将List
写入示例
import 'dart:convert'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; final storage = FlutterSecureStorage(); List<String> listViewerBuilderString = ['a1','a2','a3']; // 将列表序列化为JSON字符串 String storedValue = jsonEncode(listViewerBuilderString); await storage.write(key: 'listOfItems', value: storedValue);
读取示例
String? storedValue = await storage.read(key: 'listOfItems'); List<String> listViewerBuilderString = []; if (storedValue != null) { // 将JSON字符串反序列化为List<String> listViewerBuilderString = List<String>.from(jsonDecode(storedValue)); }
方案2:扩展方法封装(适合频繁使用场景,可实现近似原生调用效果)
给FlutterSecureStorage扩展自定义的读写列表方法,封装序列化逻辑,调用更简洁。
扩展代码
import 'dart:convert'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; extension FlutterSecureStorageListExtension on FlutterSecureStorage { /// 存储List<String> Future<void> writeStringList({ required String key, required List<String> value, }) async { final jsonStr = jsonEncode(value); await write(key: key, value: jsonStr); } /// 读取List<String>,无数据时默认返回空列表 Future<List<String>> readStringList({required String key}) async { final jsonStr = await read(key: key); if (jsonStr == null) return []; return List<String>.from(jsonDecode(jsonStr)); } }
调用示例(完全匹配你想要的简洁效果)
// 写入 await storage.writeStringList(key: 'listOfItems', value: ['a1','a2','a3']); // 读取 List<String> listViewerBuilderString = await storage.readStringList(key: 'listOfItems');
注意事项
- 不要使用自定义分隔符(比如逗号、竖线)拼接字符串存储,一旦列表元素包含分隔符会出现解析错误,JSON序列化是目前最稳妥的类型转换方案
- 如果需要支持读取空值返回null而不是空列表,可自行修改扩展方法中的返回逻辑
内容的提问来源于stack exchange,提问作者Adeeb Mark
相关产品推荐
相关产品推荐

