如何监听ObservableList?代码无输出的问题排查
用ObservableList监听单个值变化的正确实现
问题说明
尝试使用ObservableList监听单个元素的变化,但运行代码后无输出,预期打印修改后的元素值second valuee。
初始代码
pubspec.yaml:
name: observable_demo dependencies: observable: ^0.24.0
Dart脚本:
import 'package:observable/observable.dart'; void main() { var obs = ObservableList.from(["first value"]); obs.changes.listen(([value = ""]) { print(value); }); obs[0] = "second valuee"; }
问题原因
obs.changes是Stream<List<ChangeRecord>>,而非直接发出元素值。它会发送包含列表变更详情的ChangeRecord对象集合,而不是修改后的元素本身。你的代码错误地将流的参数当作元素值处理,自然无法得到预期输出。
正确实现
要获取修改后的元素值,需要解析changes流中的ListChangeRecord,判断变更类型并提取新值:
import 'package:observable/observable.dart'; void main() { var obs = ObservableList.from(["first value"]); obs.changes.listen((List<ChangeRecord> records) { for (final record in records) { if (record is ListChangeRecord && record.type == ListChangeType.set) { print(record.newValue); } } }); obs[0] = "second valuee"; }
代码说明
changes流每次触发时会传递一组ChangeRecord,遍历这些记录筛选出列表元素替换的变更ListChangeType.set对应元素被替换的场景,通过record.newValue可以获取修改后的元素值- 无需额外依赖,
list_diff包已被observable间接引入,可直接使用相关类型
运行dart run demo.dart后,会输出预期的:
second valuee
内容的提问来源于stack exchange,提问作者Hydroper
相关产品推荐
相关产品推荐

