我试图使用Camera Plugin了解事情是如何运作的 . 我找到的所有例子都有这个部分:
List<CameraDescription> cameras;
Future<Null> main() async {
cameras = await availableCameras();
runApp(new CameraApp());
}
有没有办法在 initState()
方法中做到这一点?我想这也是关于运行 initState
-method之前所需的异步工作的更一般的问题 . (因为 initState
-method不能异步) .
我的目标是创建一个包含来自摄像头的源的 StatefulWidget
,该源从另一个文件中使用 . 这是我到目前为止所拥有的 . 任何帮助赞赏!
List<CameraDescription> cameras;
@override
void initState() {
super.initState();
getCameras();
controller = new CameraController(cameras[0], ResolutionPreset.medium);
controller.initialize().then( (_) {
if (!mounted) {
return;
}
setState(() {});
});
}
Future<Null> getCameras() async {
cameras = await availableCameras();
}
1 回答
您无法在
initState
中执行async
,但您可以启动其他功能中完成的异步工作,然后在完成setState
调用后发出信号 . 使用await
,您可以确保以正确的顺序设置摄像机和控制器 . 最后调用setState将确保在最后重建窗口小部件,您可以在任何地方传递初始化的摄像头控制器 .您还希望确保处理任何错误,该程序包包含
CameraException
,当特定于平台的代码失败时会抛出该错误 .