Flutter本地存储与数据库的使用和优化

Flutter、Golang、Python、编译原理、算法、Chrome原理学习系列文章抢先看请关注【码农帮派】

Flutter仅接管了渲染层,涉及到存储等操作系统底层的行为,还是需要依托于原生平台的特性。Flutter与原生开发类似,支持三种数据持久化的方式,即文件存储、SharedPreferences和数据库。

 

文件

文件存储是存放在磁盘的指定路径上的一组信息集合。Flutter提供了两种文件存储的目录,即临时目录(Temporary)和文档目录(Documents)。

  • 临时存储目录(Temporary)是操作系统可以随时清除的目录,通常被用来存储一些不重要的临时缓存数据。在IOS上对应着NSTemporaryDirectory返回的路径,在Android上对应着getCacheDir返回的路径;

  • 文档存储目录(Documents)只有在删除应用程序的时候才会被清除的文件目录,通常用来存储一些重要的文件数据。在IOS上对应着NSDocumentDirectory返回的路径,在Android上对应着AppData目录。

Flutter本地存储与数据库的使用和优化_第1张图片

有上面的操作,我们就可以直接读写文件:

// 写文件writeContent("Hello World!");// 读取文件readContent().then((content) => print(content));var content = await readContent();

除了字符串的读取,Flutter还提供了二进制的读写,支持图片、压缩包等以二进制流的方式读写文件,读写的方式可以参考:

https://api.flutter.dev/flutter/dart-io/File-class.html

 

SharedPreferences

如果我们只需要缓存少量的键值数据,则可以使用SharedPreferences。Flutter的SharedPreferences存储会调用平台相关的特性进行数据持久化存储,在IOS平台使用NSUserDefaults,在Android平台使用SharedPreferences。

【注意】与Android的SharedPreferences不同的是,Flutter在设置的时候仅需调用setter方法就同步内存和磁盘中的键值对数据,无需在调用刷新数据的操作。

调用上面的方法进行SharedPreferences数据读写:

Flutter本地存储与数据库的使用和优化_第2张图片

【注意】SharedPreferences只能存储基本数据类型,比如int、double、bool和string。

 

数据库

当我们有大量高频读写的数据,就需要使用sqlite数据库进行数据持久化存储。接下来的例子介绍如何在Flutter中使用数据库读写。

数据库的读写一般会用到对象类,下面以Student对象类为例:

Flutter本地存储与数据库的使用和优化_第3张图片

接下来需要创建数据库,我们可以通过openDatabase函数获得一个数据库存储地址,通过数据库表初始化语句创建一个存放数据的表:

上面的代码创建了数据库,需要注意的是:

  • 使用join的方法声明数据库路径,可以将两个地址拼接在一起,join函数会按照当前操作系统的路径分割符,将前后两端路径进行拼接,我们无需关心分隔符是使用\还是/。

  • 在创建数据库的时候,openDatabase中需要传入一个参数version,这个参数是最新的数据库版本号,在onCreate回调函数中同时也会也有一个version(上面代码中的localDBVersion),这个version是用户手机上使用的数据库版本号,我们可以通过这两个版本号定制化的做一些数据库更新的操作。比如,version = 2的时候,student表结构发生了不可逆的改变,为了后续数据的读写,之前的数据必须首先被删除,那么我们可以在onCreate函数中,判断localDBVersion,从而进行student表的删除,并重新创建。

 

数据库插入:

Flutter本地存储与数据库的使用和优化_第4张图片

 

数据库的读取:

Flutter本地存储与数据库的使用和优化_第5张图片

sqlite还提供了更新、删除、事务等高级特性,更多的方法可以查看:

https://www.sqlitetutorial.net/

https://pub.dev/documentation/sqflite/latest/

你可能感兴趣的:(Flutter,Android,iOS,Flutter)