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();
还有就是要获取权限