颤动摄像头插件

Tho*_*ysa 4 dart flutter

我是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)

Jon*_*ams 7

您无法继续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在特定于平台的代码失败时抛出的错误.