【发布时间】:2020-05-14 21:51:01
【问题描述】:
我正在尝试重建 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 重建的语句,但我找不到适合我的代码的语句。
提前感谢您的回答!
【问题讨论】:
-
似乎仅仅触发
FutureBuilder的重建就可以解决您的问题。据我所知,仅更改camerafrontback的值似乎并没有做任何我们期望相机发生变化的事情。 -
链接
camerafrontback的作用是在Future 中将相机从camera[0]更改为相机camera[1],或者使用if声明的其他方式 -
在您的原始代码中,检查变量的唯一位置是
initState,因此即使更改了变量,也无需检查并更改相机控制器,除非您处理并重新初始化整个小部件。 -
@ChristopherMoore 是的,那这就是我必须做的,那么解决方法是什么?
-
@AjayKumar 的回答已经这样做了。除了在
initState期间,他还调用了他在按钮的onPressed中创建的_init方法。
标签: flutter dart future rebuild