是因为firstWhere
方法返回的是一个新的列表元素,并不会改变原列表,因此mobx观察器无法检测到列表的变化。
为了使颤动mobx观察器在List.firstWhere上起作用,我们可以使用mobx提供的可观察列表ObservableList
来解决。ObservableList
是mobx的一个扩展,它可以监听列表元素的变化,以便在列表发生变化时通知mobx观察器。
以下是解决方案的示例代码:
import 'package:mobx/mobx.dart';
// 定义一个可观察的列表
ObservableList<int> numbers = ObservableList<int>.of([1, 2, 3, 4, 5]);
// 定义一个用于筛选元素的方法
int findNumber(int number) {
return numbers.firstWhere((element) => element == number);
}
// 定义一个mobx观察器,用于监听列表的变化
final reactionDisposer = reaction((_) => numbers.length, (_) {
print('列表发生了变化');
});
void main() {
// 输出:3
print(findNumber(3));
// 添加一个新的元素到列表
numbers.add(6);
// 输出:6
print(findNumber(6));
// 移除一个元素
numbers.remove(3);
// 输出:null
print(findNumber(3));
// 停止mobx观察器的监听
reactionDisposer();
}
在上述代码中,我们使用ObservableList
来定义一个可观察的列表numbers
,并定义了一个findNumber
方法来使用firstWhere
筛选列表中的元素。我们还创建了一个mobx观察器reactionDisposer
来监听列表的长度变化,并在变化时打印一条消息。
通过以上的实现,当我们使用findNumber
方法筛选列表元素时,mobx观察器能够正确地检测到列表的变化并进行相应的处理。
腾讯云相关产品和产品介绍链接地址:
希望以上信息能够对您有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云