重建FutureBuilder

问题描述 投票:0回答:1

我正在尝试重建FutureBuilder,在我的情况下,这是为了更改显示给用户的摄像机。为此,我必须运行Future,FutureBuilder再次使用。未来目前看起来像这样:

body: FutureBuilder(
        future: _initializeCameraControllerFuture,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            return CameraPreview(_cameraController);
          } else {
            return Center(child: CircularProgressIndicator());
          }
        },
      ),

正在运行的未来就是这个:

Future<void> _initializeCameraControllerFuture;
  @override
  void initState() {
    super.initState();

    if (camerafrontback != true) {
      _cameraController =
          CameraController(widget.camera[0], ResolutionPreset.veryHigh);
    }else{
      _cameraController =
          CameraController(widget.camera[1], ResolutionPreset.veryHigh);
    }
    _initializeCameraControllerFuture = _cameraController.initialize();
  }

我有一个按钮,该按钮应触发FutureBuilder的此重建,它也正在更改'camerafrontback'布尔值,以便使用其他摄像机。如下所示:

IconButton(
            onPressed: () async {
              if (camerafrontback == true){
                setState(() {
                  camerafrontback = false;
                });
              }else{
                setState(() {
                  camerafrontback = true;
                });
              };

            },

[最后,在最后一个括号之前,必须添加一条语句来触发整个FutureBuilder的重建,但是我找不到适合我的代码的语句。

提前感谢您的回答!

flutter dart future rebuild
1个回答
1
投票

您需要重新初始化_initializeCameraControllerFuture

您可以做这样的事情

  @override
  void initState() {
    super.initState();
    _init();
  }

  ...


  _init() {
    if (camerafrontback) {
        _cameraController =
          CameraController(widget.camera[1], ResolutionPreset.veryHigh);

    } else {
         _cameraController =
          CameraController(widget.camera[0], ResolutionPreset.veryHigh);
    }
    _initializeCameraControllerFuture = _cameraController.initialize();
  }


  ...


  IconButton(
  onPressed: () async {
           if (camerafrontback) {
              camerafrontback = false;
              setState(_init());
      } else {
            camerafrontback = true;
             setState(_init);
             }
           },
         ),
© www.soinside.com 2019 - 2024. All rights reserved.