我有这个代码块:
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
final CameraController? cameraController = _controller;
// App state changed before we got the chance to initialize.
if (cameraController == null || !cameraController.value.isInitialized) {
return;
}
if (state == AppLifecycleState.inactive) {
cameraController.dispose();
} else if (state == AppLifecycleState.resumed) {
_initializeCamera();
}
}
它类似于相机插件文档中提供的代码块(https://pub.dev/documentation/camera/latest/),除了我在 _initializeCamera() 中处理相机列表,而不是将其作为争论。
我遇到的问题是,当我调试代码时,我注意到当我在手机上的应用程序之间切换时,此函数将不断被调用。第一次调用时,它将按预期处置控制器,但随后它将继续调用自身,直到 binding.dart 调用 didHaveMemoryPressure() 并阻止其调用自身。当我切换回应用程序时,它确实会触发 _initializeCamera() 并且一切正常。如果我没有在那里设置断点,它就会运行,就好像没有问题一样。
我猜它的工作原理就像它确实处理了控制器并重新初始化它一样,就像什么也没发生一样,但这似乎不正常。谁能告诉我这是怎么回事。
尝试使用 dispose 将控制器设置为 null,还尝试使用cameraController.start 和 .stop,但我认为这没有什么区别。
可能不一定表明您的代码存在问题,而是表明 Flutter 如何处理生命周期状态更改。但是,重复调用可能是由于 CameraController 生命周期处理不正确造成的。
请使用以下代码更新 didChangeAppLifecycleState()。
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
final CameraController? cameraController = _controller;
if (cameraController == null || !cameraController.value.isInitialized) {
return;
}
if (state == AppLifecycleState.inactive) {
if (cameraController.value.isInitialized) {
cameraController.dispose();
_controller = null;
}
} else if (state == AppLifecycleState.resumed) {
if (_controller == null) {
_initializeCamera();
}
}
}