如耻之,莫如为仁。仁者如射,射者正己而后发;发而不中,不怨胜己者,反求诸己而已矣。
从这篇博文开始,博主将为大家介绍Flutter的持久化方式。相信,对于有过Android开发经验的人来说,应该或多或少都接触过。比如,在Android里面的SharedPreferences,数据库Sqlite,文件读写,以及在服务器上的存储HTML5的localStorage,PWA。
合理地运用持久化,可以让App支持离线化操作,给用户带来极大地操作体验的提升。这篇,我们将讲解在Flutter中的SharedPreferences。
在Flutter开发中,官方推荐我们使用shared_preferences进行数据存储,它是Flutter社区开发的一个本地数据存取插件,具有一下特性:
(1)它是一个异步的,简单的,持久化的,key-value形式的存储系统
(2)在Android端,它是基于SharedPreferences开发的
(3)在IOS端,他是基于NSUserDefaults开发的
因为它是一个插件,所以在我们开发Flutter项目的时候,需要先引入这个插件,才能使用它,所以在pubspec.yaml里添加以下依赖就可以了,代码如下:
dependencies:
shared_preferences: ^0.5.1+1
引入shared_preferences后,我们就可以使用起来了,首先,博主介绍一下常用的方法,比如保存的方式,代码如下:
SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
sharedPreferences.setString(key,value);
同样,我们取出来数据,代码如下:
SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
sharedPreferences。getString(key);
除了写入和读取外,我们还可能用到删除数据,代码如下:
SharedPreferences sharedPreferences=await SharedPreferences.getInstance();
sharedPreferences.remove(key);
其实使用过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.
);
}
使用到shared_preferences本地存储的代码都有备注,这里就不在过多赘述了,本段代码实现的效果如首图所示,shared_preferences本地存储就讲到这里,下一篇讲解SQLite数据库。