如声明
Dart
var badgeInfo = F13BadgeEntity().obs
F13BadgeEntity是自定义类
这样定义,直接替换整个对象才会更新,(前提是调用的地方有Obx 会GetBuilder)
场景 1:直接替换整个对象(无需 refresh()
)
// ✅ 正确用法:替换整个对象
badgeInfo.value = F13BadgeEntity(count: 5);
场景 2:仅修改对象内部属性(需 refresh()
)
// ❌ 直接修改内部属性不会触发更新
badgeInfo.value.count = 5;
// ✅ 必须手动调用 refresh() 强制更新
badgeInfo.refresh();
refresh()
的适用场景
场景 | 是否需要 refresh() |
原因 |
---|---|---|
替换整个对象(badgeInfo.value = newEntity ) |
❌ 不需要 | .obs 自动检测引用变化 |
修改可观察属性(如 count.value = 5 ) |
❌ 不需要 | 属性本身是 .obs |
修改非可观察属性(如 badgeInfo.value.count = 5 ) |
✅ 需要 | GetX 无法追踪非可观察属性的变化 |
强制 UI 无差别刷新 | ✅ 需要 | 即使数据未变化也强制更新 |
在 GetX 中,badgeInfo.refresh()
的作用是 强制触发 UI 更新
badgeInfo.refresh()
是 GetX 提供的强制刷新方法:- 它会通知所有观察者(如
Obx
)立即更新 UI,即使数据未发生实际变化。 - 常用于 对象内部属性被修改但未触发自动更新 的场景。
- 它会通知所有观察者(如