我是Flutter和Dart的新手,我正在尝试使用Camera Plugin来理解它是如何工作的.我找到的所有例子都有这个部分:
List<CameraDescription> cameras;
Future<Null> main() async {
cameras = await availableCameras();
runApp(new CameraApp());
}
Run Code Online (Sandbox Code Playgroud)
我有办法在initState()方法中做到这一点吗?我想这也是关于initState运行-method 之前所需的异步工作的更一般的问题.(因为initState- 方法不能异步).
我的目标是创建一个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();
}
Run Code Online (Sandbox Code Playgroud)
您无法继续async工作initState,但您可以启动其他功能中的异步工作,然后在完成setState通话后发出信号.使用await您可以确保以正确的顺序设置摄像机和控制器.最后调用setState将确保在最后重建窗口小部件,您可以在任何地方传递初始化的摄像头控制器.
class _CameraState extends State<CameraWidget> {
List<CameraDescription> cameras;
CameraController controller;
bool _isReady = false;
@override
void initState() {
super.initState();
_setupCameras();
}
Future<void> _setupCameras() async {
try {
// initialize cameras.
cameras = await availableCameras();
// initialize camera controllers.
controller = new CameraController(cameras[0], ResolutionPreset.medium);
await controller.initialize();
} on CameraException catch (_) {
// do something on error.
}
if (!isMounted) return;
setState(() {
_isReady = true;
});
}
Widget build(BuildContext context) {
if (!_isReady) return new Container();
return ...
}
}
Run Code Online (Sandbox Code Playgroud)
您还希望确保处理任何错误,该程序包包含CameraException在特定于平台的代码失败时抛出的错误.
| 归档时间: |
|
| 查看次数: |
4930 次 |
| 最近记录: |