Flutter 相机 takePicture 无法在 Android 12 上运行

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

我的代码运行正常,但在 Android-12 之后它开始冻结。它使用“相机:^0.10.5”依赖项。它没有错误也没有结果,只是冻结了。

这是代码。它在 takePicture() 异步调用上冻结。

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();
  }

我尝试升级Flutter版本和整个依赖项。之后,我回顾了相机依赖性剧本并应用了新的示例。还是没有结果。

这是依赖项:https://pub.dev/packages/camera

flutter dart android-camera
1个回答
0
投票

我也遇到同样的问题,请问你找到解决办法了吗?

© www.soinside.com 2019 - 2024. All rights reserved.