[英]How to save list data in SharedPreferences flutter
我与数据库进行数据连接以带来数据列表,例如以下代码:
var listDATA = [];
Future listDATAs() async {
api = '*************';
var response = await http.post(Uri.parse(api));
var responsebody = jsonDecode(response.body);
if (responsebody.length >0){
for (int i = 0; i < responsebody.length; i++) {
listDATA.add(responsebody[i]['name']+ ':' + responsebody[i]['image'].toString());
}
return responsebody;
}else{
}
}
如何将 listDATA 存储在我需要保存名称和图像的共享首选项中? 存储后调用显示
最好不要在 SharedPreferences 中存储非原始数据类型,因为默认情况下它只支持原始数据类型。 但仍然有办法做到这一点。
您可以存储 API 调用的响应正文,而无需将 JSON 解码为String
值。
// Obtain shared preferences.
final prefs = await SharedPreferences.getInstance();
// Save an String value to 'response' key.
await prefs.setString('response', response.body);
如果你有 List 的响应类型,你可以使用setStringList
方法
await prefs.setStringList('items', <String>['Earth', 'Moon', 'Sun']);
通过这种方式,您可以将列表值存储在共享首选项中
static setListValue(String key, List< ProductsModel > value) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString(key, jsonEncode(value.map((e) => e.toJson()).toList()));
}
她我制定了一个标准方法来存储来自任何 class 的列表值,方法是调用
setListValue('store_list', listData);
之后,您必须制定一种获取此列表值的方法
//getListValue
static Future<List<ProductsModel>?> getListValue(String key) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
final dataMap = jsonDecode(prefs.getString(key) ?? '[]') as
List<dynamic>;
return dataMap.map<ProductsModel>((item) {
return ProductsModel.fromJson(item);
}).toList();
}
之后,您可以像这样调用此方法
var listValue = await SPUtils.getListValue('store_list');
// 用于将列表保存在共享首选项中
final prefs = await SharedPreferences.getInstance();
prefs.setString("list",jsonEncode(listDATA));
// 从共享首选项中获取列表
final prefs = await SharedPreferences.getInstance();
List listDATA = jsonDecode(prefs.get("list"));
您可以按照这些步骤操作。
toMap()
方法将您的 object 转换为 map。encode()
方法将您的 map 编码为字符串。 最终 SharedPreferences 首选项 = await
SharedPreferences
。 getInstance
();
await
首选项。 setString
('key', 编码数据);
// 获取和解码数据
final
String
musicsString = await
首选项。 getString
('musics_key');
例子:
import 'dart:convert';
void main() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
final String encodedData = Music.encode([ Music(id: 1,...), Music(id: 2,...), Music(id: 3,...), ]);
await prefs.setString('musics_key', encodedData);
// Fetch and decode data final String musicsString = await prefs.getString('musics_key');
final List<Music> musics = Music.decode(musicsString); }
class Music {
最终的 int id;
最终字符串名称、大小、等级、持续时间、img; 最喜欢的布尔值;
Music({
this.id,
this.rating,
this.size,
this.duration,
this.name,
this.img,
this.favorite, });
factory Music.fromJson(Map<String, dynamic> jsonData) {
return Music(
id: jsonData['id'],
rating: jsonData['rating'],
size: jsonData['size'],
duration: jsonData['duration'],
name: jsonData['name'],
img: jsonData['img'],
favorite: false,
); }
static Map<String, dynamic> toMap(Music music) => {
'id': music.id,
'rating': music.rating,
'size': music.size,
'duration': music.duration,
'name': music.name,
'img': music.img,
'favorite': music.favorite,
};
static String encode(List<Music> musics) => json.encode(
musics
.map<Map<String, dynamic>>((music) => Music.toMap(music))
.toList(),
);
static List<Music> decode(String musics) =>
(json.decode(musics) as List<dynamic>)
.map<Music>((item) => Music.fromJson(item))
.toList(); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.