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

Flutter Camera插件takePicture方法在Android 12上无响应问题

Android 12下camera包takePicture()调用冻结无响应问题

原本运行正常的代码,升级到Android 12后出现冻结现象。代码使用camera: ^0.10.5依赖包,调用takePicture()异步方法时发生冻结,无报错信息也无返回结果。

已尝试升级Flutter版本及所有依赖包,也参考了camera依赖包的官方文档并套用新示例,但问题仍未解决。

相关代码

class TakePictureScreen extends StatefulWidget {
  TakePictureScreen({
    Key? key,
  }) : super(key: key);

  final CameraDescription camera = getIt<CameraDescription>();

  @override
  TakePictureScreenState createState() => TakePictureScreenState();
}

class TakePictureScreenState extends State<TakePictureScreen> with WidgetsBindingObserver {
  late CameraController _controller;
  late Future<void> _initializeControllerFuture;
  
  void _initializeCameraController() {
    _controller = CameraController(
      widget.camera,
      ResolutionPreset.high,
    );

    initializeControllerFuture = _controller.initialize();
  }
  
  void initializeCameraController() {
    _controller = CameraController(
      widget.camera,
      ResolutionPreset.high,
    );

    _initializeControllerFuture = _controller.initialize();
  }
  
  @override
  void initState() {
    super.initState();

    _initializeCameraController();
  }
  
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (!_controller.value.isInitialized) {
      return;
    }

    if (state == AppLifecycleState.inactive) {
      _controller.dispose();
    } else if (state == AppLifecycleState.resumed) {
      _initializeCameraController();
    }
  }
  
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Images')),
      body: FutureBuilder<void>(
        future: _initializeControllerFuture,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            // If the Future is complete, display the preview.
            return CameraPreview(_controller);
          } else {
            // Otherwise, display a loading indicator.
            return const Center(child: CircularProgressIndicator());
          }
        },
      ),
      // when you click floatingActionButton it takes picture
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          try {
            await _initializeControllerFuture;

            //final image = await _controller.takePicture();
            final XFile image = await _controller.takePicture();
            //image.saveTo("path");

            // after taking picture, send it to custom preview screen
            context.push(
              Routes.checkinPreview,
              arguments: ScreenArguments({
                "takenPicture": image.path
              }),
            );
          } on CameraException catch (e) {
            context.snackbar(e.description ?? "");
            context.snackbar(takePictureError);
          } on Exception catch (e) {
            context.snackbar(takePictureError);
          }
        },
        child: const Icon(Icons.add_a_photo),
      ),
    );
  }
  
  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:52:22