Flutter PageRoute/buildTransitions每帧重建问题排查求助
Flutter PageRoute buildTransitions 每帧重建问题排查
Flutter的可扩展PageRoute类(PageRouteBuilder也实现了该类)包含两个处理页面内容的核心方法:
buildPage:负责构建页面主内容buildTransitions:负责将内容包裹在一个或多个过渡组件中
我遇到了页面过渡动画轻微卡顿、帧速率下降的问题,排查后发现buildPage符合预期,仅在必要时触发构建;但buildTransitions却和AnimatedBuilder的builder方法一样,每帧都会重建。根据文档描述,这并非预期行为——buildTransitions应该仅在Route状态发生变化时才重建。我已经禁用了所有自定义继承组件和Hero动画,但仍无法定位导致它每帧重建的原因。
附上测试代码:
class TestFadeRoute<T> extends PageRoute<T> { TestFadeRoute(TestFadePage<T> page); TestFadePage<T> get _page => settings as TestFadePage<T>; @override // 省略其他重写方法 Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) { print('buildPageDidBuild'); // 调试信息:仅在必要时打印(如首次构建或ModalRoute修改时) return Semantics( scopesRoute: true, explicitChildNodes: true, child: _page.child, ); } @override Widget buildTransitions(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) { print('buildTransitionsDidBuild'); // 调试信息:动画的每一帧都会打印 return FadeTransition( opacity: animation, child: child, ); } }
假设这确实属于非预期行为,我有两个疑问:
- 哪些原因可能导致
buildTransitions每帧重建? - 是否有办法判断Route状态是否发生变化、以及变化的时机?
目前我找到的临时解决方法是忽略buildTransitions,在buildPage传入的组件中通过context获取ModalRoute来实现过渡,但如果这才是正确做法,那buildTransitions存在的意义是什么?
内容的提问来源于stack exchange,提问作者Walrus
相关产品推荐
相关产品推荐

