【发布时间】:2020-11-01 00:25:35
【问题描述】:
我不断收到来自 camera.dart 的错误消息,即“名称”正在被空对象调用。
一段时间后,我意识到问题在于在我的 initstate 中的异步代码完成之前调用了 build 方法(实际上我有点自豪,因为我至少理解了这个问题 :))
我尝试了许多不同的方法来正确初始化我的相机,但我做不到。 这是我的代码的最后一次迭代。
处理这个未来的惯用方式是什么?
class _PicturePreviewState extends State<PicturePreview> {
List<CameraDescription> cameras;
CameraDescription camera;
CameraController cameraController;
Future<void> initializeController;
Future<void> getCameras() async {
try {
cameras = await availableCameras();
} catch(e) {print(e);}
camera = cameras.last;
print(camera);
}
@override
void initState() {
super.initState();
// getCameras();
availableCameras().then((availableCameras) {
cameras = availableCameras;
camera = cameras.first;
cameraController = CameraController(
camera,
ResolutionPreset.low,
);
initializeController = cameraController.initialize();
print(cameraController.value.isInitialized);
});
// cameraController = CameraController(
// camera,
// ResolutionPreset.low,
// );
// initializeController = cameraController.initialize();
// print(cameraController.value.isInitialized);
}
@override
void dispose() {
cameraController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: FutureBuilder<void>(
future: initializeController,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
// If the Future is complete, display the preview.
return CameraPreview(cameraController);
}
else {
// Otherwise, display a loading indicator.
print(snapshot.connectionState);
return Center(child: CircularProgressIndicator());
}
},
),
我一直依靠this page 来使用相机包,但我无法逐字使用它,因为我无法继续将相机对象向下传递到我的小部件树。
【问题讨论】:
标签: flutter async-await camera