Flutter(二十七)——shared_preferences本地存储

举报
择城终老 发表于 2021/07/26 23:45:04 2021/07/26
【摘要】 如耻之,莫如为仁。仁者如射,射者正己而后发;发而不中,不怨胜己者,反求诸己而已矣。 本文目录 前言shared_preferences本地存储基本用法实现记录自增数据的程序 前言 从这篇博文开始,博主将为大家介绍Flutter的持久化方式。相信,对于有过Android开发经验的人来说,应该或多或少都接触过。比如,在Android里面的Sh...

如耻之,莫如为仁。仁者如射,射者正己而后发;发而不中,不怨胜己者,反求诸己而已矣。

前言

从这篇博文开始,博主将为大家介绍Flutter的持久化方式。相信,对于有过Android开发经验的人来说,应该或多或少都接触过。比如,在Android里面的SharedPreferences,数据库Sqlite,文件读写,以及在服务器上的存储HTML5的localStorage,PWA。
实现效果
合理地运用持久化,可以让App支持离线化操作,给用户带来极大地操作体验的提升。这篇,我们将讲解在Flutter中的SharedPreferences。

shared_preferences本地存储

在Flutter开发中,官方推荐我们使用shared_preferences进行数据存储,它是Flutter社区开发的一个本地数据存取插件,具有一下特性:

(1)它是一个异步的,简单的,持久化的,key-value形式的存储系统

(2)在Android端,它是基于SharedPreferences开发的

(3)在IOS端,他是基于NSUserDefaults开发的

因为它是一个插件,所以在我们开发Flutter项目的时候,需要先引入这个插件,才能使用它,所以在pubspec.yaml里添加以下依赖就可以了,代码如下:

dependencies:
  shared_preferences: ^0.5.1+1

  
 
  • 1
  • 2

基本用法

引入shared_preferences后,我们就可以使用起来了,首先,博主介绍一下常用的方法,比如保存的方式,代码如下:

SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
sharedPreferences.setString(key,value);

  
 
  • 1
  • 2

同样,我们取出来数据,代码如下:

SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
sharedPreferences。getString(key);

  
 
  • 1
  • 2

除了写入和读取外,我们还可能用到删除数据,代码如下:

SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
sharedPreferences.remove(key);

  
 
  • 1
  • 2

其实使用过Java开发Android的程序员都对上面的代码了如指掌,基本上一摸一样,到这里,shared_preferences本地存储的基本用法就讲解完了。

实现记录自增数据的程序

接着,我们通过一个项目实战来应用shared_preferences本地存储,我们都知道,我们使用Android Studio创建一个Flutter程序的时候,默认就有一个自增程序的代码,这里我们稍微做一下改变,让这个系统自增的程序,每次启动的时候,从shared_preferences本地存储获取数据,代码如下:

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0; @override
  void initState() { super.initState(); _getSharedDate();//获取本地存储的数据
  }
//自增的方法
  void _incrementCounter() async{ SharedPreferences sharedPreferences=await SharedPreferences.getInstance(); int count=(sharedPreferences.get("counter") ?? 0)+1;//获取本地存储的数据自增 setState(() { _counter=count;//显示到界面上 }); await sharedPreferences.setInt("counter", count);//把自增后的数据在存储到本地
  }
//取出存储的数据
  _getSharedDate() async{ SharedPreferences sharedPreferences=await SharedPreferences.getInstance(); setState(() { _counter=sharedPreferences.get('counter') ?? 0;//从本地存储的数据获取,如果没有设置为0,如果有设置为存储的数据 });
  } @override
  Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'You have pushed the button this many times:', ), Text( '$_counter', style: Theme.of(context).textTheme.display1, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: Icon(Icons.add), ), // This trailing comma makes auto-formatting nicer for build methods. );
  }

  
 
  • 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

使用到shared_preferences本地存储的代码都有备注,这里就不在过多赘述了,本段代码实现的效果如首图所示,shared_preferences本地存储就讲到这里,下一篇讲解SQLite数据库。

文章来源: liyuanjinglyj.blog.csdn.net,作者:李元静,版权归原作者所有,如需转载,请联系作者。

原文链接:liyuanjinglyj.blog.csdn.net/article/details/105045946

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。