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

Flutter中的本地存储

作者头像
flyou
发布于 2019-08-06 09:09:41
发布于 2019-08-06 09:09:41
5.1K00
代码可运行
举报
文章被收录于专栏:flutter开发者flutter开发者
运行总次数:0
代码可运行

上期回顾

在上一篇文章中我们学习了在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’;

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

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

还是直接来看代码:

代码语言:javascript
代码运行次数:0
运行
复制

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

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

代码语言:javascript
代码运行次数:0
运行
复制

在上面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方法

代码语言:javascript
代码运行次数:0
运行
复制

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

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

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

代码语言:javascript
代码运行次数:0
运行
复制

我们使用获得的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平台可以使用

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

代码语言:javascript
代码运行次数:0
运行
复制

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

首先我们先获取存储目录

代码语言:javascript
代码运行次数:0
运行
复制

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

代码语言:javascript
代码运行次数:0
运行
复制

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

代码语言:javascript
代码运行次数:0
运行
复制

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

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

代码语言:javascript
代码运行次数:0
运行
复制

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

代码语言:javascript
代码运行次数:0
运行
复制

然后我们还是使用上面的代码通过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

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

代码语言:javascript
代码运行次数:0
运行
复制

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

代码语言:javascript
代码运行次数:0
运行
复制

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

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

代码语言:javascript
代码运行次数:0
运行
复制

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

代码语言:javascript
代码运行次数:0
运行
复制

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

代码语言:javascript
代码运行次数:0
运行
复制

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

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

代码语言:javascript
代码运行次数:0
运行
复制

好吧,下面来看下效果

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

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

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

小结


  • 可以在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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Flutter 构建完整应用手册-持久化
