You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中为何where方法内的print语句未执行?

Dart里where方法为啥不立刻执行回调?

这其实是Dart的惰性求值特性导致的。where方法返回的不是直接的结果列表,而是一个惰性迭代器——它不会在你把结果赋值给x的时候就立刻遍历原列表跑回调,只有当你真的要用到这个迭代器里的内容(比如print(x)、循环遍历、转成列表)的时候,才会逐个去原列表里拿元素执行回调。

看你的代码:

final List<int> numbers=[10,20,30,40,50,60,70,80,90];

final x=numbers.where((element) {
  print('Okay');
  return element>50;
});

// 只有执行这行时,才会触发where的回调遍历
print(x);
  • 单独执行final x=numbers.where(...)时,x只是个“待激活”的迭代器,回调里的print('Okay')根本不会跑。
  • 当你print(x)的时候,Dart需要把这个迭代器转成字符串展示,这时候才会遍历原列表的9个元素,所以print('Okay')会执行9次,同时把筛选出的大于50的元素输出。

要是想让回调立刻执行,直接把结果转成列表就行,toList()会强制遍历所有元素生成新列表:

final x=numbers.where((element) {
  print('Okay');
  return element>50;
}).toList();

这时候不管你用不用x,print('Okay')都会直接执行9次。

内容的提问来源于stack exchange,提问作者user22362195

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 22:23:14