定义存储本地数据用的方法(AppStorage)

0
视频
0
完成
0%
进度
0
分钟
0
完成
0%
进度

在项目里我们经常会用到 SharedPreferences 在设备本地存储一些数据,这里每次都需要先执行这个 SharedPreferences 上面的 getInstance ,然后再使用它上面的一些方法去设置,获取或者移除数据。 下面我们可以定义一个类,在上面添加一些静态方法,用这些方法去做这些事情。

打开 app_service.dart,在这个文件里可以再定义一个类,名字是 AppStorage, 先定义一个存储数据用的方法,用 static 标记一下,表示这是一个静态方法,方法返回的东西是 Future 名字叫 setString,接受一个 String 类型的 key,还有一个 String 类型的 value,用 async 标记一下这个方法,

声明一个 prefs 等于 await ,执行 SharedPreferences.getInstance() , 方法 return 的是 prefs.setString,第一个参数是 key,第二个参数是 data。

setObject

下面再定义一个存储对象数据用的方法,复制一份这个 setString ,名字换成 setObject ,一个 key 参数,一个 value 参数,这个 value 的类型设置成 Object。

存储这个数据的时候,同样用的是 ShardPreferences 里的 setString ,数据的名字是 key,要存储的值可以用 jsonEncode 处理一下 value 参数的值。

使用这个数据的时候,可以用 getString 方法把它提取出来,然后用 jsonDecode 转换一下。

remove

下面再定义一个移除数据用的方法,先用 static 标记一下,类型是 Future 名字叫 remove,接收一个 String 类型的 key,用 async 标记一下,方法里面声明一个 prefs ,等于 await SharedPreferences.getInstance() ,下面 return 的 是 prefs.remove,把 key 交给这个方法。

getString

然后定义一个获取数据用的方法,static Future ,名字是 getString,接收一个 String 类型的 key,它的值就是要获取的数据的名字,用 async 标记一下,方法里声明一个 String? data; 下面声明一个 prefs 等于 await SharedPreferences.getInstance(),设置一下 data 的值,等于 prefs.getString,把 key 交给这个方法。

最后 return 的是一个 Future.value,把 data 交给它。

getMap

再定义一个静态方法,返回的值的类型是 Future?> 名字叫 getMap,接收一个 String key 参数,用 async 标记一下,方法里面声明一个 Map? 名字是 data 。

再声明一个 prefs ,等于 await ,用一下 SharedPreferences.getInstance() ,然后声明一个 result,等于 prefs.getString,把 key 交给它。 下面判断一下 result 是不是不等于 null ,如果是的话,就让 data 等于 jsonDecode 处理一下 result 。 最后让这个方法 return data。

使用

下面我们可以用一下这里定义的这些方法,先打开 auth_model.dart,这里有个 storeAuth 方法,改进一下这个方法,用一下 AppStorage.setObject ,存储一个数据,名字叫 auth,值是 auth 。 这个 set 方法存储这个 auth 数据的时候,会先用 jsonEncode 处理一下它。

removeAuth 要删除掉存储的名字是 auth 的数据,执行一下 AppStorage.remove ,要移除的数据的名字是 auth。

app.dart

打开 app.dart,找到 initialize 这个方法,再改进一下这个方法,删除掉这两行代码,这里可以声明一个 data,等于 await AppStorage.getMap,要获取的数据的名字是 auth ,这个 getMap 方法会把存储的数据提取出来,然后用 jsonDecode 处理一下,再返回处理之后的结果。

下面判断一下 data 是不是不等于 null ,如果是的话,声明一个 auth,用 Auth.fromJson ,直接把 data 交给这个方法。

post_index_model.dart

打开 post_index_model.dart,这里有个 storeLayout 方法,它要在本地存储一个数据,删除掉这里的这两行代码,改进一下,用一下 AppStorage.setString('postListLayout', data.toString());

post_list.dart

再打开 post_list.dart, 这里有个 restoreLayout 方法,它里面要获取本地存储的数据,用一下await AppStorage.getString 这个方法数据的名字叫 postListLayout。

测试

现在处理存储在本地设备上的数据用的是我们自己定义的方法,所以在这些文件里就不用再导入这个 shared_preferences 这个包了,可以从这些文件里,把导入这个包用的代码全部都删除掉。

最后再测试一下,打开用户,按一下登录,输入用户名,还有这个用户的密码,登录一下。成功以后会存储身份验证相关的数据。

再打开发现,修改一下列表的布局,然后可以打开调试,重新启动一下应用。列表布局保持不变,再打开用户,用户的登录状态也恢复了。

定义存储本地数据用的方法(AppStorage)《 Flutter 移动端实例:状态管理 》

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点