首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >颤振相机插件

颤振相机插件
EN

Stack Overflow用户
提问于 2018-04-03 23:57:33
回答 1查看 9.1K关注 0票数 8

我对“颤振”和“飞镖”都很陌生,我正在尝试使用照相机插件来理解事情是如何工作的。我发现的所有例子都有以下几个部分:

代码语言:javascript
运行
复制
List<CameraDescription> cameras;

Future<Null> main() async {
  cameras = await availableCameras();
  runApp(new CameraApp());
}

initState()方法中有什么方法可以这样做吗?我想这也是一个关于运行initState-method之前所需的异步工作的更普遍的问题。(因为initState-method不能是异步的)。

我的目标是创建一个包含来自摄像机的提要的StatefulWidget,它是从另一个文件中使用的。到目前为止我的情况是这样的。任何帮助都很感激!

代码语言:javascript
运行
复制
  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();
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-04 00:10:10

您不能在async中执行initState工作,但是您可以启动在其他函数中完成的异步工作,然后在完成setState调用时发出信号。使用await,您可以确保相机和控制器按照正确的顺序设置。在最后调用setState将确保小部件在最后被重建,在那里您可以将初始化的相机控制器传递到任何您想要的位置。

代码语言:javascript
运行
复制
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 (!mounted) return;
    setState(() {
      _isReady = true;
    });
  }

  Widget build(BuildContext context) {
    if (!_isReady) return new Container();
    return ...
  }
}

您还需要确保处理任何错误,包中包含一个CameraException,当平台特定的代码失败时会抛出它。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49640723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档