Flutter移动电商实战 --(50)持久化_shared_preferences

当app关掉了。再进去的时候 ,购物车的内容还是存在。

sqflite提供这个来操作SQLite数据库

flutter提供三种持久化的工具

今天要学的就是

shared_preferences

还有一种持久化就是:file,用流的形式去读取还是有些慢

安装shared_preferences

插件地址:

https://github.com/flutter/plugins/tree/master/packages/shared_preferences

提前开好了VPN 日本节点下载还是比较快的

1
shared_preferences: ^0.5.1

拿购物车坐一些持久化的增删改查

cart_page.dart

引入shared_preferences 然后stfull创建一个动态的widget

新增的方法setStringList,当然还有其他的方法setBool等等

增加方法就完成了

show 方法从持久化里面获取值,如果有值就用setState给 变量testList赋值,这样界面就发生变化了。

删除方法,一种是全部清空,一种是根据key值清空

写build方法

在build最上面先调用show的方法,

下面布局用了ListView然后分别放了container和两个按钮

运行效果展示:

点击增加按钮,增加了几条记录

在终端内输入q就是退出了

flutter run 重新运行。原来的数据还在

最终代码

cart_page.dart

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
 
class CartPage extends StatefulWidget {
  @override
  _CartPageState createState() => _CartPageState();
}
 
class _CartPageState extends State<CartPage> {
  List<String> testList=[];
  @override
  Widget build(BuildContext context) {
    _show();
    return Container(
      child: Column(
        children: <Widget>[
          Container(
            height: 500.0,
            child: ListView.builder(
              itemCount: testList.length,
              itemBuilder: (context,index){
                return ListTile(
                  title: Text(testList[index]),
                );
              },
            ),
          ),
          RaisedButton(
            onPressed: (){_add();},
            child: Text('增加'),
          ),
           RaisedButton(
            onPressed: (){_clear();},
            child: Text('清空'),
          )
        ],
      ),
    );
  }
  //增加方法
  void _add() async{
    SharedPreferences prefs=await SharedPreferences.getInstance();
    String temp = 'wjw是最棒哒!!!!!';
    testList.add(temp);
    prefs.setStringList('testInfo', testList);
    _show();
  }
 
   void _show() async{
     SharedPreferences prefs=await SharedPreferences.getInstance();
     if(prefs.getStringList('testInfo')!=null){
       setState(() {
        testList= prefs.getStringList('testInfo');
       });
     }
   }
   //删除
 
  void _clear() async{
    SharedPreferences prefs=await SharedPreferences.getInstance();
     //prefs.clear();//全部删除
    prefs.remove('testInfo');//根据key值清空
    setState(() {
     testList=[];
    });
   }
 
}

.

posted @   每天都要进步一点点  阅读(410)  评论(0)    收藏  举报
编辑推荐:
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 长文讲解 MCP 和案例实战
· Hangfire Redis 实现秒级定时任务,使用 CQRS 实现动态执行代码
· Android编译时动态插入代码原理与实践
· 解锁.NET 9性能优化黑科技:从内存管理到Web性能的最全指南
阅读排行:
· 一天 Star 破万的开源项目「GitHub 热点速览」
· 别再堆文档了,大模型时代知识库应该这样建
· 瞧瞧别人家的日期处理,那叫一个优雅!
· C#/.NET/.NET Core技术前沿周刊 | 第 35 期(2025年4.14-4.20)
· 使用TypeScript开发微信小程序(云开发)-入门篇
历史上的今天:
2018-09-18 redux-actions
2017-09-18 react-navigation 实战
点击右上角即可分享
微信分享提示