local_cache_sync
是一个很是简单易用的Flutter
本地储存库,适用于在本地储存一列轻量数据(例如用户保存在本地的一系列蓝牙设备的配置,或者缓存一系列用户信息)git
local_cache_sync
的全部方法,包括保存与读取,都是同步的,而不是异步的。github
同步存取意味着你不须要使用await
就能够获取和保存数据。在flutter
中,这能够显著减小StatefulWidget
的数量,大量减小代码的复杂度。json
使用local_cache_sync
保存与读取参数都是同步的,这意味着赋值便是保存,并且在StatelessWidget
中,能够当即使用数据,而不是异步请求数据再刷新。c#
下面这个Switch
组件的值会被缓存到本地,即便从新启动App也会保留:缓存
Switch( value: LocalCacheSync.userDefault.getWithKey<bool>('switch-A'), onChanged: (v) { setState(() { LocalCacheSync.userDefault.setWithKey<bool>('switch-A', v); }); }, ),
添加你的pubspec.yamlless
path_provider: ^1.4.5 local_cache_sync: ^1.1.0
初始化设置路径异步
getTemporaryDirectory().then((uri) { LocalCacheSync.instance.setCachePath(uri.path); });
使用local_cache_sync
实现保存用户自定义设置很是简单,只须要赋值与取值,无需异步等待,便可保存参数到本地。
读取参数也是同步的,这意味着你能够在StatelessWidget
中当即使用数据。ide
保存数据函数
LocalCacheSync.userDefault.setWithKey<bool>('isDarkMode',true); LocalCacheSync.userDefault.setWithKey<String>('token','aabbccdd'); LocalCacheSync.userDefault.setWithKey<Map>('x-config',{'id':1243});
读取数据ui
var res = LocalCacheSync.userDefault.getWithKey<bool>('isDarkMode'); var res = LocalCacheSync.userDefault.getWithKey<String>('token'); var res = LocalCacheSync.userDefault.getWithKey<Map>('x-config');
保存数据
LocalCacheSync.userDefault['isDarkMode'] = true; LocalCacheSync.userDefault['token'] = 'aabbccdd'; LocalCacheSync.userDefault['x-config'] = {'id':1243};
读取数据
bool res = LocalCacheSync.userDefault['isDarkMode']; String res = LocalCacheSync.userDefault['token']; Map res = LocalCacheSync.userDefault['x-config'];
若是你须要管理一系列值,请使用LocalCacheLoader
,只须要一个channel
标志,你就能够管理一系列值。
LocalCacheLoader
在内部实现了懒加载的效果:只有取value
属性时数据才真正被加载。
在应用中,加入你有1-100号设备显示在Listview.builder中,只有100号设备即将进入屏幕中时,100号设备的缓存参数才会被真正加载。也就是说LocalCacheLoader不会致使长列表卡顿。
我推荐你这样建立你的model:
class Device { final String uuid; final String name; final int type; Device({ this.uuid, this.name, this.type, }); Device.formJson(Map<String, dynamic> map) : this( uuid: map['uuid'], name: map['name'], type: map['type'], ); static LocalCacheLoader get _loader => LocalCacheLoader('device'); static List<Device> all() { return _loader.all .map<Device>( (cache) => Device.fromJson(cache), ) .toList(); } LocalCacheObject save() { return Device._loader.saveById(uuid, jsonMap); } Map<String, dynamic> get jsonMap => { 'uuid': uuid, 'name': name, 'type': type, }; }
你也能够另外封装loader来读写其余信息,对于轻量级的储存,以上是很是简单易用的。
不要在io密集型场景使用local_cache_sync,例如即时储存每秒10次的扫描结果。
虽然flutter中阻塞主线程不会致使UI卡顿,可是你仍不该当在io密集型场景使用,这超出了local_cache_sync设计的工做范围。
若是有问题,能够在github上issue或者pr。