Flutter 中的 didChangeAppLifecycleState 不断被循环调用

问题描述 投票:0回答:1

我有这个代码块:

@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 dart dispose application-lifecycle
1个回答
0
投票

可能不一定表明您的代码存在问题,而是表明 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();
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.