「这是我参加11月更文应战的第28天,活动概况检查:2021最终一次更文应战」
背景
咱们介绍了一款轻量级的数据持久化的三方Get_Stroage的运用办法,昨日看了读写存的源码完成,今天咱们再来看看其他的源码完成
listen
先来看看listen是怎么完成的,将回调办法传给list_notifier,然后调用getX中的监听value改变并调用callback办法
VoidCallback listen(VoidCallback value) {
return _concrete.subject.addListener(value);
}
listenKey
跟上面的原理差不多,只不过在回调办法中筛选了key,将对应key的value回传
VoidCallback listenKey(String key, ValueSetter callback) {
final VoidCallback listen = () {
if (changes.keys.first == key) {
callback(changes[key]);
}
};
_keyListeners[callback] = listen;
return _concrete.subject.addListener(listen);
}
ReadWriteValue
首要的办法基本都介绍完了, 再看下链式办法是怎么现实的
0.val('count');
在获取变量的时分会创立一个ReadWriteValue
目标,然后其实咱们操作的是ReadWriteValue
目标
final count = 0.val('count');
class ReadWriteValue<T> {
final String key;
final T defaultValue;
final StorageFactory? getBox;
// final EncodeObject encoder;
ReadWriteValue(
this.key,
this.defaultValue, [
this.getBox,
// this.encoder,
]);
GetStorage _getRealBox() => getBox?.call() ?? GetStorage();
T get val => _getRealBox().read(key) ?? defaultValue;
set val(T newVal) => _getRealBox().write(key, newVal);
}
可以看到在ReadWriteValue
中有个get和set办法,在运用的时分咱们首要就是运用的这两个办法
写入
当需求更改值的时分,直接更改val就可以了
count.val = 1;
完成的话跟咱们直接调用write办法是相同的,虽然会先判别有没有getbox,一般咱们是不会传入getBox的,所以直接调用了GetStorage()
,再调用write
GetStorage _getRealBox() => getBox?.call() ?? GetStorage();
set val(T newVal) => _getRealBox().write(key, newVal);
读取
读取的时分直接count.val
,完成跟上面write防反相同,直接调用read办法,并返回
T get val => _getRealBox().read(key) ?? defaultValue;
结语
其实Get_Stroage首要核心是dart:html
的localStorage
,假如有时间的话,后面会再写一篇localStorage
的文章
期望大家把一些好的三方分享出来,打在谈论区,共同学习,共同进步
作为Flutter届的一个小学生,期望大家多多指教