#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
ключевое слово.