![](/img/trans.png)
[英]How do I solve this error: LateInitializationError: Field 'weatherInfo' has not been initialized?
[英]How do I solve the LateInitializationError in Flutter?
大家好,我遇到了以下問題,希望有人能幫助我:我正在嘗試使用以下代碼將相機包含在我的 flutter 應用程序中:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:camera/camera.dart';
class Route02 extends StatefulWidget {
@override
CameraState createState() => CameraState();
}
class CameraState extends State<Route02> {
late List<CameraDescription> cameras;
late CameraController _controller;
bool isReady = false;
@override
void initState() {
super.initState();
setupCameras();
}
Future<void> setupCameras() async {
try {
cameras = await availableCameras();
_controller = new CameraController(cameras[0], ResolutionPreset.ultraHigh);
await _controller.initialize();
} on CameraException catch () {
setState(() {
isReady = false;
});
}
setState(() {
isReady = true;
});
}
Widget build(BuildContext context) {
if (!isReady && !_controller.value.isInitialized) {
return Container();
}
return AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: CameraPreview(_controller));
}
}
在應用程序中訪問相機部分時,可以看到以下錯誤,之后相機仍會啟動:
LateInitializationError:字段“控制器”尚未初始化。
我已經嘗試添加whenComplete()方法並使用? 但它也沒有用。
有人有想法嗎?
我認為問題在於您正在運行“setupCameras()”,它在“initState()”方法中是異步的,而這不是。 嘗試這個:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:camera/camera.dart';
class Route02 extends StatefulWidget {
@override
CameraState createState() => CameraState();
}
class CameraState extends State<Route02> {
late List<CameraDescription> cameras;
late CameraController _controller;
Future<void> setupCameras() async {
try {
cameras = await availableCameras();
_controller = new CameraController(cameras[0], ResolutionPreset.ultraHigh);
await controller.initialize();
}
Widget build(BuildContext context) {
return FutureBuilder(
future: setupCameras(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
return AspectRatio(
aspectRatio: _controller.value.aspectRatio,
child: CameraPreview(_controller)
);
};
);
}
}
我有同樣的問題,我找不到完美的解決方案。
我認為 FutureBuilder 在這種情況下不起作用。 您還需要處理處置。 這似乎不是您使用 FutureBuilder 可以做的事情。
實際情況是,您可能無法成功初始化 CameraController。 無論出於何種原因,getCameras 都不會返回任何東西。 這意味着您的 CameraController 始終有可能是 null。因此,嘗試調整代碼以強制其成為非 null 類型是不正確的。
我最終只是將其更改為可空類型,並在必要時進行 null 檢查。 IMO,dart 為了 null 的安全而走得很遠。 它只會讓事情變得更復雜。 我喜歡 Python 使用 None 處理可為空的方式。
CameraController? _controller;
我看到兩個問題:
setupCameras()
會:
try { //... } on CameraException catch () { setState(() { isReady = false; }); } setState(() { isReady = true; });
這意味着如果拋出CameraException
, isReady
將設置為false
,然后立即設置為true
。
build
function 執行以下操作:
if (.isReady &&._controller;value.isInitialized) { return Container(); }
如果isReady
為假(我假設這應該表明_controller
尚未初始化),那么即使_controller
尚未初始化,您也會另外檢查_controller.value.isInitialized
。 你可能想要||
而是&&
。
或者,考慮只使_controller
可以為空而不是late
。 如果您需要在訪問_controller
之前檢查 boolean 標志( isReady
),這並不比使_controller
為空並直接檢查_controller != null
,這更簡單,更不容易出錯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.