track<T> static method
T
track<T>({
- required T useSignal(),
- ValueChanged<
Signal> onChanged = _defaultOnSignalDoNothing, - ValueChanged<
SignalSubscription> onConnected = _defaultOnConnectedImmediatelyClose,
在客户程序Widget.build时,会有读操作,比如 Text("username: ${username.value}")
Signal.watchRead在useSignalcallback执行期间打开一个封闭的瞬时作用域,
期间的Signal读操作会通知onRead,并用onChanged为key注册监听器
onChanged当watchRead阶段发现有signal的read操作,会把注册onChanged注册到Signal的监听池onConnected当注册onChanged到的监听池时,会调用此方法,并提供一个dispose钩子给外部程序 外部程序生命周期结束时,可以用dispose移除监听器s
Implementation
static T track<T>({
required T Function() useSignal,
ValueChanged<Signal> onChanged = _defaultOnSignalDoNothing,
ValueChanged<SignalSubscription> onConnected = _defaultOnConnectedImmediatelyClose,
}) {
/// TODO watchRead时应关闭写通知,因为watchRead是在Widget.build期间调用的,写通知会触发Watcher的setState,不符合flutter规范
_listenerTempStack.add(_Watcher(onChanged: onChanged, onListen: onConnected));
try {
return useSignal();
} finally {
_listenerTempStack.removeLast();
}
}