flutter camera 简单调用
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();
还有就是要获取权限