dev.to | 📄 原文链接 | 2026-09-05 收录

驯服 Flutter 无限滚动:为何三行 async* 没抓住重点,BlocSignal 如何修复

来源:dev.to — 2026-09-03

📋 概述

Flutter 无限滚动的经典竞态——弱网下快速滑动在毫秒内触发多次越过底部的滚动通知,第一条异步请求还没返回监听器又触发,于是列表重复、页码跳变、状态机锁死。作者剖析一篇广为流传的「三行 Dart async* 治好分页」的文章,指出把 page/hasMore 装进生成器只是表面整洁:Dart 的 StreamIterator.moveNext() 明确不支持并发,仍会抛 `Bad state`,于是作者本人还留着手动 guard——等于换了个抽象而非消除并发。真正的解法是把并发当作事件边界的策略问题,用 BlocSignal 无流的 droppable() 在同步调用帧内丢弃重叠触发。

🔑 核心要点

💡 金句

你没有真正消除并发守卫,只是给那层守卫上面再套了个流迭代器抽象。
← 返回 dev.to 首页