目录
四、ValueNotifier 与 ChangeNotifier 的比较
前言
在上一篇文章中,介绍了ChangeNotifier的用法以及实现原理。
本文将详细介绍 ValueNotifier
的实现原理、用法,以及它与 ChangeNotifier
的关系和区别,帮助开发者更好地理解和应用它们。
一、ValueNotifier 概述
ValueNotifier
是 Flutter 基础库(package:flutter/foundation.dart
)中的一个类,继承自 ChangeNotifier
,用于管理单一值的状态变化。它通过监听值的变化并通知注册的监听者,触发 UI 重建。ValueNotifier
是轻量级的状态管理工具,特别适合简单场景,例如计数器、开关状态或表单输入。
ValueNotifier的核心特征如下:
单一值管理:
ValueNotifier
持有一个类型为T
的值,值的变化会触发通知。继承自 ChangeNotifier:复用了
ChangeNotifier
的监听者管理和通知机制。简单易用:通过
ValueListenableBuilder
或手动监听,轻松集成到 Flutter 应用中。
二、ValueNotifier 的实现原理
ValueNotifier
的实现非常简洁,它直接继承了 ChangeNotifier
,并在其基础上添加了值管理和通知逻辑。以下是 ValueNotifier
的核心源码解析:
1.类定义
1.类定义
class ValueNotifier<T> extends ChangeNotifier implements ValueListenable<T> {
ValueNotifier(this._value);
T _value;
@override
T get value => _value;
set value(T newValue) {
if (_value == newValue) {
return;
}
_value = newValue;
notifyListeners();
}
@override
String toString() => '${describeIdentity(this)}($value)';
}
2.关键字段
_value
:存储类型为 T
的值,表示当前状态。
类型安全性:通过泛型 T
,确保值的类型安全。
3.关键方法
1.构造函数
ValueNotifier(this._value);
初始化时传入一个初始值 _value,存储为内部状态。
2.getter:value
T get value => _value;
初始化时传入一个初始值 _value,存储为内部状态。
3.setter:value:
set value(T newValue) {
if (_value == newValue) {
return;
}
_value = newValue;
notifyListeners();
}
当设置新值时,先检查新值是否与旧值相等(使用 == 比较)。
如果值未变,直接返回(避免不必要的通知)。
如果值变化,更新 _value 并调用 notifyListeners 通知所有监听者。
注意:notifyListeners 是从 ChangeNotifier 继承的方法,用于触发监听者回调。