Ошибка позднего отслеживания и оператор проверки на отсутствие

#flutter #dart #dart-null-safety

#трепетать #дротик #дротик-нулевая безопасность

Вопрос:

когда я скомпилировал свое приложение, появилась ошибка{LateInitializationError: поле ‘contorller’ не было инициализировано}, и когда я изменил ключевое слово Late с помощью ? оператор и поставил ! до того, как методы, зависящие от переменной, такие как stackoverflow, предположили, что появилась еще одна ошибка {Оператор проверки Null, используемый для нулевого значения}, так как я могу это решить

это статный класс

 class _MyHomePageState extends Statelt;MyHomePagegt; { BarcodeDetector ?labeler; CameraController? controller; bool isBusy = false; String result = ""; File ?_image; ImagePicker ?imagePicker; CameraImage ?img; void initState() { super.initState(); labeler = FirebaseVision.instance.barcodeDetector();  } intializeCamera() async { controller = CameraController(cameras[0], ResolutionPreset.medium); await controller!.initialize().then((_) { if (!mounted) { return; } controller!.startImageStream((image) =gt; { if (!isBusy) {isBusy = true, img = image, doBarcodeScanning()} }); });  }    void dispose() { controller!.dispose(); labeler!.close(); super.dispose();  }    Center( child: Container( margin: EdgeInsets.only(top: 100), height: 220, width: 220, child: AspectRatio( aspectRatio: controller!.value.aspectRatio, child: CameraPreview(controller), ), ), ),  

Ответ №1:

intializeCamera() это будущий метод, я буду рекомендовать вам использовать FutureBuilder его в этом случае. Для инициализации будущих данных требуется некоторое время.

Второй случай controller является нулевым, означает, что он может получать нулевые данные, которые хорошо иметь. CameraController? controller;

Но, используя нулевую проверку, затем справьтесь с ситуацией.

Вы также можете просто справиться вот так

 if (controller != null)  Center(  child: Container(  margin: EdgeInsets.only(top: 100),  height: 220,  width: 220,  child: AspectRatio(  aspectRatio: controller!.value.aspectRatio,  child: CameraPreview(controller),  ),  ),  ),  

Ответ №2:

Инициализируйте свои контроллеры initState() перед их использованием build() и не определяйте контроллеры как null — скорее используйте late ключевое слово.