前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter中的本地存储

Flutter中的本地存储

作者头像
flyou
发布2019-08-06 17:09:41
4.7K0
发布2019-08-06 17:09:41
举报
文章被收录于专栏:flutter开发者flutter开发者

上期回顾

在上一篇文章中我们学习了在Dart中的异步操作,你以为我没事啊还特地给你们专门写一篇文章啊,当然是有用的啊。

想必大家都知道所有的文件操作都是耗时的,那么肯定都是要在异步下进行的,不然的话那就真的要让用户死等啊,所以异步操作在文件的存储过程中显得异常的重要。

好吧,还是回归今天的主题,我们还是来看下Flutter中的本地存储吧

Flutter本地存储


和Android、Ios类似,Flutter也支持Preferences(Shared Preferences and NSUserDefaults) 、文件、和Sqlite3。

只不过要想使用这个功能需要引入官方仓库的相应插件,那么我们就分别来看下这三种存储方式的使用方法。

Preferences存储


Flutter中本身并不支持Preferences存储,需要借助于第三发的组件来实现。 打开 https://github.com/flutter/plugins 或者 https://pub.dartlang.org/flutter 可以在上面找到需要官方和第三方提供的其他组件,我们使用的shared_preferences就是其中的一个,打开shared_preferences插件对象的页面即可看到插件相关的信息

现在我们需要在项目里面引入shared_preferences插件

第三发插件的引用

  1. 打开项目的pubspec.yaml配置我文件在dependencies:节点下新增如下配置 shared_preferences: “^0.4.1”
  2. 点击开发工具提示的packages get按钮或者在命令行输入flutter packages get来同步第三方插件
  3. 在自己的Dart文件中引入插件即可正常使用了 import ‘package:shared_preferences/shared_preferences.dart’;

下面还是举个例子来说明下

实现输入一段字符串进行保存和获取操作

还是直接来看代码:

首先我们创建了一个TextField用来获取用户输入,然后我们再下面定义看了连个按钮,每当当即存储按钮都会触发save() 方法,每当点击获取按钮都会触发get()方法。

接下来我们还是来看下这两个方法里面做了什么吧。

在上面save方法中我们可以看到我们给它加上了async和await关键字,因为SharedPreferences的存贮也是一个轻量级的耗时操作,所以我们也是需要在异步中进行的。

我们使用SharedPreferences.getInstance()方法来实例化SharedPreferences对象,使用它的setString方法来存储用户输入的字符串。

setString(key, value) 其中key就是你存贮的名称,value就是你存储的值

当然,SharedPreferences里有很多存储其他对象的方法比如:

prefs.setBool(key, value) prefs.setDouble(key, value) prefs.setInt(key, value) prefs.setStringList(key, value)

接下来来看下get方法

在get方法中我们同样实例化了一个SharedPreferences对象,并且调用SharedPreferences的getString方法来获取我们存入的对象。

getString(key) key就是我们刚才存入的值,我们通过这个值可以在本地查找到我们存入的对象并返回。

同样的,get方法也是耗时操作,同样需要异步执行,我们使用async和await来使得get方法异步并返回了一个泛型为String的Future对象。

我们使用获得的Future对象调用then()方法,当get方法执行完后就会自动触发then()方法里面的操作弹出showSnackBar。

好吧,咱们还是去android目录下看下这个SharedPreferences文件在不在吧

嗯,其实也不难吧,接下来,来看下文件操作吧。

文件存储


和SharedPreferences操作一样,Flutter内部并没有提供对本地文件的支持,但是官方给我们提供了第三方的支持库哦。

同样的方法,我们需要在pubspec.yaml文件中引入

path_provider: ^0.4.0

然后调用flutter packages get

最后在自己的Dart文件中引入

import ‘package:path_provider/path_provider.dart’;

即可使用Flutter中的文件存储

在path_provider中有三个获取文件路径的方法:

  • getTemporaryDirectory()//获取应用缓存目录,等同IOS的NSTemporaryDirectory()和Android的getCacheDir() 方法
  • getApplicationDocumentsDirectory()获取应用文件目录类似于Ios的NSDocumentDirectory和Android上的 AppData目录
  • getExternalStorageDirectory()//这个是存储卡,仅仅在Android平台可以使用

下面我们就以把文件存在应用文件目录举个例子

好吧,原谅我比较懒,界面还是上面的界面,只不过我们把上面的save和get方法变了下。

首先我们先获取存储目录

然后在本地建立文件(不存在这个名字的自动创建并返回,存在则直接返回这个文件对象),名字就叫做 nameFile吧。

然后就是存储输入框内的内容了

我们使用上面获取到的文件直接直接调用writeAsString即可,当然它会把这个文件对象返回给你,你可以存储下这个文件对象在下次使用

最后,我们来读取本地的文件

我们直接调用file的readString方法来获取字符串并返回泛型为String的Future对象

然后我们还是使用上面的代码通过Future的then方法来回去反悔的数据并showSnackBar

好吧,我们还是去看下,这个名字为nameFile.txt文件是否存在。

果不其然,它静静的躺在那里,哈。

最后,我们来看下Flutter中Sqlite的用法

Sqlite


和SharedPreferences和文件操作操作一样,Flutter内部并没有提供对sqlite的支持,但是官方给我们提供了第三方的支持库哦。

同样的方法,我们需要在pubspec.yaml文件中引入

sqflite: >=0.8.5

然后调用flutter packages get

最后在自己的Dart文件中引入

import ‘package:sqflite/sqflite.dart’;

即可在Flutter使用Sqlite

同样的,我慢还是先贴代码:

首先,我们需要获取一下我们数据库存储的目录,数据库名字为name.db

然后建立库和数据表,并返回泛型为Database的Future对象(我们这里是使用的失去了语句建立的数据表操作,大家可以根据自己需要定制相应的ORM映射库)

我们建立了一个表名为user 主键为id,一个Text类型name的数据表。

接着,我们拿着这个Database对象就可以存储数据了 这里我们在事务里执行sql语句

然后,我们点击获取按钮,获取数据

这里我们的查询操作直接返回了一个List

最后,我们在点击事件触发获取到相应值并处理

好吧,下面来看下效果

我们在来看下应用目录下有没有这个数据库文件吧

可以看到数据库文件已经在应用目录下了,数据库文件我就不拿出来看了哈

其实,今天提到的本地存储操作都是比较简单,大家可以在下面多多试一试相应的操作,因为在以后的应用开发过程中会用的很多的。^笔芯^

小结


  • 可以在https://pub.dartlang.org/flutter获取第三发插件
  • 在pubspec.yaml引入或者更新第三发插件
  • SharedPreferences、文件、数据库操作都是命耗时操作,需要异步执行

试一试


今天的我们对SharedPreferences、文件、数据库获取的Future对象都是通过async和await获得的,那么大家在下面尝试把今天获取Future的方式改为 Future api方式去获取并完成今天的例子。

点击左下角阅读原文,体验更佳阅读效果

我怀疑这个是个坏掉的二维码,分享到朋友圈试试?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 flutter开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 上期回顾
  • Flutter本地存储
  • Preferences存储
    • 第三发插件的引用
    • 文件存储
    • Sqlite
    • 小结
    • 试一试
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档