提问者:小点点

如何在Flutter中初始化后立即调用函数?


在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中延迟后运行代码?

所有这些解决方案只是调用延迟计时器,我想这会起作用,但是我正在寻找一个更动态的解决方案。


共2个答案

匿名用户

你可以用

https://github.com/slightfoot/flutter_after_layout

它只在布局完成后执行一次函数。或者只是查看它的实现并将其添加到您的代码中:-)

这基本上是

  void initState() {
    super.initState();
    WidgetsBinding.instance
        .addPostFrameCallback((_) => yourFunction(context));
  }

匿名用户

我认为你要找的是同时调用两个函数,而不是等待其中一个完成,然后启动另一个。如果这是你想要的,你需要在调用或初始化这两个函数时删除async并await…就像在代码片段中一样,你需要在前两行中删除async并await。

您共享的代码片段包含的有关何时何地调用这2个函数以及如何调用它们的信息相对较少…!