You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter相机CameraController未初始化报错LateInitializationError排查

Flutter相机页面LateInitializationError问题解决

问题原因

你用late关键字声明了cameraController,但startCamera是异步方法——initState调用它后会立刻执行后续代码并触发第一次build,此时cameraController还没完成赋值。build方法里直接访问cameraController.value.isInitialized,就会触发未初始化错误。虽然后续异步流程完成后控制器会被初始化并打印输出,但第一次build的错误已经发生了。另外dispose方法里直接调用cameraController.dispose()也存在同样的风险:如果控制器还没初始化页面就被销毁,会再次触发错误。

修复方案

将控制器改为可空类型,在使用前先判断是否已赋值,同时完善初始化和销毁逻辑:

class CameraPage extends StatefulWidget {
  const CameraPage({Key? key}) : super(key: key);

  @override
  State<CameraPage> createState() => _CameraPageState();
}

class _CameraPageState extends State<CameraPage> {
  late List<CameraDescription> cameras;
  CameraController? cameraController; // 改为可空类型

  @override
  void initState() {
    startCamera();
    super.initState();
  }

  void startCamera() async {
    try {
      cameras = await availableCameras();
      final controller = CameraController(
        cameras[0],
        ResolutionPreset.high,
      );
      cameraController = controller;
      await controller.initialize();
      if (mounted) setState(() {});
    } catch (e) {
      print("相机初始化失败: $e");
    }
  }

  @override
  void dispose() {
    cameraController?.dispose(); // 先判断是否为空再销毁
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    final controller = cameraController;
    if (controller != null && controller.value.isInitialized) {
      return Scaffold(
        body: Stack(
          children: [
            CameraPreview(controller),
          ],
        ),
      );
    } else {
      // 初始化过程中显示加载状态,替代空的SizedBox
      return const Scaffold(
        body: Center(child: CircularProgressIndicator()),
      );
    }
  }
}

关键修改点

  • 将late CameraController cameraController改为CameraController? cameraController,避免late的强制初始化要求
  • build方法中先判断控制器是否为空,再检查初始化状态
  • dispose时使用空安全操作符?.,确保只有控制器存在时才执行销毁
  • 优化异步初始化逻辑,使用try-catch捕获异常,并用await替代then,代码更清晰

内容的提问来源于stack exchange,提问作者Lear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 01:25:38