You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:57:03