You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter unicreators/mvvm库:$watch与$watchFor方法区别解析

unicreators/mvvm库中$watch与$watchFor的区别解析

结合你提供的代码示例,这两个方法的核心区别可以从以下几个维度区分:

1. 观察目标的类型与来源

  • $watch:直接接收一个BindableProperty实例作为观察对象。比如示例中的model.timer$,它是ViewModel类中直接声明的BindableProperty.$tick实例,属于ViewModel的公开成员,可以直接引用。
  • $watchFor:接收一个Symbol类型的键(如示例中的#counter),这个键对应ViewModel内部通过registerProperty方法注册的BindableProperty。这类属性没有直接暴露为ViewModel的公开成员,而是通过Symbol键进行访问。

2. 使用场景

  • $watch:适合处理ViewModel中预先定义好的公开绑定属性,属性本身是ViewModel的一个字段,无需额外注册,直接引用即可建立观察。
  • $watchFor:适合处理ViewModel中动态注册或内部维护的绑定属性,这类属性通过registerProperty注册,避免直接暴露字段,更适合封装性要求较高的场景。

3. 调用方式

  • $watch:是View类的内置方法,在View的build方法中直接调用即可(示例中直接写$watch<int>(...))。
  • $watchFor:是ViewModel类的方法,必须通过ViewModel实例调用(示例中是model.$watchFor<int>(...))。

代码对应示例说明

  • 对于timer$:它是ViewModel中直接声明的BindableProperty,所以用$watch直接观察这个实例的变化,更新显示计时器文本。
  • 对于#counter:它是在ViewModel的init方法里通过registerProperty注册的属性,没有直接暴露为字段,所以通过model.$watchFor传入Symbol键#counter来观察其值的变化,更新点击次数文本。

内容的提问来源于stack exchange,提问作者DolDurma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:05:27