必须初始化不可为 null 的变量 'cameras'

The non-nullable variable 'cameras' must be initialized

当我尝试使用相机变量时,我的代码出现以下错误。如何纠正这个。感谢您对此的帮助。

The non-nullable variable 'cameras' must be initialized.

CameraScreeen.dart

 import 'package:camera/camera.dart';
    import 'package:flutter/material.dart';
    
    
    List <CameraDescription> cameras;
    
    class CameraScreen extends StatefulWidget {
      const CameraScreen({Key? key}) : super(key: key);
    
      @override
      _CameraScreenState createState() => _CameraScreenState();
    }
    
    class _CameraScreenState extends State<CameraScreen> {
      @override
      Widget build(BuildContext context) {
        return Scaffold();
      }
    }

main.dartt

Future <void> main() async{
  WidgetsFlutterBinding.ensureInitialized();
  cameras =await availableCameras();
  runApp(const MyApp());
}

使相机可变。 喜欢:-

List <CameraDescription>? cameras;

你不能在没有分配 dart null 安全的情况下留下一个非空变量,不允许这样做..

你的全局变量相机没有初始化

List<> camera;//for global it is not acceptable

you can make List<>? camera;// now it is acceptable but you must need to initialize first before using it other wise it will throw exception 

您可以像这样使 cameras List 可为空:

List<CameraDescription>? cameras;

或者如果您不想让它为空,那么您可以像这样创建一个空的摄像机列表:

List<CameraDescription> cameras = List<CameraDescription>.empty(growable: true);

这是由于 Flutter 和 Dart 完善的空安全特性。

变量现在不能为空,如果你想接受它们 null 值,你必须使用 ?

使它们可以为空

例如:

List <CameraDescription>? cameras;

如果您仍然不想让它们可以为空,那么您可以使用 late 关键字,它允许我们稍后初始化值,但我们必须确保它在某处使用之前已初始化.

例如:

late List <CameraDescription> cameras;