如果我们有一小部分我们想要保存的键值,我们可以使用shared_preferences插件。
南郭先生
2018/08/14
1.6K0
Flutter 本地存储实用教程
在这篇文章中,我将向大家分享Flutter 本地存储的一些实用知识和技巧。首先会带你一起认识什么是shared_preferences、如何使用shared_preferences、以及shared_preferences有那些常用的API?,最后会通过一个计数器的例子来巩固Flutter 中本地存储的知识点等。
CrazyCodeBoy
2019/12/10
1.1K0
Flutter 本地存储实用教程
【Flutter】shared_preferences 本地存储 ( 简介 | 安装 shared_preferences 插件 | 使用 shared_preferences 流程 )
shared_preferences 是 Flutter 提供的 本地数据存取 插件 ;
韩曙亮
2023/03/29
2.2K0
【Flutter】shared_preferences 本地存储 ( 简介 | 安装 shared_preferences 插件 | 使用 shared_preferences 流程 )
Flutter的两种本地存储方式之 SharedPreferences(1)
缓存少量的键值对信息(比如记录用户是否阅读了公告,或是简单的计数),可以使用 SharedPreferences。
徐建国
2021/08/06
1.4K0
Flutter 应用数据持久化指南
数据持久化是指将应用程序中的数据保存在持久存储介质(如硬盘、数据库等)中的过程。在计算机科学领域,持久化数据是指数据在程序退出或系统关机后仍然存在的能力。这种持久性使得数据可以在不同的应用程序运行周期之间保持不变,以便稍后进行检索、处理和使用。
繁依Fanyi
2024/04/05
6300
Flutter中使用shared_preferences本地存储
https://pub.flutter-io.cn/packages/shared_preferences
越陌度阡
2021/01/29
1.7K0
【Flutter】简单数据持久化
保存数据到本地磁盘是应用程序常用功能之一,比如保存用户登录信息、用户配置信息等。而保存这些信息通常使用 「shared_preferences」,它保存数据的形式为 Key-Value(键值对),支持 Android 和 iOS。shared_preferences 是一个第三方插件,在 Android 中使用 SharedPreferences,在 iOS中使用 NSUserDefaults。
老孟Flutter
2021/09/27
9560
Flutter开发-常用的第三方库
地址:https://pub.dev/packages/shared_preferences
码客说
2020/05/16
4900
Flutter 入门指北之数据持久化
博客:https://www.jianshu.com/p/97c2dbcac3af
陈宇明
2020/12/16
1.5K0
Flutter的两种本地存储方式之数据库(2)
如果需要持久化大量格式化后的数据,并且这些数据还会以较高的频率更新,为了考虑进一步的扩展性,通常会选用 sqlite 数据库来应对这样的场景。
徐建国
2021/08/06
2.1K0
Flutter 全平台 | 从 shared_preferences 聊聊六端插件
用过 Flutter 的小伙伴应该对 shared_preferences 并不陌生,它支持 六大平台,用于存储键值对,并以 xml 文件的形式将数据进行持久化。这种功能的实现会依赖各个平台的能力,而且功能点并不复杂。所以它是一个非常好的六端插件 研究对象。
张风捷特烈
2024/06/06
7380
Flutter 全平台 | 从 shared_preferences 聊聊六端插件
Flutter 中的本地存储
在Flutter中,我们使用shared_preferences组件来实现本地数据的存储。
拉维
2019/09/16
2.5K0
Flutter 本地存储之shared_preferences
提供简单数据的持久性存储,同时支持Android和IOS,键值对的方式,异步存储。
yechaoa
2022/06/10
5210
【Flutter 实战】文件系统目录
不同的平台对应的文件系统是不同的,比如文件路径,因此 Flutter 中获取文件路径需要原生支持,原生端通过 MethodChannel 传递文件路径到 Flutter,如果没有特殊的需求,推荐大家使用 Google 官方维护的插件 path_provider。
老孟Flutter
2020/09/22
3K0
【Flutter 实战】文件系统目录
Flutter for Web:跨平台移动与Web开发的新篇章
Flutter是Google推出的一款开源的UI工具包,用于构建高性能、高保真度的跨平台应用程序。Flutter最初专注于移动平台,但随着Flutter for Web的推出,它也扩展到了Web开发领域。本文将深入解析Flutter for Web的架构、核心概念、开发流程、性能优化以及与传统Web开发框架的比较。
天涯学馆
2024/06/13
4960
如何快速判断 Flutter 库是否需要适配鸿蒙?纯 Dart 库无需适配!
在鸿蒙开发中,选择合适的 Flutter 库至关重要。纯 Dart 库因其跨平台特性,无需适配即可直接使用。但对于新手来说,如何判断一个库是否为纯 Dart 库呢?本文将为你提供清晰的判断方法和实用技巧。
徐建国
2025/04/23
930
如何快速判断 Flutter 库是否需要适配鸿蒙?纯 Dart 库无需适配!
从 Flutter Go 到 Flutter Go web - 手把手带你轻松玩转 Flutter-web(一)
其实背景不多说, Flutter for Web 是 Google大会 伴随 Flutter 发布了1.5.4版本,同时也推出了Flutter for Web的预览版。
Nealyang
2019/09/29
1.8K0
从 Flutter Go 到 Flutter Go web - 手把手带你轻松玩转 Flutter-web(一)
【Flutter 实战】大量复杂数据持久化
保存数据到本地是应用程序非常重要的功能之一,比如如下场景:一个新闻类或者博客类的应用程序,打开后进入首页,如果本地没有保存数据,则需要通过网络获取数据,在返回数据之前,用户看到的是空白页面,而如果本地保存了部分新闻,则显示这部分数据,等待最新的数据返回时在刷新即可,对用户体验来说,明显第二种体验更佳。
老孟Flutter
2020/09/29
2.2K0
【Flutter 实战】大量复杂数据持久化
Flutter必备技能:轻松掌握本地存储与数据库优化技巧!
正因为有网络,App拥有与外界进行信息交换的通道,也因此具备了更新数据的能力。不过,经过交换后的数据通常都保存在内存中,而应用一旦运行结束,内存就会被释放,这些数据也就随之消失了。
JavaEdge
2023/07/09
1K0
Flutter 3.7 新特性:介绍后台isolate通道
此时此刻,我很高兴地宣布从 Flutter 3.7 开始开发人员可以在任意 isolate 中使用插件和平台通道了。 这是自 2018 年以来一直存在并且也是我们排名最高的问题之一。它被降低了优先级,因为实现并不容易且已存在解决方案,尽管很麻烦:始终在 root isolate(Flutter 提供的 isolate)中使用插件 . 然而,随着 Flutter 的日益成熟,越来越关注性能,俗话说“让它工作,让它正确,让它快速”。 选择实现这一特征有利于提高性能和易用性。 因此,考虑带来的收益我们决定实现这一特性。
睡觉谁叫
2023/02/10
4.3K0
Flutter 3.7 新特性:介绍后台isolate通道
推荐阅读
相关推荐
Flutter 构建完整应用手册-持久化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验