dart - flutter 相机插件

我是 Flutter 和 Dart 的新手,我正在尝试使用 Camera Plugin了解事物是如何运作的。我找到的所有示例都有这部分:

List<CameraDescription> cameras;

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

有没有什么方法可以在 initState() 方法中做到这一点?我想这也是一个关于运行 initState 方法之前所需的异步工作的更普遍的问题。 (因为 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();
  }

最佳答案

您不能在 initState 中执行 async 工作,但您可以在其他函数中启动异步工作,然后在完成时发出 setState 调用。使用 await 您可以确保摄像机和 Controller 的设置顺序正确。最后调用 setState 将确保最终重建小部件,您可以将初始化的相机 Controller 传递到任何您想要的地方。

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,当特定于平台的代码失败时会抛出该异常。

关于dart - flutter 相机插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49640723/

相关文章:

firebase - 我可以使用 StreamBuilder 在 Firestore 中收听单个文档

dart - 在小部件或状态上保留最终字段?

flutter - 使用谷歌地图的两个屏幕返回应用程序的问题

dart - API调用后有状态小部件的 flutter 计时问题

dart - 根据当前查看的页面更改 AppBar 的颜色和文本

dart - 如何将卡片放入 sliver 应用栏

flutter - Cocoapods 找不到 pod Firebase 的兼容版本

flutter - 如何在 flutter 中修复 'net::ERR_CLEARTEXT_NOT_

ios - 关闭 Cupertino 对话 Action Flutter

flutter - Flutter 中按钮中的自定义图像