添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
import 'package:camera/camera.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:permission_handler/permission_handler.dart';
late List<CameraDescription> cameras;
Future<void> main() async {
  // 获取可用的摄像头列表
  WidgetsFlutterBinding.ensureInitialized();
  requestCameraPermission();
  cameras = await availableCameras();
  runApp(MyApp());
//申请相机权限
Future<bool> requestCameraPermission() async {
  //获取当前的权限
  var status = await Permission.camera.status;
  if (status == PermissionStatus.granted) {
    print('已授权');
    //已经授权
    return true;
  } else {
    //未授权则发起一次申请
    status = await Permission.camera.request();
    print('未授权');
    if (status == PermissionStatus.granted) {
      return true;
    } else {
      return false;
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Camera Demo',
      home: CameraScreen(),
class CameraScreen extends StatefulWidget {
  @override
  _CameraScreenState createState() => _CameraScreenState();
class _CameraScreenState extends State<CameraScreen> {
  late CameraController controller;
  @override
  void initState() {
    super.initState();
    // 初始化摄像头控制器
    controller = CameraController(cameras[1], ResolutionPreset.medium);
    controller.initialize().then((_) {
      if (!mounted) {
        print('controller.initialize() no mountd');
        return;
      setState(() {});
  @override
  void dispose() {
    // 释放资源
    controller.dispose();
    super.dispose();
  @override
  Widget build(BuildContext context) {
    if (!controller.value.isInitialized) {
      return Container();
    print('aspectratio');
    return AspectRatio(
      aspectRatio: controller.value.aspectRatio,
      child: CameraPreview(controller),

 Unhandled Exception: CameraException(CameraAccess, CAMERA_DISABLED (1): validateClientPermissionsLocked:1360: Caller "com.example.untitled" (PID 10228, UID 29709) cannot open camera "0" from background (calling UID 10228 proc state 20))

遇到这个问题,一般是要调用

  WidgetsFlutterBinding.ensureInitialized(); 

还有就是要获取权限