flutter camera 简单调用

发布时间 2023-10-30 15:11:24作者: balder_m

1.添加依赖

dependencies:
  flutter:
    sdk: flutter
  ....
  camera: ^0.10.5+5
  permission_handler: ^9.0.2

 

示例代码

 

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

还有就是要获取权限