SharedPreferences
是 Flutter 中用于存储轻量级数据的机制,类似于 Android 平台上的 SharedPreferences
。它允许你存储键值对数据,通常用于存储应用的配置信息、用户偏好设置等。
你遇到的问题是:尝试将一个 List<Object>
类型的数据存储到 SharedPreferences
中,但 SharedPreferences
只支持基本数据类型(如 String
、int
、bool
等)和它们的集合类型(如 List<String>
、Set<String>
等),而不支持 List<Object>
类型。
SharedPreferences
的设计初衷是为了存储简单的键值对数据,因此它只支持基本数据类型及其集合类型。List<Object>
包含了任意类型的对象,这使得数据的序列化和反序列化变得复杂且不可控。
为了将 List<Object>
存储到 SharedPreferences
中,你需要将其转换为 SharedPreferences
支持的数据类型。常见的做法是将 List<Object>
序列化为 String
(例如使用 JSON 格式),然后再存储。
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'dart:convert';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('SharedPreferences Example')),
body: Center(child: StoreListExample()),
),
);
}
}
class StoreListExample extends StatefulWidget {
@override
_StoreListExampleState createState() => _StoreListExampleState();
}
class _StoreListExampleState extends State<StoreListExample> {
List<Object> _list = [1, 'two', {'key': 'value'}];
void _saveList() async {
final prefs = await SharedPreferences.getInstance();
final jsonString = jsonEncode(_list);
await prefs.setString('myList', jsonString);
}
List<Object> _loadList() async {
final prefs = await SharedPreferences.getInstance();
final jsonString = prefs.getString('myList');
if (jsonString != null) {
return jsonDecode(jsonString);
}
return [];
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ElevatedButton(
onPressed: _saveList,
child: Text('Save List'),
),
ElevatedButton(
onPressed: () async {
final loadedList = await _loadList();
print('Loaded List: $loadedList');
},
child: Text('Load List'),
),
],
);
}
}
通过这种方式,你可以将 List<Object>
序列化为 String
并存储到 SharedPreferences
中,需要使用时再反序列化回来。
领取专属 10元无门槛券
手把手带您无忧上云