场景介绍:
在电商类App开发中,通常都会有一个功能模块——购物车,购物车中的一项功能是持久化,就是我们关掉APP,下次进入后,还是可以显示出我们放入购物车的商品(类似于缓存localStorage、sessionStorage)。但是这些商品不和后台进行数据交互,前台如果使用sqflite又显得太重,还要懂SQL知识。所以在购物车页面我们采用shared_preferences来进行持久化,它是简单的键-值的操作,可以实现常见增删改查功能。
功能实现:
- 安装插件
GitHub地址:https://github.com/flutter/plugins/tree/master/packages/shared_preferences
插件库地址:https://pub.dev/packages/shared_preferences
shared_preferences: ^0.5.7+3
- 在页面中引入包:
import 'package:shared_preferences/shared_preferences.dart';
- 开发UI界面以及功能函数:
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
class CartPage extends StatefulWidget {
CartPage({Key key}) : super(key: key);
@override
_CartPageState createState() => _CartPageState();
}
class _CartPageState extends State<CartPage> {
List<String> testList = [];
@override
Widget build(BuildContext context) {
// 每次页面渲染时都要先执行持久化查询函数
this._show();
return Container(
child: Column(
children: [
Container(
height: 500.0,
color: Colors.grey[24],
child: ListView.builder(
itemCount: this.testList.length,
itemBuilder: (context, index){
return ListTile(
title: Text(this.testList[index]),
);
}
),
),
// 添加按钮
RaisedButton(
onPressed: (){
this._add();
},
child: Text(
'添加'
),
),
// 删除按钮
RaisedButton(
onPressed: (){
this._dele();
},
child: Text(
'删除'
),
),
],
),
);
}
// 增加
void _add() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String temp = '我是最帅的';
this.testList.add(temp);
prefs.setStringList('testInfo', testList);
_show();
}
// 查询
void _show() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
if(prefs.getStringList('testInfo') != null){
setState(() {
this.testList = prefs.getStringList('testInfo');
});
}
}
// 删除
void _dele() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
// 1. 删除指定key的持久化数据
prefs.remove('testInfo');
// 2. 删除所有持久化数据(本例中不采取此种方案)
// prefs.clear();
setState(() {
this.testList = [];
});
}
}
至此,我们的持久化就实现了,本人亲测有效,如有问题,请在评论区留言~~~