Flutter使用camera插件时availableCameras返回null 调用cameras[0]报错
问题原因
你遇到的报错本质是cameras变量为null时就尝试调用下标取值,导致空调用异常。按以下步骤排查解决即可:
解决方案
1. 补全平台静态权限配置
Android端
打开android/app/src/main/AndroidManifest.xml,在<manifest>根标签下(不要放到<application>标签内部)添加相机和录音权限:
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
2. 新增动态权限申请逻辑
Android 6.0及以上系统需要动态申请权限,没有授权时调用availableCameras()会返回空值。你已经引入了permission_handler依赖,在调用获取相机列表前先申请权限:
Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); // 新增动态权限申请 var cameraStatus = await Permission.camera.request(); var micStatus = await Permission.microphone.request(); if (cameraStatus.isGranted && micStatus.isGranted) { cameras = await availableCameras(); } runApp(CameraApp()); }
3. 增加空判断避免异常
在使用cameras前必须做空判断和长度校验,不要直接取下标:
修改initState里的逻辑:
@override void initState() { super.initState(); // 先判断cameras不为空且有元素再取值 if (cameras != null && cameras.isNotEmpty) { controller = CameraController(cameras[0], ResolutionPreset.max); controller.initialize().then((_) { if (!mounted) { return; } setState(() {}); }); } }
4. 兼容依赖版本
你当前pubspec.yaml中camera依赖没有指定版本,可能拉到的最新版和你当前的Flutter SDK不兼容,建议指定稳定版本:
把pubspec.yaml里的camera:改为:
camera: ^0.10.5+5
修改后执行flutter pub get,然后完全卸载设备上已安装的测试应用,重新运行即可。
内容的提问来源于stack exchange,提问作者Hillux
相关产品推荐
相关产品推荐

