从Google Map屏幕跳转至AR屏幕时持续闪烁问题求助
问题
- 我做了个Google Map屏幕,初始化时会弹出对话框,点击OK按钮后跳转到集成了AR和相机功能的屏幕
- 仅在从Map Screen跳转至AR Screen时出现闪烁问题,如果把AR Screen设为初始屏幕,就不会闪烁,功能完全正常
- 两个屏幕都是stateful组件,都被包裹在Scaffold中
- 已经尝试移除Scaffold,也试过社区里的诸多解决方案,都没有效果
排查方向和解决办法
1. Map资源未及时释放
Map组件和AR/相机组件都属于高资源占用模块,跳转时Map页面的资源没彻底释放,会导致AR页面初始化时出现资源竞争,引发闪烁。
- 解决:在Map页面的
dispose()方法里手动销毁Map控制器,确保资源释放:
@override void dispose() { _mapController?.dispose(); super.dispose(); }
2. AR初始化阻塞UI线程
AR和相机的初始化如果同步在initState()里执行,会阻塞UI渲染,导致页面闪烁。
- 解决:把AR初始化逻辑放到UI渲染完成后的异步任务中:
@override void initState() { super.initState(); // 等UI构建完成后再初始化AR WidgetsBinding.instance.addPostFrameCallback((_) { _initAR(); }); } Future<void> _initAR() async { // 在这里异步执行AR引擎初始化、相机权限申请等操作 }
3. 页面过渡动画与AR渲染冲突
默认的页面跳转过渡动画可能和AR的相机预览渲染产生冲突,引发闪烁。
- 解决:关闭跳转的过渡动画:
Navigator.push( context, PageRouteBuilder( pageBuilder: (context, _, __) => ARScreen(), transitionDuration: Duration.zero, ), );
4. 相机预览提前渲染
AR页面还未初始化完成时,相机预览就先显示出来,会导致闪烁。
- 解决:添加状态开关,等AR初始化完成后再显示相机预览:
bool _arReady = false; // 在AR初始化完成后将_arReady设为true Visibility( visible: _arReady, child: ARView(/* 你的AR视图代码 */), )
内容的提问来源于stack exchange,提问作者Mister Zero
相关产品推荐
相关产品推荐

