Obs<T> class

Obs 继承自 ValueNotifier,所以支持多种使用方式:

const count = Obs(0);

ObsBuilder(
  builder: (context){
    return Text('${count.value}');
  },
),
ListenableBuilder(
  listenable: count,
  builder: (context, child){
    return Text('${count.value}');
  },
),
ValueListenableBuilder(
  valueListenable: count,
  builder: (context, value, child){
    return Text('$value');
  },
),
Inheritance

Constructors

Obs(T value, {List<ObsNotifyMode> notifyMode = const [ObsNotifyMode.all], WatchCallback<T>? watch, bool immediate = false})
创建一个响应式变量,它继承官方实现的 ValueNotifier,可以应用于 ObsBuilderListenableBuilderValueListenableBuilder 等小部件,ObsBuilder 使用最简单,它会自动收集内部所有响应式变量,当发生变更时会自动重建小部件。

Properties

builderFunList List<VoidCallback>
ObsBuilder 刷新函数集合
finalinherited
hashCode int
The hash code for this object.
no setterinherited
hasListeners bool
Whether any listeners are currently registered.
no setterinherited
notifyMode List<ObsNotifyMode>
当响应式变量 setter 方法成功拦截时应用的通知模式,默认触发所有监听函数; 如果是空数组,那么修改响应式变量将不会触发任何通知,你可以调用 notify 方法手动触发监听函数。
getter/setter pair
oldValue ↔ T
记录上一次 _value
getter/setter pairinherited
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
value ↔ T
当小部件被 ObsBuilder 包裹时,它会追踪内部的响应式变量
getter/setter pairinherited-getteroverride-setter

Methods

addListener(VoidCallback listener) → void
Register a closure to be called when the object changes.
inherited
addWatch(WatchCallback<T> fun) → void
添加监听函数,与 ChangeNotifier 不同的是,它接收 newValue、oldValue 两个参数, 同时集合被设计为 Set,不允许添加重复的监听函数。
bindBuilders() → void
绑定刷新小部件,ObsBuilder 重写了 build 方法,在执行用户 builder 函数前, 会将刷新页面函数设置到 _tempBuilderNotifyFun,执行 builder 函数时, 如果代码中存在 .value 的响应式变量,则会进入 getter 函数体,这就是依赖自动收集的原理。
inherited
dispose() → void
释放所有监听器,一旦执行此变量将不可再次使用,不可使用的限制是来源于 ChangeNotifier
override
getValue() → T
提供子类直接访问 _value 方法,避免触发副作用
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
notify() → void
通知所有监听函数的执行、包括页面刷新
override
notifyBuilders() → void
通知所有 ObsBuilder 小部件刷新
inherited
notifyListeners() → void
暴露 ChangeNotifier 中的通知方法,允许用户可以触发 ChangeNotifier 中的监听函数
override
notifyWatch() → dynamic
执行通过构造方法添加的监听函数
notifyWatchList() → dynamic
执行通过 addWatch 方法添加的监听函数集合
removeListener(VoidCallback listener) → void
Remove a previously registered closure from the list of closures that are notified when the object changes.
inherited
removeWatch(WatchCallback<T> fun) → void
移除监听函数
reset() → void
重置响应式变量到初始状态
inherited
setValue(T value) → void
提供子类直接修改 _value 方法,避免触发副作用
inherited
toString() String
如果将响应式变量当字符串使用,你可以省略.value
inherited

Operators

operator ==(Object other) bool
The equality operator.
inherited