在Flutter中,如何在立即调用另一个函数之前等待屏幕的初始化?
对于进一步的上下文,当我按下按钮时,我会打开一个对话框,其中包含来自相机包的相机预览,相机预览顶部堆叠了一个容器盒作为“取景器”。然后,我想从rect_getter包中调用RectGetter函数来定位容器盒屏幕上的坐标,但是我需要等待先构建相机预览和容器盒。
下面是我调用的相机对话框,在调用RectGetter函数之前需要构建它:
cameraDialog() async {
await showDialog(
barrierDismissible: false,
context: context,
builder: (_) => AlertDialog(
insetPadding: EdgeInsets.all(5.0),
contentPadding: EdgeInsets.all(3.0),
content: FutureBuilder<void>(
future: _initializeControllerFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Stack(
children: [
cameraPrevew and containers etc...
我知道这篇文章:如何在Flutter中延迟后运行代码?
所有这些解决方案只是调用延迟计时器,我想这会起作用,但是我正在寻找一个更动态的解决方案。
你可以用
https://github.com/slightfoot/flutter_after_layout
它只在布局完成后执行一次函数。或者只是查看它的实现并将其添加到您的代码中:-)
这基本上是
void initState() {
super.initState();
WidgetsBinding.instance
.addPostFrameCallback((_) => yourFunction(context));
}
我认为你要找的是同时调用两个函数,而不是等待其中一个完成,然后启动另一个。如果这是你想要的,你需要在调用或初始化这两个函数时删除async并await…就像在代码片段中一样,你需要在前两行中删除async并await。
您共享的代码片段包含的有关何时何地调用这2个函数以及如何调用它们的信息相对较少…!