返回
揭秘 Flutter 中 ValueNotifier<List<T>> 监听谜题:用两次赋值解锁监听器!
前端
2023-11-19 18:02:58
引言
在 Flutter 开发中,ValueNotifier<List
问题根源:数组值改变但地址不变
ValueNotifier<List
解决方案:二次赋值触发地址改变
为了解决这个问题,我们需要使用二次赋值来触发列表地址的改变。具体来说,我们需要执行以下两个步骤:
- 创建一个新的列表并将其值复制到原始列表中。
- 将 ValueNotifier<List
> 的值设置为新列表。
这种方法将创建一个新的列表对象,从而更改列表的地址。这将触发 ValueNotifier<List
示例代码
import 'flutter/material.dart';
void main() {
ValueNotifier<List<int>> numbers = ValueNotifier<List<int>>([1, 2, 3]);
// 添加监听器
numbers.addListener(() {
print(numbers.value);
});
// 修改列表元素的值
numbers.value[0] = 4; // 监听器不会触发
// 使用二次赋值触发监听器
numbers.value = List<int>.from(numbers.value); // 创建新列表并复制值
numbers.value[0] = 5; // 监听器触发
// 输出:
// [1, 2, 3]
// [5, 2, 3]
}
最佳实践
在实际开发中,为了避免 ValueNotifier<List
结语
通过深入理解 ValueNotifier<List