前言部分
今天闲鱼技术团队开源了flutter应用框架Fish Redux我们看到越来越多的项目在接入使用flutter,相信未来Flutter会是混合开发的首选方案。
我们知道在Android中经常会把用户的一些操作习惯或者是个人简单的信息存储到本地使用,以前我们都是基于SharedPreference来实现的简单存储,比如常用的登录状态、是否是夜间主题、软件版本等等。以前也是使用过ACache这个开源的项目,内部其实就是一个java文件。
内容部分
在Flutter中我们仍然需要这样的需求,搜索一下就出现了shared_preferences插件,引入该插件并使用即可,这里主要是要介绍如何存储数据和如何取出数据的问题。
Android中直接把json字符串存入本地,取出后直接在通过json解析成对象使用即可。
在Flutter中存储数据和取出数据时需要注意数据类型的一致。
举个例子:
///网络数据返回后我们拿到
http.Response res;
res = await http.get(url, headers: headerMap);
///这里我做一个封装,把需要的body返回给页面处理
Map<String, dynamic> responseJson = json.decode(res.body);
///BaseRes是我封装的基类
BaseRes resp = new BaseRes.fromJson(responseJson);
errorCode = resp.res;
///这里取出我们要返回的data
data = resp.data;
if (callback != null) {
if (errorCode == 0) {
callback(data);
} else {
_handError(errorCallback, errorMsg);
}
}
上面是我在封装的http中的代码我们返回的data其实是一个dynamic(动态类型,个人理解为类似js中var)类型,我们在业务层中拿到data并使用。如下代码:
HttpUtil.get(Api.account_user_infor_url, (data) {
if (data != null) {
///这里我们将dynamic类型的数据转换为json串,然后进行存储
var decode = json.encode(data);
prefs.setString("data", decode);
}
}, params: map);
上面存储完成后我们去除数据的时候也要对应的对字符串进行转换一下,我们存入的data是json的string,所以取出来的自然也是了,下面就好理解了,看代码:
final SharedPreferences prefs = await _prefs;
var data = prefs.getString("data");
if (data != null) {
///因为取出来的json,这里直接用进行映射成对应的map形式,下面进行class的赋值操作。
Map<String, dynamic> responseJson = json.decode(data);
AccountUserInfoBean bean = new AccountUserInfoBean.fromJson(responseJson);
setState(() {
print("本地数据处理成功:" + bean.toString());
});
}
结尾
上面主要是我们在存入的本地string的时候要注意进行一下json转换,因为如果不转换存入的string再取出来问题是会导致无法转换。
这里主要需要我们细心一些,后续会持续学习flutter的知识并记录问题。
有问题欢迎纠正,谢谢啦
如果对你有帮助就点个赞把