Flutter iOS侧滑返回后ListView首次滚动无响应的修复方案咨询
Flutter iOS侧滑返回后ListView首次滚动无响应的修复方案咨询
大家好,我最近在Flutter iOS开发中碰到了一个挺闹心的问题:当用iOS原生侧滑手势从Screen B返回带ListView的Screen A时,第一次滚动ListView的手势会直接被忽略,必须抬起手指再试一次才能正常滚动。想请教下有没有干净的修复方案?或者是不是得手动重新绑定手势识别器或滚动控制器?求各位大佬给点思路🙏
📱 环境信息
- Flutter版本:3.24.0
- Dart版本:3.5.0
- 目标平台:iOS
- 导航方式:使用
Navigator.push跳转,iOS原生侧滑返回 - 测试设备:iPhone模拟器 + 真机
📝 复现步骤
- Screen A中包含一个绑定了
ScrollController的ListView - 通过
Navigator.push跳转到Screen B - 使用iOS原生侧滑手势返回Screen A
- 立即尝试滚动ListView——完全没有响应
- 抬起手指后再次尝试滚动,功能恢复正常
🎯 预期与实际行为
✅ 预期行为
侧滑返回后,ListView应该能立刻响应滚动手势
❌ 实际行为
第一次滚动手势被系统忽略,用户必须抬起手指重试才能滚动
🔍 已尝试的部分方案(均无效)
- 给每个页面都创建全新的
ScrollController→ ❌ - 给
ListView设置PageStorageKey→ ❌ - 禁用
primary: true并显式指定控制器 → ❌ - 用
AbsorbPointer包裹ListView并短暂屏蔽交互 → ❌(用户体验太差) - 通过
RouteAware在didPopNext()回调中调用jumpTo(_controller.offset)→ ❌
Screen A 示例代码
class ScreenA extends StatelessWidget { final ScrollController _controller = ScrollController(); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Screen A')), body: ListView.builder( key: PageStorageKey('screen_a'), controller: _controller, itemCount: 50, itemBuilder: (_, index) => ListTile(title: Text('Item $index')), ), ); } }
有没有大佬遇到过类似的问题?有没有更优雅的修复方式?比如是否需要手动重新关联手势识别器,或者Flutter框架层面有没有可以调整的配置?非常感谢大家的帮助🙏
内容来源于stack exchange
相关产品推荐
相关产品推荐

